Search in sources :

Example 6 with DefaultTopologyService

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);
    }
}
Also used : FileAlterationMonitor(org.apache.commons.io.monitor.FileAlterationMonitor) DefaultTopologyService(org.apache.knox.gateway.services.topology.impl.DefaultTopologyService) HashMap(java.util.HashMap) Topology(org.apache.knox.gateway.topology.Topology) DefaultTopologyService(org.apache.knox.gateway.services.topology.impl.DefaultTopologyService) File(java.io.File) GatewayConfig(org.apache.knox.gateway.config.GatewayConfig) Test(org.junit.Test)

Example 7 with DefaultTopologyService

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();
}
Also used : DefaultAliasService(org.apache.knox.gateway.services.security.impl.DefaultAliasService) DefaultTopologyService(org.apache.knox.gateway.services.topology.impl.DefaultTopologyService)

Example 8 with DefaultTopologyService

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();
}
Also used : DefaultAliasService(org.apache.knox.gateway.services.security.impl.DefaultAliasService) DefaultTopologyService(org.apache.knox.gateway.services.topology.impl.DefaultTopologyService)

Example 9 with DefaultTopologyService

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);
}
Also used : DefaultHostMapperService(org.apache.knox.gateway.services.hostmap.impl.DefaultHostMapperService) DefaultClusterConfigurationMonitorService(org.apache.knox.gateway.services.topology.impl.DefaultClusterConfigurationMonitorService) DefaultAliasService(org.apache.knox.gateway.services.security.impl.DefaultAliasService) DefaultTopologyService(org.apache.knox.gateway.services.topology.impl.DefaultTopologyService) DefaultMetricsService(org.apache.knox.gateway.services.metrics.impl.DefaultMetricsService) RemoteConfigurationRegistryClientService(org.apache.knox.gateway.services.config.client.RemoteConfigurationRegistryClientService) DefaultServiceDefinitionRegistry(org.apache.knox.gateway.services.registry.impl.DefaultServiceDefinitionRegistry) DefaultKeystoreService(org.apache.knox.gateway.services.security.impl.DefaultKeystoreService) DefaultServiceRegistryService(org.apache.knox.gateway.services.registry.impl.DefaultServiceRegistryService) DefaultMasterService(org.apache.knox.gateway.services.security.impl.DefaultMasterService) DefaultCryptoService(org.apache.knox.gateway.services.security.impl.DefaultCryptoService) DefaultTokenAuthorityService(org.apache.knox.gateway.services.token.impl.DefaultTokenAuthorityService) JettySSLService(org.apache.knox.gateway.services.security.impl.JettySSLService)

Example 10 with DefaultTopologyService

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();
}
Also used : DefaultAliasService(org.apache.knox.gateway.services.security.impl.DefaultAliasService) DefaultTopologyService(org.apache.knox.gateway.services.topology.impl.DefaultTopologyService) DefaultMetricsService(org.apache.knox.gateway.services.metrics.impl.DefaultMetricsService) JettySSLService(org.apache.knox.gateway.services.security.impl.JettySSLService) SSLService(org.apache.knox.gateway.services.security.SSLService)

Aggregations

DefaultTopologyService (org.apache.knox.gateway.services.topology.impl.DefaultTopologyService)10 DefaultAliasService (org.apache.knox.gateway.services.security.impl.DefaultAliasService)6 File (java.io.File)4 HashMap (java.util.HashMap)4 FileAlterationMonitor (org.apache.commons.io.monitor.FileAlterationMonitor)4 GatewayConfig (org.apache.knox.gateway.config.GatewayConfig)4 Test (org.junit.Test)4 RemoteConfigurationRegistryClientService (org.apache.knox.gateway.services.config.client.RemoteConfigurationRegistryClientService)3 DefaultMetricsService (org.apache.knox.gateway.services.metrics.impl.DefaultMetricsService)3 JettySSLService (org.apache.knox.gateway.services.security.impl.JettySSLService)3 Topology (org.apache.knox.gateway.topology.Topology)3 SSLService (org.apache.knox.gateway.services.security.SSLService)2 DefaultCryptoService (org.apache.knox.gateway.services.security.impl.DefaultCryptoService)2 DefaultKeystoreService (org.apache.knox.gateway.services.security.impl.DefaultKeystoreService)2 HashSet (java.util.HashSet)1 DefaultHostMapperService (org.apache.knox.gateway.services.hostmap.impl.DefaultHostMapperService)1 DefaultServiceDefinitionRegistry (org.apache.knox.gateway.services.registry.impl.DefaultServiceDefinitionRegistry)1 DefaultServiceRegistryService (org.apache.knox.gateway.services.registry.impl.DefaultServiceRegistryService)1 AliasService (org.apache.knox.gateway.services.security.AliasService)1 CLIMasterService (org.apache.knox.gateway.services.security.impl.CLIMasterService)1