mirror of https://github.com/grpc/grpc-java.git
xds: Rename to dynamic reloading cert provider. (#7547)
Co-authored-by: matthewstevenson88 <mattstev@google.com>
This commit is contained in:
parent
45b8b0eb60
commit
26a4ca38ec
|
|
@ -37,9 +37,10 @@ import java.util.concurrent.TimeUnit;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
/** Implementation of {@link CertificateProvider} for Zatar cert provider. */
|
/** Implementation of {@link CertificateProvider} for dynamic reloading cert provider. */
|
||||||
final class ZatarCertificateProvider extends CertificateProvider {
|
final class DynamicReloadingCertificateProvider extends CertificateProvider {
|
||||||
private static final Logger logger = Logger.getLogger(ZatarCertificateProvider.class.getName());
|
private static final Logger logger =
|
||||||
|
Logger.getLogger(DynamicReloadingCertificateProvider.class.getName());
|
||||||
|
|
||||||
private final SynchronizationContext syncContext;
|
private final SynchronizationContext syncContext;
|
||||||
private final ScheduledExecutorService scheduledExecutorService;
|
private final ScheduledExecutorService scheduledExecutorService;
|
||||||
|
|
@ -52,7 +53,7 @@ final class ZatarCertificateProvider extends CertificateProvider {
|
||||||
@VisibleForTesting SynchronizationContext.ScheduledHandle scheduledHandle;
|
@VisibleForTesting SynchronizationContext.ScheduledHandle scheduledHandle;
|
||||||
private Path lastModifiedTarget;
|
private Path lastModifiedTarget;
|
||||||
|
|
||||||
ZatarCertificateProvider(
|
DynamicReloadingCertificateProvider(
|
||||||
DistributorWatcher watcher,
|
DistributorWatcher watcher,
|
||||||
boolean notifyCertUpdates,
|
boolean notifyCertUpdates,
|
||||||
String directory,
|
String directory,
|
||||||
|
|
@ -75,7 +76,8 @@ final class ZatarCertificateProvider extends CertificateProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
private SynchronizationContext createSynchronizationContext(String details) {
|
private SynchronizationContext createSynchronizationContext(String details) {
|
||||||
final InternalLogId logId = InternalLogId.allocate("ZatarCertificateProvider", details);
|
final InternalLogId logId =
|
||||||
|
InternalLogId.allocate("DynamicReloadingCertificateProvider", details);
|
||||||
return new SynchronizationContext(
|
return new SynchronizationContext(
|
||||||
new Thread.UncaughtExceptionHandler() {
|
new Thread.UncaughtExceptionHandler() {
|
||||||
private boolean panicMode;
|
private boolean panicMode;
|
||||||
|
|
@ -182,7 +184,7 @@ final class ZatarCertificateProvider extends CertificateProvider {
|
||||||
private static final Factory DEFAULT_INSTANCE =
|
private static final Factory DEFAULT_INSTANCE =
|
||||||
new Factory() {
|
new Factory() {
|
||||||
@Override
|
@Override
|
||||||
ZatarCertificateProvider create(
|
DynamicReloadingCertificateProvider create(
|
||||||
DistributorWatcher watcher,
|
DistributorWatcher watcher,
|
||||||
boolean notifyCertUpdates,
|
boolean notifyCertUpdates,
|
||||||
String directory,
|
String directory,
|
||||||
|
|
@ -192,7 +194,7 @@ final class ZatarCertificateProvider extends CertificateProvider {
|
||||||
long refreshIntervalInSeconds,
|
long refreshIntervalInSeconds,
|
||||||
ScheduledExecutorService scheduledExecutorService,
|
ScheduledExecutorService scheduledExecutorService,
|
||||||
TimeProvider timeProvider) {
|
TimeProvider timeProvider) {
|
||||||
return new ZatarCertificateProvider(
|
return new DynamicReloadingCertificateProvider(
|
||||||
watcher,
|
watcher,
|
||||||
notifyCertUpdates,
|
notifyCertUpdates,
|
||||||
directory,
|
directory,
|
||||||
|
|
@ -209,7 +211,7 @@ final class ZatarCertificateProvider extends CertificateProvider {
|
||||||
return DEFAULT_INSTANCE;
|
return DEFAULT_INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract ZatarCertificateProvider create(
|
abstract DynamicReloadingCertificateProvider create(
|
||||||
DistributorWatcher watcher,
|
DistributorWatcher watcher,
|
||||||
boolean notifyCertUpdates,
|
boolean notifyCertUpdates,
|
||||||
String directory,
|
String directory,
|
||||||
|
|
@ -28,9 +28,9 @@ import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provider of {@link ZatarCertificateProvider}s.
|
* Provider of {@link DynamicReloadingCertificateProvider}s.
|
||||||
*/
|
*/
|
||||||
final class ZatarCertificateProviderProvider implements CertificateProviderProvider {
|
final class DynamicReloadingCertificateProviderProvider implements CertificateProviderProvider {
|
||||||
|
|
||||||
private static final String DIRECTORY_KEY = "directory";
|
private static final String DIRECTORY_KEY = "directory";
|
||||||
private static final String CERT_FILE_KEY = "certificate-file";
|
private static final String CERT_FILE_KEY = "certificate-file";
|
||||||
|
|
@ -41,34 +41,34 @@ final class ZatarCertificateProviderProvider implements CertificateProviderProvi
|
||||||
@VisibleForTesting static final long REFRESH_INTERVAL_DEFAULT = 600L;
|
@VisibleForTesting static final long REFRESH_INTERVAL_DEFAULT = 600L;
|
||||||
|
|
||||||
|
|
||||||
static final String ZATAR_PROVIDER_NAME = "gke-cas-certs";
|
static final String DYNAMIC_RELOADING_PROVIDER_NAME = "gke-cas-certs";
|
||||||
|
|
||||||
static {
|
static {
|
||||||
CertificateProviderRegistry.getInstance()
|
CertificateProviderRegistry.getInstance()
|
||||||
.register(
|
.register(
|
||||||
new ZatarCertificateProviderProvider(
|
new DynamicReloadingCertificateProviderProvider(
|
||||||
ZatarCertificateProvider.Factory.getInstance(),
|
DynamicReloadingCertificateProvider.Factory.getInstance(),
|
||||||
ScheduledExecutorServiceFactory.DEFAULT_INSTANCE,
|
ScheduledExecutorServiceFactory.DEFAULT_INSTANCE,
|
||||||
TimeProvider.SYSTEM_TIME_PROVIDER));
|
TimeProvider.SYSTEM_TIME_PROVIDER));
|
||||||
}
|
}
|
||||||
|
|
||||||
final ZatarCertificateProvider.Factory zatarCertificateProviderFactory;
|
final DynamicReloadingCertificateProvider.Factory dynamicReloadingCertificateProviderFactory;
|
||||||
private final ScheduledExecutorServiceFactory scheduledExecutorServiceFactory;
|
private final ScheduledExecutorServiceFactory scheduledExecutorServiceFactory;
|
||||||
private final TimeProvider timeProvider;
|
private final TimeProvider timeProvider;
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
ZatarCertificateProviderProvider(
|
DynamicReloadingCertificateProviderProvider(
|
||||||
ZatarCertificateProvider.Factory zatarCertificateProviderFactory,
|
DynamicReloadingCertificateProvider.Factory dynamicReloadingCertificateProviderFactory,
|
||||||
ScheduledExecutorServiceFactory scheduledExecutorServiceFactory,
|
ScheduledExecutorServiceFactory scheduledExecutorServiceFactory,
|
||||||
TimeProvider timeProvider) {
|
TimeProvider timeProvider) {
|
||||||
this.zatarCertificateProviderFactory = zatarCertificateProviderFactory;
|
this.dynamicReloadingCertificateProviderFactory = dynamicReloadingCertificateProviderFactory;
|
||||||
this.scheduledExecutorServiceFactory = scheduledExecutorServiceFactory;
|
this.scheduledExecutorServiceFactory = scheduledExecutorServiceFactory;
|
||||||
this.timeProvider = timeProvider;
|
this.timeProvider = timeProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return ZATAR_PROVIDER_NAME;
|
return DYNAMIC_RELOADING_PROVIDER_NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -76,7 +76,7 @@ final class ZatarCertificateProviderProvider implements CertificateProviderProvi
|
||||||
Object config, CertificateProvider.DistributorWatcher watcher, boolean notifyCertUpdates) {
|
Object config, CertificateProvider.DistributorWatcher watcher, boolean notifyCertUpdates) {
|
||||||
|
|
||||||
Config configObj = validateAndTranslateConfig(config);
|
Config configObj = validateAndTranslateConfig(config);
|
||||||
return zatarCertificateProviderFactory.create(
|
return dynamicReloadingCertificateProviderFactory.create(
|
||||||
watcher,
|
watcher,
|
||||||
notifyCertUpdates,
|
notifyCertUpdates,
|
||||||
configObj.directory,
|
configObj.directory,
|
||||||
|
|
@ -117,7 +117,7 @@ final class ZatarCertificateProviderProvider implements CertificateProviderProvi
|
||||||
ScheduledExecutorService create() {
|
ScheduledExecutorService create() {
|
||||||
return Executors.newSingleThreadScheduledExecutor(
|
return Executors.newSingleThreadScheduledExecutor(
|
||||||
new ThreadFactoryBuilder()
|
new ThreadFactoryBuilder()
|
||||||
.setNameFormat("zatar" + "-%d")
|
.setNameFormat("dynamicReloading" + "-%d")
|
||||||
.setDaemon(true)
|
.setDaemon(true)
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
|
|
@ -36,35 +36,40 @@ import org.junit.runners.JUnit4;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
|
|
||||||
/** Unit tests for {@link ZatarCertificateProviderProvider}. */
|
/** Unit tests for {@link DynamicReloadingCertificateProviderProvider}. */
|
||||||
@RunWith(JUnit4.class)
|
@RunWith(JUnit4.class)
|
||||||
public class ZatarCertificateProviderProviderTest {
|
public class DynamicReloadingCertificateProviderProviderTest {
|
||||||
|
|
||||||
@Mock ZatarCertificateProvider.Factory zatarCertificateProviderFactory;
|
@Mock DynamicReloadingCertificateProvider.Factory dynamicReloadingCertificateProviderFactory;
|
||||||
@Mock private ZatarCertificateProviderProvider.ScheduledExecutorServiceFactory
|
@Mock private DynamicReloadingCertificateProviderProvider.ScheduledExecutorServiceFactory
|
||||||
scheduledExecutorServiceFactory;
|
scheduledExecutorServiceFactory;
|
||||||
@Mock private TimeProvider timeProvider;
|
@Mock private TimeProvider timeProvider;
|
||||||
|
|
||||||
private ZatarCertificateProviderProvider provider;
|
private DynamicReloadingCertificateProviderProvider provider;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws IOException {
|
public void setUp() throws IOException {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
provider =
|
provider =
|
||||||
new ZatarCertificateProviderProvider(
|
new DynamicReloadingCertificateProviderProvider(
|
||||||
zatarCertificateProviderFactory, scheduledExecutorServiceFactory, timeProvider);
|
dynamicReloadingCertificateProviderFactory,
|
||||||
|
scheduledExecutorServiceFactory,
|
||||||
|
timeProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void providerRegisteredName() {
|
public void providerRegisteredName() {
|
||||||
CertificateProviderProvider certProviderProvider =
|
CertificateProviderProvider certProviderProvider =
|
||||||
CertificateProviderRegistry.getInstance()
|
CertificateProviderRegistry.getInstance()
|
||||||
.getProvider(ZatarCertificateProviderProvider.ZATAR_PROVIDER_NAME);
|
.getProvider(
|
||||||
assertThat(certProviderProvider).isInstanceOf(ZatarCertificateProviderProvider.class);
|
DynamicReloadingCertificateProviderProvider.DYNAMIC_RELOADING_PROVIDER_NAME);
|
||||||
ZatarCertificateProviderProvider zatarCertificateProviderProvider =
|
assertThat(certProviderProvider)
|
||||||
(ZatarCertificateProviderProvider) certProviderProvider;
|
.isInstanceOf(DynamicReloadingCertificateProviderProvider.class);
|
||||||
assertThat(zatarCertificateProviderProvider.zatarCertificateProviderFactory)
|
DynamicReloadingCertificateProviderProvider dynamicReloadingCertificateProviderProvider =
|
||||||
.isSameInstanceAs(ZatarCertificateProvider.Factory.getInstance());
|
(DynamicReloadingCertificateProviderProvider) certProviderProvider;
|
||||||
|
assertThat(
|
||||||
|
dynamicReloadingCertificateProviderProvider.dynamicReloadingCertificateProviderFactory)
|
||||||
|
.isSameInstanceAs(DynamicReloadingCertificateProvider.Factory.getInstance());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -72,11 +77,11 @@ public class ZatarCertificateProviderProviderTest {
|
||||||
CertificateProvider.DistributorWatcher distWatcher =
|
CertificateProvider.DistributorWatcher distWatcher =
|
||||||
new CertificateProvider.DistributorWatcher();
|
new CertificateProvider.DistributorWatcher();
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Map<String, ?> map = (Map<String, ?>) JsonParser.parse(MINIMAL_ZATAR_CONFIG);
|
Map<String, ?> map = (Map<String, ?>) JsonParser.parse(MINIMAL_DYNAMIC_RELOADING_CONFIG);
|
||||||
ScheduledExecutorService mockService = mock(ScheduledExecutorService.class);
|
ScheduledExecutorService mockService = mock(ScheduledExecutorService.class);
|
||||||
when(scheduledExecutorServiceFactory.create()).thenReturn(mockService);
|
when(scheduledExecutorServiceFactory.create()).thenReturn(mockService);
|
||||||
provider.createCertificateProvider(map, distWatcher, true);
|
provider.createCertificateProvider(map, distWatcher, true);
|
||||||
verify(zatarCertificateProviderFactory, times(1))
|
verify(dynamicReloadingCertificateProviderFactory, times(1))
|
||||||
.create(
|
.create(
|
||||||
eq(distWatcher),
|
eq(distWatcher),
|
||||||
eq(true),
|
eq(true),
|
||||||
|
|
@ -94,11 +99,11 @@ public class ZatarCertificateProviderProviderTest {
|
||||||
CertificateProvider.DistributorWatcher distWatcher =
|
CertificateProvider.DistributorWatcher distWatcher =
|
||||||
new CertificateProvider.DistributorWatcher();
|
new CertificateProvider.DistributorWatcher();
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Map<String, ?> map = (Map<String, ?>) JsonParser.parse(FULL_ZATAR_CONFIG);
|
Map<String, ?> map = (Map<String, ?>) JsonParser.parse(FULL_DYNAMIC_RELOADING_CONFIG);
|
||||||
ScheduledExecutorService mockService = mock(ScheduledExecutorService.class);
|
ScheduledExecutorService mockService = mock(ScheduledExecutorService.class);
|
||||||
when(scheduledExecutorServiceFactory.create()).thenReturn(mockService);
|
when(scheduledExecutorServiceFactory.create()).thenReturn(mockService);
|
||||||
provider.createCertificateProvider(map, distWatcher, true);
|
provider.createCertificateProvider(map, distWatcher, true);
|
||||||
verify(zatarCertificateProviderFactory, times(1))
|
verify(dynamicReloadingCertificateProviderFactory, times(1))
|
||||||
.create(
|
.create(
|
||||||
eq(distWatcher),
|
eq(distWatcher),
|
||||||
eq(true),
|
eq(true),
|
||||||
|
|
@ -167,7 +172,7 @@ public class ZatarCertificateProviderProviderTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final String MINIMAL_ZATAR_CONFIG =
|
private static final String MINIMAL_DYNAMIC_RELOADING_CONFIG =
|
||||||
"{\n"
|
"{\n"
|
||||||
+ " \"directory\": \"/var/run/gke-spiffe/certs/..data\","
|
+ " \"directory\": \"/var/run/gke-spiffe/certs/..data\","
|
||||||
+ " \"certificate-file\": \"certificates.pem\","
|
+ " \"certificate-file\": \"certificates.pem\","
|
||||||
|
|
@ -175,7 +180,7 @@ public class ZatarCertificateProviderProviderTest {
|
||||||
+ " \"ca-certificate-file\": \"ca_certificates.pem\""
|
+ " \"ca-certificate-file\": \"ca_certificates.pem\""
|
||||||
+ " }";
|
+ " }";
|
||||||
|
|
||||||
private static final String FULL_ZATAR_CONFIG =
|
private static final String FULL_DYNAMIC_RELOADING_CONFIG =
|
||||||
"{\n"
|
"{\n"
|
||||||
+ " \"directory\": \"/var/run/gke-spiffe/certs/..data1\","
|
+ " \"directory\": \"/var/run/gke-spiffe/certs/..data1\","
|
||||||
+ " \"certificate-file\": \"certificates2.pem\","
|
+ " \"certificate-file\": \"certificates2.pem\","
|
||||||
|
|
@ -58,9 +58,9 @@ import org.mockito.ArgumentMatchers;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
|
|
||||||
/** Unit tests for {@link ZatarCertificateProvider}. */
|
/** Unit tests for {@link DynamicReloadingCertificateProvider}. */
|
||||||
@RunWith(JUnit4.class)
|
@RunWith(JUnit4.class)
|
||||||
public class ZatarCertificateProviderTest {
|
public class DynamicReloadingCertificateProviderTest {
|
||||||
private static final String CERT_FILE = "cert.pem";
|
private static final String CERT_FILE = "cert.pem";
|
||||||
private static final String KEY_FILE = "key.pem";
|
private static final String KEY_FILE = "key.pem";
|
||||||
private static final String ROOT_FILE = "root.pem";
|
private static final String ROOT_FILE = "root.pem";
|
||||||
|
|
@ -72,7 +72,7 @@ public class ZatarCertificateProviderTest {
|
||||||
@Rule public TemporaryFolder tempFolder = new TemporaryFolder();
|
@Rule public TemporaryFolder tempFolder = new TemporaryFolder();
|
||||||
private String symlink;
|
private String symlink;
|
||||||
|
|
||||||
private ZatarCertificateProvider provider;
|
private DynamicReloadingCertificateProvider provider;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws IOException {
|
public void setUp() throws IOException {
|
||||||
|
|
@ -83,7 +83,7 @@ public class ZatarCertificateProviderTest {
|
||||||
|
|
||||||
symlink = new File(tempFolder.getRoot(), "..data").getAbsolutePath();
|
symlink = new File(tempFolder.getRoot(), "..data").getAbsolutePath();
|
||||||
provider =
|
provider =
|
||||||
new ZatarCertificateProvider(
|
new DynamicReloadingCertificateProvider(
|
||||||
watcher,
|
watcher,
|
||||||
true,
|
true,
|
||||||
symlink,
|
symlink,
|
||||||
Loading…
Reference in New Issue