blob: 363b12aa9187dc532de671cc6ace6e6d7c1b0216 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.knox.gateway.service.config.remote.config;
import org.apache.knox.gateway.config.GatewayConfig;
import org.easymock.EasyMock;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
public class DefaultRemoteConfigurationRegistriesTest {
/*
* Test a single registry configuration with digest auth configuration.
*/
@Test
public void testPropertiesRemoteConfigurationRegistriesSingleDigest() {
Map<String, Properties> testProperties = new HashMap<>();
Properties p = new Properties();
p.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_TYPE, "ZooKeeper");
p.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_ADDRESS, "hostx:2181");
p.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_PRINCIPAL, "zkDigestUser");
p.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_AUTH_TYPE, "digest");
p.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_CREDENTIAL_ALIAS, "zkDigestAlias");
testProperties.put("testDigest", p);
doTestPropertiesRemoteConfigurationRegistries(testProperties);
}
/*
* Test a single registry configuration with kerberos auth configuration.
*/
@Test
public void testPropertiesRemoteConfigurationRegistriesSingleKerberos() {
Map<String, Properties> testProperties = new HashMap<>();
Properties p = new Properties();
p.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_TYPE, "ZooKeeper");
p.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_ADDRESS, "hostx:2181");
p.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_PRINCIPAL, "zkUser");
p.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_AUTH_TYPE, "kerberos");
p.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_KEYTAB, "/home/user/remoteregistry.keytab");
p.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_USE_KEYTAB, "true");
p.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_USE_TICKET_CACHE, "false");
testProperties.put("testKerb", p);
doTestPropertiesRemoteConfigurationRegistries(testProperties);
}
/*
* Test multiple registry configuration with varying auth configurations.
*/
@Test
public void testPropertiesRemoteConfigurationRegistriesMultipleMixed() {
Map<String, Properties> testProperties = new HashMap<>();
Properties kerb = new Properties();
kerb.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_TYPE, "ZooKeeper");
kerb.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_ADDRESS, "host1:2181");
kerb.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_NAMESPACE, "/knox/config");
kerb.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_PRINCIPAL, "kerbPrincipal");
kerb.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_AUTH_TYPE, "kerberos");
kerb.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_KEYTAB, "/home/user/mykrb.keytab");
kerb.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_USE_KEYTAB, "true");
kerb.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_USE_TICKET_CACHE, "false");
testProperties.put("testKerb1", kerb);
Properties digest = new Properties();
digest.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_TYPE, "ZooKeeper");
digest.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_ADDRESS, "host2:2181");
digest.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_PRINCIPAL, "digestPrincipal");
digest.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_AUTH_TYPE, "digest");
digest.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_CREDENTIAL_ALIAS, "digestPwdAlias");
testProperties.put("testDigest1", digest);
Properties unsecured = new Properties();
unsecured.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_TYPE, "ZooKeeper");
unsecured.setProperty(GatewayConfig.REMOTE_CONFIG_REGISTRY_ADDRESS, "host2:2181");
testProperties.put("testUnsecured", unsecured);
doTestPropertiesRemoteConfigurationRegistries(testProperties);
}
/**
* Perform the actual test.
*
* @param testProperties The test properties
*/
private void doTestPropertiesRemoteConfigurationRegistries(Map<String, Properties> testProperties) {
// Mock gateway config
GatewayConfig gc = mockGatewayConfig(testProperties);
// Create the RemoteConfigurationRegistries object to be tested from the GatewayConfig
RemoteConfigurationRegistries registries = new DefaultRemoteConfigurationRegistries(gc);
// Basic validation
assertNotNull(registries);
List<RemoteConfigurationRegistry> registryConfigs = registries.getRegistryConfigurations();
assertNotNull(registryConfigs);
assertEquals(testProperties.size(), registryConfigs.size());
// Validate the contents of the created object
for (RemoteConfigurationRegistry regConfig : registryConfigs) {
validateRemoteRegistryConfig(regConfig.getName(), testProperties.get(regConfig.getName()), regConfig);
}
}
/**
* Create a mock GatewayConfig based on the specified test properties.
*
* @param testProperties The test properties to set on the config
*/
private GatewayConfig mockGatewayConfig(Map<String, Properties> testProperties) {
// Mock gateway config
GatewayConfig gc = EasyMock.createNiceMock(GatewayConfig.class);
List<String> configNames = new ArrayList<>();
for (String registryName : testProperties.keySet()) {
configNames.add(registryName);
StringBuilder propertyValueString = new StringBuilder();
Properties props = testProperties.get(registryName);
Enumeration names = props.propertyNames();
while (names.hasMoreElements()) {
String propertyName = (String) names.nextElement();
propertyValueString.append(propertyName).append("=").append(props.get(propertyName));
if (names.hasMoreElements()) {
propertyValueString.append(";");
}
}
EasyMock.expect(gc.getRemoteRegistryConfiguration(registryName))
.andReturn(propertyValueString.toString())
.anyTimes();
}
EasyMock.expect(gc.getRemoteRegistryConfigurationNames()).andReturn(configNames).anyTimes();
EasyMock.replay(gc);
return gc;
}
/**
* Validate the specified RemoteConfigurationRegistry based on the expected test properties.
*
* @param configName config name to validate
* @param expected expected properties
* @param registryConfig registryConfig to validate
*/
private void validateRemoteRegistryConfig(String configName,
Properties expected,
RemoteConfigurationRegistry registryConfig) {
assertEquals(configName, registryConfig.getName());
assertEquals(expected.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_TYPE), registryConfig.getRegistryType());
assertEquals(expected.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_ADDRESS), registryConfig.getConnectionString());
assertEquals(expected.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_NAMESPACE), registryConfig.getNamespace());
assertEquals(registryConfig.isSecureRegistry(), expected.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_AUTH_TYPE) != null);
assertEquals(expected.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_AUTH_TYPE), registryConfig.getAuthType());
assertEquals(expected.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_PRINCIPAL), registryConfig.getPrincipal());
assertEquals(expected.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_CREDENTIAL_ALIAS), registryConfig.getCredentialAlias());
assertEquals(expected.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_KEYTAB), registryConfig.getKeytab());
assertEquals(Boolean.valueOf((String)expected.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_USE_KEYTAB)), registryConfig.isUseKeyTab());
assertEquals(Boolean.valueOf((String)expected.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_USE_TICKET_CACHE)), registryConfig.isUseTicketCache());
}
}