use of org.apache.knox.gateway.topology.Provider in project knox by apache.
the class DeploymentFactoryFuncTest method testWebXmlGeneration.
@Test(timeout = LONG_TIMEOUT)
public void testWebXmlGeneration() throws IOException, SAXException, ParserConfigurationException, URISyntaxException {
LOG_ENTER();
GatewayConfig config = new GatewayTestConfig();
File targetDir = new File(System.getProperty("user.dir"), "target");
File gatewayDir = new File(targetDir, "gateway-home-" + UUID.randomUUID());
gatewayDir.mkdirs();
((GatewayTestConfig) config).setGatewayHomeDir(gatewayDir.getAbsolutePath());
File deployDir = new File(config.getGatewayDeploymentDir());
deployDir.mkdirs();
DefaultGatewayServices srvcs = new DefaultGatewayServices();
Map<String, String> options = new HashMap<>();
options.put("persist-master", "false");
options.put("master", "password");
try {
DeploymentFactory.setGatewayServices(srvcs);
srvcs.init(config, options);
} catch (ServiceLifecycleException e) {
// I18N not required.
e.printStackTrace();
}
Topology topology = new Topology();
topology.setName("test-cluster");
Service service = new Service();
service.setRole("WEBHDFS");
service.addUrl("http://localhost:50070/webhdfs");
topology.addService(service);
Provider provider = new Provider();
provider.setRole("authentication");
provider.setName("ShiroProvider");
provider.setEnabled(true);
Param param = new Param();
param.setName("contextConfigLocation");
param.setValue("classpath:app-context-security.xml");
provider.addParam(param);
topology.addProvider(provider);
Provider asserter = new Provider();
asserter.setRole("identity-assertion");
asserter.setName("Default");
asserter.setEnabled(true);
topology.addProvider(asserter);
Provider authorizer = new Provider();
authorizer.setRole("authorization");
authorizer.setName("AclsAuthz");
authorizer.setEnabled(true);
topology.addProvider(authorizer);
Provider ha = new Provider();
ha.setRole("ha");
ha.setName("HaProvider");
ha.setEnabled(true);
topology.addProvider(ha);
for (int i = 0; i < 10; i++) {
createAndTestDeployment(config, topology);
}
LOG_EXIT();
}
use of org.apache.knox.gateway.topology.Provider in project knox by apache.
the class DeploymentFactoryFuncTest method testServiceAnonAuth.
/**
* Test the case where topology has federation provider configured
* and service uses anonymous authentication in which case we should
* add AnonymousFilter to the filter chain.
* @since 1.1.0
* @throws IOException
* @throws SAXException
* @throws ParserConfigurationException
* @throws URISyntaxException
* @throws TransformerException
*/
@Test(timeout = MEDIUM_TIMEOUT)
public void testServiceAnonAuth() throws IOException, SAXException, ParserConfigurationException, URISyntaxException, TransformerException {
LOG_ENTER();
final GatewayConfig config = new GatewayTestConfig();
((GatewayTestConfig) config).setXForwardedEnabled(false);
final File targetDir = new File(System.getProperty("user.dir"), "target");
final File gatewayDir = new File(targetDir, "gateway-home-" + UUID.randomUUID());
gatewayDir.mkdirs();
((GatewayTestConfig) config).setGatewayHomeDir(gatewayDir.getAbsolutePath());
final File deployDir = new File(config.getGatewayDeploymentDir());
deployDir.mkdirs();
final DefaultGatewayServices srvcs = new DefaultGatewayServices();
final Map<String, String> options = new HashMap<>();
options.put("persist-master", "false");
options.put("master", "password");
try {
DeploymentFactory.setGatewayServices(srvcs);
srvcs.init(config, options);
} catch (ServiceLifecycleException e) {
// I18N not required.
e.printStackTrace();
}
final Topology federationTopology = new Topology();
final Topology authenticationTopology = new Topology();
federationTopology.setName("test-cluster");
authenticationTopology.setName("test-cluster");
final Service service = new Service();
service.setRole("RANGER");
service.addUrl("http://localhost:50070/");
federationTopology.addService(service);
authenticationTopology.addService(service);
/* Add federation provider to first topology */
final Provider provider = new Provider();
provider.setRole("federation");
provider.setName("SSOCookieProvider");
provider.setEnabled(true);
Param param = new Param();
param.setName("sso.authentication.provider.url");
param.setValue("https://www.local.com:8443/gateway/knoxsso/api/v1/websso");
provider.addParam(param);
federationTopology.addProvider(provider);
/* Add authentication provider to second topology */
final Provider provider2 = new Provider();
provider2.setRole("authentication");
provider2.setName("ShiroProvider");
provider2.setEnabled(true);
Param param2 = new Param();
param2.setName("contextConfigLocation");
param2.setValue("classpath:app-context-security.xml");
provider2.addParam(param2);
authenticationTopology.addProvider(provider2);
final Provider asserter = new Provider();
asserter.setRole("identity-assertion");
asserter.setName("Default");
asserter.setEnabled(true);
federationTopology.addProvider(asserter);
Provider authorizer = new Provider();
authorizer.setRole("authorization");
authorizer.setName("AclsAuthz");
authorizer.setEnabled(true);
federationTopology.addProvider(authorizer);
authenticationTopology.addProvider(authorizer);
final EnterpriseArchive war = DeploymentFactory.createDeployment(config, federationTopology);
final EnterpriseArchive war2 = DeploymentFactory.createDeployment(config, federationTopology);
final Document web = XmlUtils.readXml(war.get("%2F/WEB-INF/web.xml").getAsset().openStream());
final Document web2 = XmlUtils.readXml(war2.get("%2F/WEB-INF/web.xml").getAsset().openStream());
/* Make sure AnonymousAuthFilter is added to the chain */
final Document gateway = XmlUtils.readXml(war.get("%2F/WEB-INF/gateway.xml").getAsset().openStream());
assertThat(gateway, hasXPath("/gateway/resource[1]/pattern", equalTo("/ranger/service/public/**")));
assertThat(gateway, hasXPath("/gateway/resource[1]/filter[1]/role", equalTo("authentication")));
assertThat(gateway, hasXPath("/gateway/resource[1]/filter[1]/class", equalTo("org.apache.knox.gateway.filter.AnonymousAuthFilter")));
assertThat(gateway, hasXPath("/gateway/resource[1]/filter[2]/role", equalTo("rewrite")));
assertThat(gateway, hasXPath("/gateway/resource[1]/filter[2]/class", equalTo("org.apache.knox.gateway.filter.rewrite.api.UrlRewriteServletFilter")));
assertThat(gateway, hasXPath("/gateway/resource[1]/filter[3]/role", equalTo("authorization")));
assertThat(gateway, hasXPath("/gateway/resource[1]/filter[3]/class", equalTo("org.apache.knox.gateway.filter.AclsAuthorizationFilter")));
assertThat(gateway, hasXPath("/gateway/resource[1]/filter[4]/role", equalTo("dispatch")));
assertThat(gateway, hasXPath("/gateway/resource[1]/filter[4]/class", equalTo("org.apache.knox.gateway.dispatch.GatewayDispatchFilter")));
final Document gateway2 = XmlUtils.readXml(war.get("%2F/WEB-INF/gateway.xml").getAsset().openStream());
assertThat(gateway2, hasXPath("/gateway/resource[1]/pattern", equalTo("/ranger/service/public/**")));
assertThat(gateway2, hasXPath("/gateway/resource[1]/filter[1]/role", equalTo("authentication")));
assertThat(gateway2, hasXPath("/gateway/resource[1]/filter[1]/class", equalTo("org.apache.knox.gateway.filter.AnonymousAuthFilter")));
assertThat(gateway2, hasXPath("/gateway/resource[1]/filter[2]/role", equalTo("rewrite")));
assertThat(gateway2, hasXPath("/gateway/resource[1]/filter[2]/class", equalTo("org.apache.knox.gateway.filter.rewrite.api.UrlRewriteServletFilter")));
assertThat(gateway2, hasXPath("/gateway/resource[1]/filter[3]/role", equalTo("authorization")));
assertThat(gateway2, hasXPath("/gateway/resource[1]/filter[3]/class", equalTo("org.apache.knox.gateway.filter.AclsAuthorizationFilter")));
assertThat(gateway2, hasXPath("/gateway/resource[1]/filter[4]/role", equalTo("dispatch")));
assertThat(gateway2, hasXPath("/gateway/resource[1]/filter[4]/class", equalTo("org.apache.knox.gateway.dispatch.GatewayDispatchFilter")));
LOG_EXIT();
}
use of org.apache.knox.gateway.topology.Provider in project knox by apache.
the class HostmapDeploymentContributorTest method testDeployment.
@Test
public void testDeployment() throws IOException {
WebArchive webArchive = ShrinkWrap.create(WebArchive.class, "test-acrhive");
UrlRewriteRulesDescriptorImpl rewriteRules = new UrlRewriteRulesDescriptorImpl();
Map<String, String> providerParams = new HashMap<>();
providerParams.put("test-host-external", "test-host-internal");
Provider provider = new Provider();
provider.setEnabled(true);
provider.setName("hostmap");
provider.setParams(providerParams);
DeploymentContext context = EasyMock.createNiceMock(DeploymentContext.class);
EasyMock.expect(context.getDescriptor("rewrite")).andReturn(rewriteRules).anyTimes();
EasyMock.expect(context.getWebArchive()).andReturn(webArchive).anyTimes();
EasyMock.replay(context);
HostmapDeploymentContributor contributor = new HostmapDeploymentContributor();
assertThat(contributor.getRole(), is("hostmap"));
assertThat(contributor.getName(), is("static"));
// Just make sure it doesn't blow up.
contributor.contributeFilter(null, null, null, null, null);
// Just make sure it doesn't blow up.
contributor.initializeContribution(context);
contributor.contributeProvider(context, provider);
HostmapFunctionDescriptor funcDesc = rewriteRules.getFunction("hostmap");
assertThat(funcDesc.config(), is("/WEB-INF/hostmap.txt"));
Node node = webArchive.get("/WEB-INF/hostmap.txt");
String asset = IOUtils.toString(node.getAsset().openStream());
assertThat(asset, containsString("test-host-external=test-host-internal"));
// Just make sure it doesn't blow up.
contributor.finalizeContribution(context);
}
use of org.apache.knox.gateway.topology.Provider in project knox by apache.
the class ServiceDeploymentContributorBase method getProviderByRole.
protected Provider getProviderByRole(DeploymentContext context, String role) {
Provider p = null;
Collection<Provider> providers = context.getTopology().getProviders();
for (Provider provider : providers) {
if (role.equals(provider.getRole())) {
p = provider;
break;
}
}
return p;
}
use of org.apache.knox.gateway.topology.Provider in project knox by apache.
the class TopologyRulesModuleTest method testParseServiceParamsInAmbariFormat.
@Test
public void testParseServiceParamsInAmbariFormat() throws IOException, SAXException {
Digester digester = loader.newDigester();
String name = "org/apache/knox/gateway/topology/xml/service-param-topology-ambari-format.conf";
URL url = ClassLoader.getSystemResource(name);
assertThat("Failed to find URL for resource " + name, url, notNullValue());
File file = new File(url.getFile());
TopologyBuilder topologyBuilder = digester.parse(url);
Topology topology = topologyBuilder.build();
assertThat("Failed to parse resource " + name, topology, notNullValue());
topology.setTimestamp(file.lastModified());
assertThat(topology.getName(), is("test-topology-name"));
assertThat(topology.getTimestamp(), is(file.lastModified()));
assertThat(topology.getProviders().size(), is(1));
Provider provider = topology.getProviders().iterator().next();
assertThat(provider, notNullValue());
assertThat(provider.getRole(), is("test-provider-role"));
assertThat(provider.getName(), is("test-provider-name"));
assertThat(provider.isEnabled(), is(true));
assertThat(provider.getParams(), hasEntry(is("test-provider-param-name-1"), is("test-provider-param-value-1")));
assertThat(provider.getParams(), hasEntry(is("test-provider-param-name-2"), is("test-provider-param-value-2")));
assertThat(topology.getServices().size(), is(1));
Service service = topology.getServices().iterator().next();
assertThat(service, notNullValue());
assertThat(service.getRole(), is("test-service-role"));
assertThat(service.getUrls().size(), is(2));
assertThat(service.getUrls(), hasItem("test-service-scheme://test-service-host1:42/test-service-path"));
assertThat(service.getUrls(), hasItem("test-service-scheme://test-service-host2:42/test-service-path"));
assertThat(service.getName(), is("test-service-name"));
assertThat(service.getParams(), hasEntry(is("test-service-param-name-1"), is("test-service-param-value-1")));
assertThat(service.getParams(), hasEntry(is("test-service-param-name-2"), is("test-service-param-value-2")));
}
Aggregations