xds: Rename to dynamic reloading cert provider. (#7547)

Co-authored-by: matthewstevenson88 <mattstev@google.com>
This commit is contained in:
sanjaypujare 2020-10-22 12:57:43 -07:00 committed by GitHub
parent 45b8b0eb60
commit 26a4ca38ec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 50 additions and 43 deletions

View File

@ -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,

View File

@ -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());
} }

View File

@ -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\","

View File

@ -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,