/*
* Copyright (c) 2008-2017, Hazelcast, Inc. All Rights Reserved.
*
* Licensed 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
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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 com.hazelcast.client.config;
import com.hazelcast.config.InvalidConfigurationException;
import com.hazelcast.test.HazelcastParallelClassRunner;
import com.hazelcast.test.annotation.ParallelTest;
import com.hazelcast.test.annotation.QuickTest;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import java.io.ByteArrayInputStream;
import java.util.Properties;
@RunWith(HazelcastParallelClassRunner.class)
@Category({QuickTest.class, ParallelTest.class})
public class InvalidConfigurationClientTest {
@Test
public void testWhenXmlValid() {
String xml = getDraftXml();
buildConfig(xml);
}
@Test
public void testWhenValid_SmartRoutingEnabled() {
buildConfig("smart-routing-enabled", "false");
}
@Test(expected = InvalidConfigurationException.class)
public void testWhenInValid_SmartRoutingEnabled() {
buildConfig("smart-routing-enabled", "false1");
}
@Test
public void testWhenValid_RedoOperationEnabled() {
buildConfig("redo-operation-enabled", "true");
}
@Test(expected = InvalidConfigurationException.class)
public void testWhenInValid_RedoOperationEnabled() {
buildConfig("redo-operation-enabled", "tr1ue");
}
@Test
public void testWhenValid_SocketInterceptorEnabled() {
buildConfig("socket-interceptor-enabled", "true");
}
@Test(expected = InvalidConfigurationException.class)
public void testWhenInvalid_SocketInterceptorEnabled() {
buildConfig("socket-interceptor-enabled", "ttrue");
}
@Test
public void testWhenValid_AwsEnabled() {
buildConfig("aws-enabled", "true");
}
@Test(expected = InvalidConfigurationException.class)
public void testWhenInvalid_AwsEnabled() {
buildConfig("aws-enabled", "falsee");
}
@Test
public void testWhenValid_InsideAwsEnabled() {
buildConfig("inside-aws-enabled", "true");
}
@Test(expected = InvalidConfigurationException.class)
public void testWhenIamRoleEnabled_InsideAwsDisabled() {
buildConfig("inside-aws-enabled", "false");
}
@Test(expected = InvalidConfigurationException.class)
public void testWhenInvalid_InsideAwsEnabled() {
buildConfig("inside-aws-enabled", "tRue");
}
@Test
public void WhenValid_ExecutorPoolSize() {
buildConfig("executor-pool-size", "17");
}
@Test(expected = InvalidConfigurationException.class)
public void WhenInvalid_ExecutorPoolSize() {
buildConfig("executor-pool-size", "0");
}
@Test
public void WhenValid_CredentialsClassName() {
buildConfig("credentials-class-name", "com.hazelcast.client.config.Credentials");
}
@Test(expected = InvalidConfigurationException.class)
public void WhenInvalid_CredentialsClassName() {
buildConfig("credentials-class-name", " com.hazelcast.client.config.Credentials");
}
@Test
public void WhenValid_ListenerClassName() {
buildConfig("listener-class-name", "com.hazelcast.client.config.Listener");
}
@Test(expected = InvalidConfigurationException.class)
public void WhenInvalid_ListenerClassName() {
buildConfig("listener-class-name", " com.hazelcast.client.config.Listener");
}
@Test
public void WhenValid_NativeByteOrder() {
buildConfig("use-native-byte-order", "true");
}
@Test(expected = InvalidConfigurationException.class)
public void WhenInValid_NativeByteOrder() {
buildConfig("use-native-byte-order", "truue");
}
@Test
public void WhenValid_LoadBalancerType() {
buildConfig("load-balancer-type", "round-robin");
}
@Test(expected = InvalidConfigurationException.class)
public void WhenInvalid_LoadBalancerType() {
buildConfig("load-balancer-type", "roundrobin");
}
@Test
public void WhenValid_EvictionPolicy() {
buildConfig("eviction-policy", "LRU");
}
@Test(expected = InvalidConfigurationException.class)
public void WhenInvalid_EvictionPolicy() {
buildConfig("eviction-policy", "none");
}
@Test
public void WhenValid_NearCacheInMemoryFormat() {
buildConfig("near-cache-in-memory-format", "OBJECT");
}
@Test(expected = InvalidConfigurationException.class)
public void WhenInvalid_NearCacheInMemoryFormat() {
buildConfig("near-cache-in-memory-format", "binaryyy");
}
@Test(expected = InvalidConfigurationException.class)
public void testWhenInvalid_NearCacheTTLSeconds() {
buildConfig("near-cache-time-to-live-seconds", "-1");
}
@Test
public void testWhenValid_NearCacheTTLSeconds() {
buildConfig("near-cache-time-to-live-seconds", "100");
}
@Test(expected = InvalidConfigurationException.class)
public void testWhenInvalid_NearCacheMaxIdleSeconds() {
buildConfig("near-cache-max-idle-seconds", "-1");
}
@Test
public void testWhenValid_NearCacheMaxIdleSeconds() {
buildConfig("near-cache-max-idle-seconds", "100");
}
@Test(expected = InvalidConfigurationException.class)
public void testWhenInvalid_NearCacheEvictionSize() {
buildConfig("near-cache-eviction-size", "-100");
}
@Test
public void testWhenValid_NearCacheEvictionSize() {
buildConfig("near-cache-eviction-size", "100");
}
@Test(expected = InvalidConfigurationException.class)
public void WhenDuplicateTagsAdded() {
String xml = "<hazelcast-client xmlns=\"http://www.hazelcast.com/schema/client-config\">\n"
+ " <network>\n"
+ " <cluster-members>\n"
+ " <address>127.0.0.1</address>\n"
+ " </cluster-members>\n"
+ " </network>\n"
+ " <network>\n"
+ " <cluster-members>\n"
+ " <address>127.0.0.1</address>\n"
+ " </cluster-members>\n"
+ " </network>\n"
+ "</hazelcast-client>\n";
buildConfig(xml);
}
String getDraftXml() {
return "<hazelcast-client xmlns=\"http://www.hazelcast.com/schema/client-config\">\n"
+ " <network>\n"
+ " <cluster-members>\n"
+ " <address>127.0.0.1</address>\n"
+ " </cluster-members>\n"
+ " <smart-routing>${smart-routing-enabled}</smart-routing>\n"
+ " <redo-operation>${redo-operation-enabled}</redo-operation>\n"
+ " <socket-interceptor enabled=\"${socket-interceptor-enabled}\">\n"
+ " <class-name>com.hazelcast.examples.MySocketInterceptor</class-name>\n"
+ " </socket-interceptor>\n"
+ " <aws enabled=\"${aws-enabled}\" connection-timeout-seconds=\"${aws-timeout}\">\n"
+ " <inside-aws>${inside-aws-enabled}</inside-aws>\n"
+ " <access-key>TEST_ACCESS_KEY</access-key>\n"
+ " <secret-key>TEST_SECRET_KEY</secret-key>\n"
+ " <iam-role>TEST_IAM_ROLE</iam-role>\n"
+ " </aws>\n"
+ " </network>\n"
+ " <executor-pool-size>${executor-pool-size}</executor-pool-size>\n"
+ " <security>\n"
+ " <credentials>${credentials-class-name}</credentials>\n"
+ " </security>\n"
+ " <listeners>\n"
+ " <listener>${listener-class-name}</listener>\n"
+ " </listeners>\n"
+ " <serialization>\n"
+ " <portable-version>3</portable-version>\n"
+ " <use-native-byte-order>${use-native-byte-order}</use-native-byte-order>\n"
+ " <byte-order>${byte-order}</byte-order>\n"
+ " <enable-compression>${enable-compression}</enable-compression>\n"
+ " <enable-shared-object>${enable-shared-object}</enable-shared-object>\n"
+ " <allow-unsafe>${allow-unsafe}</allow-unsafe>\n"
+ " </serialization>\n"
+ " <load-balancer type=\"${load-balancer-type}\"/>\n"
+ " <near-cache name=\"testNearCache\">\n"
+ " <time-to-live-seconds>${near-cache-time-to-live-seconds}</time-to-live-seconds>\n"
+ " <max-idle-seconds>${near-cache-max-idle-seconds}</max-idle-seconds>\n"
+ " <invalidate-on-change>${near-cache-invalidate-on-change}</invalidate-on-change>\n"
+ " <in-memory-format>${near-cache-in-memory-format}</in-memory-format>\n"
+ " <cache-local-entries>${near-cache-cache-local-entries}</cache-local-entries>\n"
+ " <eviction-policy>${eviction-policy}</eviction-policy>\n"
+ " <eviction size=\"${near-cache-eviction-size}\""
+ " max-size-policy=\"${near-cache-eviction-max-size-policy}\""
+ " eviction-policy=\"${near-cache-eviction-policy}\"/>\n"
+ " </near-cache>"
+ "</hazelcast-client>\n";
}
Properties getDraftProperties() {
Properties properties = new Properties();
properties.setProperty("smart-routing-enabled", "true");
properties.setProperty("redo-operation-enabled", "true");
properties.setProperty("socket-interceptor-enabled", "true");
properties.setProperty("aws-enabled", "true");
properties.setProperty("aws-timeout", "10");
properties.setProperty("inside-aws-enabled", "true");
properties.setProperty("executor-pool-size", "40");
properties.setProperty("credentials-class-name", "com.hazelcast.security.UsernamePasswordCredentials");
properties.setProperty("listener-class-name", "com.hazelcast.examples.MembershipListener");
properties.setProperty("use-native-byte-order", "true");
properties.setProperty("byte-order", "BIG_ENDIAN");
properties.setProperty("enable-compression", "true");
properties.setProperty("enable-shared-object", "true");
properties.setProperty("allow-unsafe", "true");
properties.setProperty("load-balancer-type", "random");
properties.setProperty("eviction-policy", "LFU");
properties.setProperty("in-memory-format", "OBJECT");
properties.setProperty("near-cache-time-to-live-seconds", "10000");
properties.setProperty("near-cache-max-idle-seconds", "5000");
properties.setProperty("near-cache-invalidate-on-change", "true");
properties.setProperty("near-cache-in-memory-format", "BINARY");
properties.setProperty("near-cache-cache-local-entries", "true");
properties.setProperty("near-cache-eviction-size", "100");
properties.setProperty("near-cache-eviction-max-size-policy", "ENTRY_COUNT");
properties.setProperty("near-cache-eviction-policy", "LRU");
return properties;
}
ClientConfig buildConfig(String xml) {
return buildConfig(xml, getDraftProperties());
}
ClientConfig buildConfig(String propertyKey, String propertyValue) {
String xml = getDraftXml();
Properties properties = getDraftProperties();
properties.setProperty(propertyKey, propertyValue);
return buildConfig(xml, properties);
}
ClientConfig buildConfig(String xml, Properties properties) {
ByteArrayInputStream bis = new ByteArrayInputStream(xml.getBytes());
XmlClientConfigBuilder configBuilder = new XmlClientConfigBuilder(bis);
configBuilder.setProperties(properties);
return configBuilder.build();
}
}