use of org.apache.knox.gateway.services.topology.impl.DefaultTopologyService in project knox by apache.
the class DefaultTopologyServiceTest method testTopologiesUpdateFromProviderConfigChange.
/**
* KNOX-1014
*
* Test the lifecycle relationship between provider configuration files, simple descriptors, and topology files.
*
* N.B. This test depends on the DummyServiceDiscovery extension being configured:
* org.apache.knox.gateway.topology.discovery.test.extension.DummyServiceDiscovery
*/
@Test
public void testTopologiesUpdateFromProviderConfigChange() throws Exception {
File dir = createDir();
File topologyDir = new File(dir, "topologies");
topologyDir.mkdirs();
File descriptorsDir = new File(dir, "descriptors");
descriptorsDir.mkdirs();
File sharedProvidersDir = new File(dir, "shared-providers");
sharedProvidersDir.mkdirs();
try {
TestTopologyListener topoListener = new TestTopologyListener();
FileAlterationMonitor monitor = new FileAlterationMonitor(Long.MAX_VALUE);
TopologyService ts = new DefaultTopologyService();
Map<String, String> c = new HashMap<>();
GatewayConfig config = EasyMock.createNiceMock(GatewayConfig.class);
EasyMock.expect(config.getGatewayTopologyDir()).andReturn(topologyDir.getAbsolutePath()).anyTimes();
EasyMock.expect(config.getGatewayConfDir()).andReturn(descriptorsDir.getParentFile().getAbsolutePath()).anyTimes();
EasyMock.replay(config);
ts.init(config, c);
ts.addTopologyChangeListener(topoListener);
ts.reloadTopologies();
java.lang.reflect.Field dmField = ts.getClass().getDeclaredField("descriptorsMonitor");
dmField.setAccessible(true);
DefaultTopologyService.DescriptorsMonitor dm = (DefaultTopologyService.DescriptorsMonitor) dmField.get(ts);
// Write out the referenced provider configs first
createFile(sharedProvidersDir, "provider-config-one.xml", "org/apache/knox/gateway/topology/file/provider-config-one.xml", System.currentTimeMillis());
// Create the simple descriptor, which depends on provider-config-one.xml
File simpleDesc = createFile(descriptorsDir, "six.json", "org/apache/knox/gateway/topology/file/simple-descriptor-six.json", System.currentTimeMillis());
// "Notice" the simple descriptor change, and generate a topology based on it
dm.onFileChange(simpleDesc);
// Load the generated topology
ts.reloadTopologies();
Collection<Topology> topologies = ts.getTopologies();
assertThat(topologies.size(), is(1));
Iterator<Topology> iterator = topologies.iterator();
Topology topology = iterator.next();
assertFalse("The Shiro provider is disabled in provider-config-one.xml", topology.getProvider("authentication", "ShiroProvider").isEnabled());
// Overwrite the referenced provider configuration with a different ShiroProvider config, and check that the
// changes are propagated to the associated topology
File providerConfig = createFile(sharedProvidersDir, "provider-config-one.xml", "org/apache/knox/gateway/topology/file/ambari-cluster-policy.xml", System.currentTimeMillis());
// "Notice" the simple descriptor change as a result of the referenced config change
dm.onFileChange(simpleDesc);
// Load the generated topology
ts.reloadTopologies();
topologies = ts.getTopologies();
assertFalse(topologies.isEmpty());
topology = topologies.iterator().next();
assertTrue("The Shiro provider is enabled in ambari-cluster-policy.xml", topology.getProvider("authentication", "ShiroProvider").isEnabled());
// Delete the provider configuration, and make sure that the associated topology file is unaffected.
// The topology file should not be affected because the simple descriptor handling will fail to resolve the
// referenced provider configuration.
// Delete the file
providerConfig.delete();
// The provider config deletion will trigger a descriptor change notification
dm.onFileChange(simpleDesc);
ts.reloadTopologies();
topologies = ts.getTopologies();
assertFalse(topologies.isEmpty());
assertTrue("The Shiro provider is enabled in ambari-cluster-policy.xml", topology.getProvider("authentication", "ShiroProvider").isEnabled());
} finally {
FileUtils.deleteQuietly(dir);
}
}
use of org.apache.knox.gateway.services.topology.impl.DefaultTopologyService in project knox by apache.
the class CLIGatewayServices method stop.
public void stop() throws ServiceLifecycleException {
ms.stop();
ks.stop();
DefaultAliasService alias = (DefaultAliasService) services.get(ALIAS_SERVICE);
alias.stop();
DefaultTopologyService tops = (DefaultTopologyService) services.get(TOPOLOGY_SERVICE);
tops.stop();
}
use of org.apache.knox.gateway.services.topology.impl.DefaultTopologyService in project knox by apache.
the class CLIGatewayServices method start.
public void start() throws ServiceLifecycleException {
ms.start();
ks.start();
DefaultAliasService alias = (DefaultAliasService) services.get(ALIAS_SERVICE);
alias.start();
DefaultTopologyService tops = (DefaultTopologyService) services.get(TOPOLOGY_SERVICE);
tops.start();
(services.get(REMOTE_REGISTRY_CLIENT_SERVICE)).start();
}
use of org.apache.knox.gateway.services.topology.impl.DefaultTopologyService in project knox by apache.
the class DefaultGatewayServices method init.
public void init(GatewayConfig config, Map<String, String> options) throws ServiceLifecycleException {
ms = new DefaultMasterService();
ms.init(config, options);
services.put("MasterService", ms);
ks = new DefaultKeystoreService();
ks.setMasterService(ms);
ks.init(config, options);
services.put(KEYSTORE_SERVICE, ks);
DefaultAliasService alias = new DefaultAliasService();
alias.setKeystoreService(ks);
alias.setMasterService(ms);
alias.init(config, options);
services.put(ALIAS_SERVICE, alias);
DefaultCryptoService crypto = new DefaultCryptoService();
crypto.setKeystoreService(ks);
crypto.setAliasService(alias);
crypto.init(config, options);
services.put(CRYPTO_SERVICE, crypto);
DefaultTokenAuthorityService ts = new DefaultTokenAuthorityService();
ts.setAliasService(alias);
ts.setKeystoreService(ks);
ts.init(config, options);
// prolly should not allow the token service to be looked up?
services.put(TOKEN_SERVICE, ts);
JettySSLService ssl = new JettySSLService();
ssl.setAliasService(alias);
ssl.setKeystoreService(ks);
ssl.setMasterService(ms);
ssl.init(config, options);
services.put(SSL_SERVICE, ssl);
DefaultServiceRegistryService sr = new DefaultServiceRegistryService();
sr.setCryptoService(crypto);
sr.init(config, options);
services.put(SERVICE_REGISTRY_SERVICE, sr);
DefaultHostMapperService hm = new DefaultHostMapperService();
hm.init(config, options);
services.put(HOST_MAPPING_SERVICE, hm);
DefaultServerInfoService sis = new DefaultServerInfoService();
sis.init(config, options);
services.put(SERVER_INFO_SERVICE, sis);
RemoteConfigurationRegistryClientService registryClientService = RemoteConfigurationRegistryClientServiceFactory.newInstance(config);
registryClientService.setAliasService(alias);
registryClientService.init(config, options);
services.put(REMOTE_REGISTRY_CLIENT_SERVICE, registryClientService);
DefaultClusterConfigurationMonitorService ccs = new DefaultClusterConfigurationMonitorService();
ccs.setAliasService(alias);
ccs.init(config, options);
services.put(CLUSTER_CONFIGURATION_MONITOR_SERVICE, ccs);
DefaultTopologyService tops = new DefaultTopologyService();
tops.setAliasService(alias);
tops.init(config, options);
services.put(TOPOLOGY_SERVICE, tops);
DefaultServiceDefinitionRegistry sdr = new DefaultServiceDefinitionRegistry();
sdr.init(config, options);
services.put(SERVICE_DEFINITION_REGISTRY, sdr);
DefaultMetricsService metricsService = new DefaultMetricsService();
metricsService.init(config, options);
services.put(METRICS_SERVICE, metricsService);
}
use of org.apache.knox.gateway.services.topology.impl.DefaultTopologyService in project knox by apache.
the class DefaultGatewayServices method stop.
public void stop() throws ServiceLifecycleException {
ms.stop();
ks.stop();
(services.get(CLUSTER_CONFIGURATION_MONITOR_SERVICE)).stop();
DefaultAliasService alias = (DefaultAliasService) services.get(ALIAS_SERVICE);
alias.stop();
SSLService ssl = (SSLService) services.get(SSL_SERVICE);
ssl.stop();
ServerInfoService sis = (ServerInfoService) services.get(SERVER_INFO_SERVICE);
sis.stop();
DefaultTopologyService tops = (DefaultTopologyService) services.get(TOPOLOGY_SERVICE);
tops.stop();
DefaultMetricsService metricsService = (DefaultMetricsService) services.get(METRICS_SERVICE);
metricsService.stop();
}
Aggregations