/*
* ====================
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2008-2009 Sun Microsystems, Inc. All rights reserved.
*
* The contents of this file are subject to the terms of the Common Development
* and Distribution License("CDDL") (the "License"). You may not use this file
* except in compliance with the License.
*
* You can obtain a copy of the License at
* http://opensource.org/licenses/cddl1.php
* See the License for the specific language governing permissions and limitations
* under the License.
*
* When distributing the Covered Code, include this CDDL Header Notice in each file
* and include the License file at http://opensource.org/licenses/cddl1.php.
* If applicable, add the following below this CDDL Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
* ====================
* Portions Copyrighted 2010-2014 ForgeRock AS.
*/
package org.identityconnectors.framework.impl.serializer;
import org.testng.Assert;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import org.identityconnectors.common.CollectionUtil;
import org.identityconnectors.common.pooling.ObjectPoolConfiguration;
import org.identityconnectors.common.script.Script;
import org.identityconnectors.common.script.ScriptBuilder;
import org.identityconnectors.common.security.GuardedByteArray;
import org.identityconnectors.common.security.GuardedString;
import org.identityconnectors.framework.api.ConnectorKey;
import org.identityconnectors.framework.api.operations.APIOperation;
import org.identityconnectors.framework.api.operations.CreateApiOp;
import org.identityconnectors.framework.common.FrameworkUtil;
import org.identityconnectors.framework.common.exceptions.AlreadyExistsException;
import org.identityconnectors.framework.common.exceptions.ConfigurationException;
import org.identityconnectors.framework.common.exceptions.ConnectionBrokenException;
import org.identityconnectors.framework.common.exceptions.ConnectionFailedException;
import org.identityconnectors.framework.common.exceptions.ConnectorException;
import org.identityconnectors.framework.common.exceptions.ConnectorIOException;
import org.identityconnectors.framework.common.exceptions.ConnectorSecurityException;
import org.identityconnectors.framework.common.exceptions.InvalidCredentialException;
import org.identityconnectors.framework.common.exceptions.InvalidPasswordException;
import org.identityconnectors.framework.common.exceptions.OperationTimeoutException;
import org.identityconnectors.framework.common.exceptions.PasswordExpiredException;
import org.identityconnectors.framework.common.exceptions.PermissionDeniedException;
import org.identityconnectors.framework.common.exceptions.UnknownUidException;
import org.identityconnectors.framework.common.objects.Attribute;
import org.identityconnectors.framework.common.objects.AttributeBuilder;
import org.identityconnectors.framework.common.objects.AttributeInfo;
import org.identityconnectors.framework.common.objects.AttributeInfoBuilder;
import org.identityconnectors.framework.common.objects.AttributeUtil;
import org.identityconnectors.framework.common.objects.ConnectorObject;
import org.identityconnectors.framework.common.objects.ConnectorObjectBuilder;
import org.identityconnectors.framework.common.objects.Name;
import org.identityconnectors.framework.common.objects.ObjectClass;
import org.identityconnectors.framework.common.objects.ObjectClassInfo;
import org.identityconnectors.framework.common.objects.ObjectClassInfoBuilder;
import org.identityconnectors.framework.common.objects.OperationOptionInfo;
import org.identityconnectors.framework.common.objects.OperationOptions;
import org.identityconnectors.framework.common.objects.OperationOptionsBuilder;
import org.identityconnectors.framework.common.objects.QualifiedUid;
import org.identityconnectors.framework.common.objects.Schema;
import org.identityconnectors.framework.common.objects.ScriptContext;
import org.identityconnectors.framework.common.objects.ScriptContextBuilder;
import org.identityconnectors.framework.common.objects.SyncDelta;
import org.identityconnectors.framework.common.objects.SyncDeltaBuilder;
import org.identityconnectors.framework.common.objects.SyncDeltaType;
import org.identityconnectors.framework.common.objects.SyncToken;
import org.identityconnectors.framework.common.objects.Uid;
import org.identityconnectors.framework.common.objects.AttributeInfo.Flags;
import org.identityconnectors.framework.common.objects.filter.AndFilter;
import org.identityconnectors.framework.common.objects.filter.ContainsAllValuesFilter;
import org.identityconnectors.framework.common.objects.filter.ContainsFilter;
import org.identityconnectors.framework.common.objects.filter.EndsWithFilter;
import org.identityconnectors.framework.common.objects.filter.EqualsFilter;
import org.identityconnectors.framework.common.objects.filter.GreaterThanFilter;
import org.identityconnectors.framework.common.objects.filter.GreaterThanOrEqualFilter;
import org.identityconnectors.framework.common.objects.filter.LessThanFilter;
import org.identityconnectors.framework.common.objects.filter.LessThanOrEqualFilter;
import org.identityconnectors.framework.common.objects.filter.NotFilter;
import org.identityconnectors.framework.common.objects.filter.OrFilter;
import org.identityconnectors.framework.common.objects.filter.StartsWithFilter;
import org.identityconnectors.framework.common.serializer.SerializerUtil;
import org.identityconnectors.framework.impl.api.APIConfigurationImpl;
import org.identityconnectors.framework.impl.api.ConfigurationPropertiesImpl;
import org.identityconnectors.framework.impl.api.ConfigurationPropertyImpl;
import org.identityconnectors.framework.impl.api.ConnectorMessagesImpl;
import org.identityconnectors.framework.impl.api.remote.RemoteConnectorInfoImpl;
import org.identityconnectors.framework.impl.api.remote.messages.EchoMessage;
import org.identityconnectors.framework.impl.api.remote.messages.HelloRequest;
import org.identityconnectors.framework.impl.api.remote.messages.HelloResponse;
import org.identityconnectors.framework.impl.api.remote.messages.OperationRequest;
import org.identityconnectors.framework.impl.api.remote.messages.OperationRequestMoreData;
import org.identityconnectors.framework.impl.api.remote.messages.OperationRequestStopData;
import org.identityconnectors.framework.impl.api.remote.messages.OperationResponseEnd;
import org.identityconnectors.framework.impl.api.remote.messages.OperationResponsePart;
import org.identityconnectors.framework.impl.api.remote.messages.OperationResponsePause;
public class ObjectSerializationTests {
@Test
public void testBoolean() throws Exception {
Boolean v1 = true;
Boolean v2 = (Boolean)cloneObject(v1);
assertEquals(v1, v2);
v1 = false;
v2 = (Boolean)cloneObject(v1);
assertEquals(v1, v2);
}
@Test
public void testCharacter() throws Exception {
Character v1 = 'h';
Character v2 = (Character)cloneObject(v1);
assertEquals(v1, v2);
}
@Test
public void testInteger() throws Exception {
Integer v1 = 12345;
Integer v2 = (Integer)cloneObject(v1);
assertEquals(v1, v2);
v1 = Integer.MIN_VALUE;
v2 = (Integer)cloneObject(v1);
assertEquals(v1, v2);
v1 = Integer.MAX_VALUE;
v2 = (Integer)cloneObject(v1);
assertEquals(v1, v2);
v1 = -1;
v2 = (Integer)cloneObject(v1);
assertEquals(v1, v2);
}
@Test
public void testLong() throws Exception {
Long v1 = 12345L;
Long v2 = (Long)cloneObject(v1);
assertEquals(v1, v2);
v1 = Long.MIN_VALUE;
v2 = (Long)cloneObject(v1);
assertEquals(v1, v2);
v1 = Long.MAX_VALUE;
v2 = (Long)cloneObject(v1);
assertEquals(v1, v2);
v1 = -1L;
v2 = (Long)cloneObject(v1);
assertEquals(v1, v2);
}
@Test
public void testFloat() throws Exception {
Float v1 = 1.1F;
Float v2 = (Float)cloneObject(v1);
assertTrue(v1!=v2);
assertEquals(v1, v2);
v1 = Float.MAX_VALUE;
v2 = (Float)cloneObject(v1);
assertEquals(v1, v2);
v1 = -Float.MAX_VALUE;
v2 = (Float)cloneObject(v1);
assertEquals(v1, v2);
v1 = Float.MIN_VALUE;
v2 = (Float)cloneObject(v1);
assertEquals(v1, v2);
v1 = Float.NaN;
v2 = (Float)cloneObject(v1);
assertEquals(v1, v2);
v1 = Float.NEGATIVE_INFINITY;
v2 = (Float)cloneObject(v1);
assertEquals(v1, v2);
v1 = Float.POSITIVE_INFINITY;
v2 = (Float)cloneObject(v1);
assertEquals(v1, v2);
}
@Test
public void testDouble() throws Exception {
Double v1 = 1.1;
Double v2 = (Double)cloneObject(v1);
assertTrue(v1!=v2);
assertEquals(v1, v2);
v1 = Double.MAX_VALUE;
v2 = (Double)cloneObject(v1);
assertEquals(v1, v2);
v1 = -Double.MAX_VALUE;
v2 = (Double)cloneObject(v1);
assertEquals(v1, v2);
v1 = Double.MIN_VALUE;
v2 = (Double)cloneObject(v1);
assertEquals(v1, v2);
v1 = Double.NaN;
v2 = (Double)cloneObject(v1);
assertEquals(v1, v2);
v1 = Double.NEGATIVE_INFINITY;
v2 = (Double)cloneObject(v1);
assertEquals(v1, v2);
v1 = Double.POSITIVE_INFINITY;
v2 = (Double)cloneObject(v1);
assertEquals(v1, v2);
}
@Test
public void testString() throws Exception {
String v1 = "abcd";
String v2 = (String)cloneObject(v1);
assertTrue(v1!=v2);
assertEquals(v1, v2);
}
@Test
public void testURI() throws Exception {
URI v1 = new URI("mailto:java-net@java.sun.com");
URI v2 = (URI)cloneObject(v1);
assertTrue(v1!=v2);
assertEquals(v1, v2);
}
@Test
public void testFile() throws Exception {
File v1 = new File("c:/foo.txt");
File v2 = (File)cloneObject(v1);
assertTrue(v1!=v2);
assertEquals(v1, v2);
}
@Test
public void testBigInteger() throws Exception {
BigInteger v1 = new BigInteger("983423442347324324324");
BigInteger v2 = (BigInteger)cloneObject(v1);
assertEquals(v1, v2);
}
@Test
public void testBigDecimal() throws Exception {
BigDecimal v1 = new BigDecimal(new BigInteger("9847324324324"),45);
BigDecimal v2 = (BigDecimal)cloneObject(v1);
assertEquals(v1, v2);
}
@Test
public void testByteArray() throws Exception {
byte [] v1 = {1,2,3};
byte [] v2 = (byte[])cloneObject(v1);
assertEquals(3, v2.length);
assertEquals(1,v2[0]);
assertEquals(2,v2[1]);
assertEquals(3,v2[2]);
}
@Test
public void testByte() throws Exception {
Byte v1 = 51;
Byte v2 = (Byte)cloneObject(v1);
assertEquals(v1, v2);
}
@Test
public void testClasses() throws Exception {
assertEquals(int.class,
cloneObject(int.class));
assertEquals(int[].class,
cloneObject(int[].class));
assertEquals(int[][][].class,
cloneObject(int[][][].class));
assertEquals(long.class,
cloneObject(long.class));
assertEquals(float.class,
cloneObject(float.class));
assertEquals(double.class,
cloneObject(double.class));
assertEquals(char.class,
cloneObject(char.class));
//if this fails, we have added a new type and we need to add
//a serializer for it
assertEquals(FrameworkUtil.getAllSupportedConfigTypes(),
cloneObject(FrameworkUtil.getAllSupportedConfigTypes()));
//if this fails, we have added a new type and we need to add
//a serializer for it
assertEquals(FrameworkUtil.getAllSupportedAttributeTypes(),
cloneObject(FrameworkUtil.getAllSupportedAttributeTypes()));
//if this fails, need to add to the OperationMappings class
assertEquals(FrameworkUtil.allAPIOperations(),
cloneObject(FrameworkUtil.allAPIOperations()));
}
@Test
public void testArrays() throws Exception {
int [] v1 = {1,2,3};
int [] v2 = (int[])cloneObject(v1);
assertEquals(3, v2.length);
assertEquals(1,v2[0]);
assertEquals(2,v2[1]);
assertEquals(3,v2[2]);
}
@Test
public void testObjectArrays() throws Exception {
Object [] v1 = {"1","2","3"};
Object [] v2 = (Object[])cloneObject(v1);
assertEquals(3, v2.length);
assertEquals("1",v2[0]);
assertEquals("2",v2[1]);
assertEquals("3",v2[2]);
}
@Test
public void testMap() throws Exception {
Map<Object,Object> map = new HashMap<Object,Object>();
map.put("key1", "val1");
map.put("key2", "val2");
Map<?,?> map2 = (Map<?,?>)cloneObject(map);
assertEquals(map, map2);
}
@Test
public void testCaseInsensitiveMap() {
Set<Attribute> set = new HashSet<Attribute>();
set.add(AttributeBuilder.build("foo1"));
set.add(AttributeBuilder.build("foo2"));
Map<String,Attribute> map = AttributeUtil.toMap(set);
assertTrue(map.containsKey("Foo1"));
assertTrue(map.containsKey("Foo2"));
@SuppressWarnings("unchecked")
Map<String,Attribute> map2 = (Map)cloneObject(map);
assertTrue(map2.containsKey("Foo1"));
assertTrue(map2.containsKey("Foo2"));
}
@Test
public void testList() throws Exception {
List<Object> v1 = new ArrayList<Object>();
v1.add("val1");
v1.add("val2");
List<?> v2 = (List<?>)cloneObject(v1);
assertEquals(v1,v2);
}
@Test
public void testSet() throws Exception {
Set<Object> v1 = new HashSet<Object>();
v1.add("val1");
v1.add("val2");
Set<?> v2 = (Set<?>)cloneObject(v1);
assertEquals(v1,v2);
}
@Test
public void testCaseInsensitiveSet() {
Set<String> v1 = CollectionUtil.newCaseInsensitiveSet();
v1.add("foo");
v1.add("foo2");
Set<?> v2 = (Set<?>)cloneObject(v1);
assertTrue(v2.contains("Foo"));
assertTrue(v2.contains("Foo2"));
}
@Test
public void testLocale() throws Exception {
Locale v1 = new Locale("no","NO","NY");
Locale v2 = (Locale)cloneObject(v1);
assertEquals(v1,v2);
v1 = new Locale("");
v2 = (Locale)cloneObject(v1);
assertEquals(v1,v2);
}
@Test
public void testConnectionPoolingConfiguration() {
ObjectPoolConfiguration v1 = new ObjectPoolConfiguration();
v1.setMaxObjects(1);
v1.setMaxIdle(2);
v1.setMaxWait(3);
v1.setMinEvictableIdleTimeMillis(4);
v1.setMinIdle(5);
ObjectPoolConfiguration v2 =
(ObjectPoolConfiguration)cloneObject(v1);
assertTrue(v1 != v2);
assertEquals(v1,v2);
assertEquals(1, v2.getMaxObjects());
assertEquals(2, v2.getMaxIdle());
assertEquals(3, v2.getMaxWait());
assertEquals(4, v2.getMinEvictableIdleTimeMillis());
assertEquals(5, v2.getMinIdle());
}
@Test
public void testConfigurationProperty() {
ConfigurationPropertyImpl v1 = new ConfigurationPropertyImpl();
v1.setOrder(1);
v1.setConfidential(true);
v1.setRequired(true);
v1.setName("foo");
v1.setHelpMessageKey("help key");
v1.setDisplayMessageKey("display key");
v1.setGroupMessageKey("group key");
v1.setValue("bar");
v1.setType(String.class);
v1.setOperations(FrameworkUtil.allAPIOperations());
ConfigurationPropertyImpl v2 = (ConfigurationPropertyImpl)
cloneObject(v1);
assertEquals(1, v2.getOrder());
assertTrue(v2.isConfidential());
assertTrue(v2.isRequired());
assertEquals("foo", v2.getName());
assertEquals("help key", v2.getHelpMessageKey());
assertEquals("display key", v2.getDisplayMessageKey());
assertEquals("group key", v2.getGroupMessageKey());
assertEquals("bar", v2.getValue());
assertEquals(String.class, v2.getType());
assertEquals(FrameworkUtil.allAPIOperations(), v2.getOperations());
}
@Test
public void testConfigurationProperties() {
ConfigurationPropertyImpl prop1 = new ConfigurationPropertyImpl();
prop1.setName("foo");
prop1.setOrder(1);
prop1.setConfidential(true);
prop1.setName("foo");
prop1.setHelpMessageKey("help key");
prop1.setDisplayMessageKey("display key");
prop1.setGroupMessageKey("group key");
prop1.setValue("bar");
prop1.setType(String.class);
prop1.setOperations(null);
ConfigurationPropertiesImpl v1 = new ConfigurationPropertiesImpl();
v1.setProperties(CollectionUtil.newList(prop1));
v1.setPropertyValue("foo", "bar");
ConfigurationPropertiesImpl v2 = (ConfigurationPropertiesImpl)
cloneObject(v1);
assertEquals("bar", v2.getProperty("foo").getValue());
}
@Test
public void testAPIConfiguration() {
ConfigurationPropertyImpl prop1 = new ConfigurationPropertyImpl();
prop1.setName("foo");
prop1.setOrder(1);
prop1.setConfidential(true);
prop1.setName("foo");
prop1.setHelpMessageKey("help key");
prop1.setDisplayMessageKey("display key");
prop1.setGroupMessageKey("group key");
prop1.setValue("bar");
prop1.setType(String.class);
prop1.setOperations(null);
ConfigurationPropertiesImpl props1 = new ConfigurationPropertiesImpl();
props1.setProperties(CollectionUtil.newList(prop1));
APIConfigurationImpl v1 = new APIConfigurationImpl();
v1.setConnectorPoolConfiguration(new ObjectPoolConfiguration());
v1.setConfigurationProperties(props1);
v1.setConnectorPoolingSupported(true);
v1.setProducerBufferSize(200);
v1.setSupportedOperations(FrameworkUtil.allAPIOperations());
Map<Class<? extends APIOperation>,Integer> map =
CollectionUtil.<Class<? extends APIOperation>,Integer>newMap(CreateApiOp.class,new Integer(6));
v1.setTimeoutMap(map);
APIConfigurationImpl v2 = (APIConfigurationImpl)
cloneObject(v1);
assertTrue(v1 != v2);
assertNotNull(v2.getConnectorPoolConfiguration());
assertNotNull(v2.getConfigurationProperties());
assertEquals(v1.getConnectorPoolConfiguration(),v2.getConnectorPoolConfiguration());
assertEquals(v1.getConfigurationProperties(),v2.getConfigurationProperties());
assertTrue(v2.isConnectorPoolingSupported());
assertEquals(200, v2.getProducerBufferSize());
assertEquals(FrameworkUtil.allAPIOperations(),
v2.getSupportedOperations());
assertEquals(map, v2.getTimeoutMap());
}
@Test
public void testConnectorMessages() {
ConnectorMessagesImpl v1 = new ConnectorMessagesImpl();
Map<String,String> defaultMap = new HashMap<String,String>();
defaultMap.put("key1","val1");
Map<Locale,Map<String,String>> messages =
new HashMap<Locale,Map<String,String>>();
messages.put(new Locale("en"), defaultMap);
messages.put(new Locale(""), defaultMap);
v1.setCatalogs(messages);
ConnectorMessagesImpl v2 = (ConnectorMessagesImpl)
cloneObject(v1);
assertEquals(messages,v2.getCatalogs());
}
@Test
public void testRemoteConnectorInfo() {
RemoteConnectorInfoImpl v1 = new RemoteConnectorInfoImpl();
v1.setMessages(new ConnectorMessagesImpl());
v1.setConnectorKey(new ConnectorKey("my bundle",
"my version",
"my connector"));
ConfigurationPropertiesImpl configProperties = new ConfigurationPropertiesImpl();
configProperties.setProperties(new ArrayList<ConfigurationPropertyImpl>());
APIConfigurationImpl apiImpl = new APIConfigurationImpl();
apiImpl.setConfigurationProperties(configProperties);
v1.setDefaultAPIConfiguration(apiImpl);
v1.setConnectorDisplayNameKey("mykey");
v1.setConnectorCategoryKey("LDAP");
RemoteConnectorInfoImpl v2 = (RemoteConnectorInfoImpl)
cloneObject(v1);
assertNotNull(v2.getMessages());
assertEquals("my bundle", v2.getConnectorKey().getBundleName());
assertEquals("my version", v2.getConnectorKey().getBundleVersion());
assertEquals("my connector", v2.getConnectorKey().getConnectorName());
assertEquals("mykey", v2.getConnectorDisplayNameKey());
Assert.assertEquals(v2.getConnectorCategoryKey(), "LDAP");
assertNotNull(v2.getDefaultAPIConfiguration());
}
@Test
public void testAttribute() {
Attribute v1 = AttributeBuilder.build("foo", "val1", "val2");
Attribute v2 = (Attribute)cloneObject(v1);
assertEquals(v1,v2);
}
@Test
public void testAttributeInfo() {
AttributeInfoBuilder builder = new AttributeInfoBuilder("foo",String.class);
builder.setRequired(true);
builder.setReadable(true);
builder.setCreateable(true);
builder.setMultiValued(true);
builder.setUpdateable(false);
builder.setReturnedByDefault(false);
AttributeInfo v1 = builder.build();
AttributeInfo v2 = (AttributeInfo)cloneObject(v1);
assertEquals(v1,v2);
assertEquals("foo", v2.getName());
assertEquals(String.class, v2.getType());
assertTrue(v2.isMultiValued());
assertTrue(v2.isReadable());
assertTrue(v2.isRequired());
assertTrue(v2.isCreateable());
assertFalse(v2.isUpdateable());
assertFalse(v2.isReturnedByDefault());
builder.setFlags(EnumSet.allOf(Flags.class));
v1 = builder.build();
v2 = (AttributeInfo)cloneObject(v1);
assertEquals(v1,v2);
}
@Test
public void testConnectorObject() {
ConnectorObjectBuilder bld = new ConnectorObjectBuilder();
bld.setUid("foo");
bld.setName("name");
ConnectorObject v1 = bld.build();
ConnectorObject v2 = (ConnectorObject)cloneObject(v1);
assertEquals(v1, v2);
}
@Test
public void testName() {
Name v1 = new Name("test");
Name v2 = (Name)cloneObject(v1);
assertEquals(v1, v2);
}
@Test
public void testObjectClass() {
ObjectClass v1 = new ObjectClass("test");
ObjectClass v2 = (ObjectClass)cloneObject(v1);
assertEquals(v1, v2);
}
@Test
public void testObjectClassInfo() {
AttributeInfoBuilder builder = new AttributeInfoBuilder("foo",String.class);
builder.setRequired(true);
builder.setReadable(true);
builder.setCreateable(true);
builder.setMultiValued(true);
ObjectClassInfoBuilder obld = new ObjectClassInfoBuilder();
obld.addAttributeInfo(builder.build());
obld.setContainer(true);
ObjectClassInfo v1 = obld.build();
ObjectClassInfo v2 = (ObjectClassInfo)cloneObject(v1);
assertEquals(v1, v2);
assertTrue(v2.isContainer());
}
@Test
public void testUid() {
Uid v1 = new Uid("test");
Uid v2 = (Uid)cloneObject(v1);
assertEquals(v1, v2);
}
@Test
public void testOperationOptionInfo() {
OperationOptionInfo v1 =
new OperationOptionInfo("name",Integer.class);
OperationOptionInfo v2 =
(OperationOptionInfo)cloneObject(v1);
assertEquals(v1, v2);
}
@Test
public void testSchema() {
OperationOptionInfo opInfo =
new OperationOptionInfo("name",Integer.class);
ObjectClassInfoBuilder bld = new ObjectClassInfoBuilder();
bld.setType(ObjectClass.ACCOUNT_NAME);
ObjectClassInfo info = bld.build();
Set<ObjectClassInfo> temp = CollectionUtil.newSet(info);
Map<Class<? extends APIOperation>,Set<ObjectClassInfo>> map =
new HashMap<Class<? extends APIOperation>,Set<ObjectClassInfo>>();
map.put(CreateApiOp.class, temp);
Set<OperationOptionInfo> temp2 = CollectionUtil.newSet(opInfo);
Map<Class<? extends APIOperation>,Set<OperationOptionInfo>> map2 =
new HashMap<Class<? extends APIOperation>,Set<OperationOptionInfo>>();
map2.put(CreateApiOp.class, temp2);
Schema v1 = new Schema(CollectionUtil.newSet(info),
CollectionUtil.newSet(opInfo),
map,
map2);
Schema v2 = (Schema)cloneObject(v1);
assertEquals(v1, v2);
assertEquals(info, v2.getObjectClassInfo().iterator().next());
assertEquals(1, v2.getSupportedObjectClassesByOperation().size());
assertEquals(1, v2.getSupportedOptionsByOperation().size());
assertEquals(1, v2.getOperationOptionInfo().size());
}
@Test
public void testContainsFilter() {
ContainsFilter v1 = new ContainsFilter(AttributeBuilder.build("foo", "bar"));
ContainsFilter v2 = (ContainsFilter)cloneObject(v1);
assertEquals(v1.getAttribute(), v2.getAttribute());
}
@Test
public void testAndFilter() {
ContainsFilter left1 = new ContainsFilter(AttributeBuilder.build("foo", "bar"));
ContainsFilter right1 = new ContainsFilter(AttributeBuilder.build("foo2", "bar2"));
AndFilter v1 = new AndFilter(left1,right1);
AndFilter v2 = (AndFilter)cloneObject(v1);
ContainsFilter left2 = (ContainsFilter)v2.getLeft();
ContainsFilter right2 = (ContainsFilter)v2.getRight();
assertEquals(left1.getAttribute(),left2.getAttribute());
assertEquals(right1.getAttribute(),right2.getAttribute());
}
@Test
public void testEndsWithFilter() {
EndsWithFilter v1 = new EndsWithFilter(AttributeBuilder.build("foo", "bar"));
EndsWithFilter v2 = (EndsWithFilter)cloneObject(v1);
assertEquals(v1.getAttribute(), v2.getAttribute());
}
@Test
public void testEqualsFilter() {
EqualsFilter v1 = new EqualsFilter(AttributeBuilder.build("foo", "bar"));
EqualsFilter v2 = (EqualsFilter)cloneObject(v1);
assertEquals(v1.getAttribute(), v2.getAttribute());
}
@Test
public void testGreaterThanFilter() {
GreaterThanFilter v1 = new GreaterThanFilter(AttributeBuilder.build("foo", "bar"));
GreaterThanFilter v2 = (GreaterThanFilter)cloneObject(v1);
assertEquals(v1.getAttribute(), v2.getAttribute());
}
@Test
public void testGreaterThanOrEqualFilter() {
GreaterThanOrEqualFilter v1 = new GreaterThanOrEqualFilter(AttributeBuilder.build("foo", "bar"));
GreaterThanOrEqualFilter v2 = (GreaterThanOrEqualFilter)cloneObject(v1);
assertEquals(v1.getAttribute(), v2.getAttribute());
}
@Test
public void testLessThanFilter() {
LessThanFilter v1 = new LessThanFilter(AttributeBuilder.build("foo", "bar"));
LessThanFilter v2 = (LessThanFilter)cloneObject(v1);
assertEquals(v1.getAttribute(), v2.getAttribute());
}
@Test
public void testLessThanOrEqualFilter() {
LessThanOrEqualFilter v1 = new LessThanOrEqualFilter(AttributeBuilder.build("foo", "bar"));
LessThanOrEqualFilter v2 = (LessThanOrEqualFilter)cloneObject(v1);
assertEquals(v1.getAttribute(), v2.getAttribute());
}
@Test
public void testNotFilter() {
ContainsFilter left1 = new ContainsFilter(AttributeBuilder.build("foo", "bar"));
NotFilter v1 = new NotFilter(left1);
NotFilter v2 = (NotFilter)cloneObject(v1);
ContainsFilter left2 = (ContainsFilter)v2.getFilter();
assertEquals(left1.getAttribute(),left2.getAttribute());
}
@Test
public void testOrFilter() {
ContainsFilter left1 = new ContainsFilter(AttributeBuilder.build("foo", "bar"));
ContainsFilter right1 = new ContainsFilter(AttributeBuilder.build("foo2", "bar2"));
OrFilter v1 = new OrFilter(left1,right1);
OrFilter v2 = (OrFilter)cloneObject(v1);
ContainsFilter left2 = (ContainsFilter)v2.getLeft();
ContainsFilter right2 = (ContainsFilter)v2.getRight();
assertEquals(left1.getAttribute(),left2.getAttribute());
assertEquals(right1.getAttribute(),right2.getAttribute());
}
@Test
public void testStartsWithFilter() {
StartsWithFilter v1 = new StartsWithFilter(AttributeBuilder.build("foo", "bar"));
StartsWithFilter v2 = (StartsWithFilter)cloneObject(v1);
assertEquals(v1.getAttribute(), v2.getAttribute());
}
@Test
public void testContainsAllValuesFilter() {
ContainsAllValuesFilter v1 = new ContainsAllValuesFilter(AttributeBuilder.build("foo", "a", "b"));
ContainsAllValuesFilter v2 = (ContainsAllValuesFilter)cloneObject(v1);
assertEquals(v1.getAttribute(), v2.getAttribute());
}
@Test
public void testExceptions() {
{
AlreadyExistsException v1 = new AlreadyExistsException("ex");
AlreadyExistsException v2 = (AlreadyExistsException)cloneObject(v1);
assertEquals("ex",v2.getMessage());
}
{
ConfigurationException v1 = new ConfigurationException("ex");
ConfigurationException v2 = (ConfigurationException)cloneObject(v1);
assertEquals("ex",v2.getMessage());
}
{
ConnectionBrokenException v1 = new ConnectionBrokenException("ex");
ConnectionBrokenException v2 = (ConnectionBrokenException)cloneObject(v1);
assertEquals("ex",v2.getMessage());
}
{
ConnectionFailedException v1 = new ConnectionFailedException("ex");
ConnectionFailedException v2 = (ConnectionFailedException)cloneObject(v1);
assertEquals("ex",v2.getMessage());
}
{
ConnectorException v1 = new ConnectorException("ex");
ConnectorException v2 = (ConnectorException)cloneObject(v1);
assertEquals("ex",v2.getMessage());
}
{
ConnectorIOException v1 = new ConnectorIOException("ex");
ConnectorIOException v2 = (ConnectorIOException)cloneObject(v1);
assertEquals("ex",v2.getMessage());
}
{
ConnectorSecurityException v1 = new ConnectorSecurityException("ex");
ConnectorSecurityException v2 = (ConnectorSecurityException)cloneObject(v1);
assertEquals("ex",v2.getMessage());
}
{
InvalidCredentialException v1 = new InvalidCredentialException("ex");
InvalidCredentialException v2 = (InvalidCredentialException)cloneObject(v1);
assertEquals("ex",v2.getMessage());
}
{
InvalidPasswordException v1 = new InvalidPasswordException("ex");
InvalidPasswordException v2 = (InvalidPasswordException)cloneObject(v1);
assertEquals("ex",v2.getMessage());
}
{
PasswordExpiredException v1 = new PasswordExpiredException("ex");
v1.initUid(new Uid("myuid"));
PasswordExpiredException v2 = (PasswordExpiredException)cloneObject(v1);
assertEquals("ex",v2.getMessage());
assertEquals("myuid", v2.getUid().getUidValue());
}
{
OperationTimeoutException v1 = new OperationTimeoutException();
OperationTimeoutException v2 = (OperationTimeoutException)cloneObject(v1);
assertNotNull(v2);
}
{
PermissionDeniedException v1 = new PermissionDeniedException("ex");
PermissionDeniedException v2 = (PermissionDeniedException)cloneObject(v1);
assertEquals("ex",v2.getMessage());
}
{
UnknownUidException v1 = new UnknownUidException("ex");
UnknownUidException v2 = (UnknownUidException)cloneObject(v1);
assertEquals("ex",v2.getMessage());
}
{
IllegalArgumentException v1 = new IllegalArgumentException("my msg");
IllegalArgumentException v2 = (IllegalArgumentException)cloneObject(v1);
assertEquals("my msg", v2.getMessage());
}
{
RuntimeException v1 = new RuntimeException("my msg");
RuntimeException v2 = (RuntimeException)cloneObject(v1);
assertEquals("my msg", v2.getMessage());
}
{
Exception v1 = new Exception("my msg2");
Exception v2 = (Exception)cloneObject(v1);
assertEquals("my msg2", v2.getMessage());
}
{
Throwable v1 = new Throwable("my msg3");
Exception v2 = (Exception)cloneObject(v1);
assertEquals("my msg3", v2.getMessage());
}
}
@Test
public void testHelloRequest() {
HelloRequest v1 = new HelloRequest(HelloRequest.CONNECTOR_INFO);
HelloRequest v2 = (HelloRequest)cloneObject(v1);
Assert.assertNotNull(v2);
Assert.assertEquals(v2.getInfoLevel(),HelloRequest.CONNECTOR_INFO);
}
@Test
public void testHelloResponse() {
RuntimeException ex = new RuntimeException("foo");
Map<String,Object> serverInfo = new HashMap<String, Object>(1);
serverInfo.put(HelloResponse.SERVER_START_TIME,System.currentTimeMillis());
ConnectorKey key = new ConnectorKey("my bundle", "my version", "my connector");
RemoteConnectorInfoImpl info = new RemoteConnectorInfoImpl();
info.setMessages(new ConnectorMessagesImpl());
info.setConnectorKey(key);
ConfigurationPropertiesImpl configProperties = new ConfigurationPropertiesImpl();
configProperties.setProperties(new ArrayList<ConfigurationPropertyImpl>());
APIConfigurationImpl apiImpl = new APIConfigurationImpl();
apiImpl.setConfigurationProperties(configProperties);
info.setDefaultAPIConfiguration(apiImpl);
info.setConnectorDisplayNameKey("mykey");
info.setConnectorCategoryKey("");
HelloResponse v1 = new HelloResponse(ex, serverInfo, CollectionUtil.newList(key), CollectionUtil.newList(info));
HelloResponse v2 = (HelloResponse)cloneObject(v1);
Assert.assertNotNull(v2.getException());
Assert.assertNotNull(v2.getServerInfo().get(HelloResponse.SERVER_START_TIME));
Assert.assertNotNull(v2.getConnectorKeys().iterator().next());
Assert.assertNotNull(v2.getConnectorInfos().iterator().next());
}
@Test
public void testOperationRequest() {
ConfigurationPropertiesImpl configProperties = new ConfigurationPropertiesImpl();
configProperties.setProperties(new ArrayList<ConfigurationPropertyImpl>());
APIConfigurationImpl apiImpl = new APIConfigurationImpl();
apiImpl.setConfigurationProperties(configProperties);
List<Object> args = new ArrayList<Object>();
args.add("my arg");
OperationRequest v1 = new
OperationRequest(
new ConnectorKey(
"my bundle",
"my version",
"my connector"),
SerializerUtil.serializeBase64Object(apiImpl),
CreateApiOp.class,
"mymethodName",
args);
OperationRequest v2 = (OperationRequest)cloneObject(v1);
assertEquals("my bundle", v2.getConnectorKey().getBundleName());
assertEquals("my version", v2.getConnectorKey().getBundleVersion());
assertEquals("my connector", v2.getConnectorKey().getConnectorName());
assertNotNull(v2.getConnectorFacadeKey());
assertEquals(CreateApiOp.class, v2.getOperation());
assertEquals("mymethodName", v2.getOperationMethodName());
assertEquals(args, v2.getArguments());
}
@Test
public void testOperationResponseEnd() {
OperationResponseEnd v1 = new OperationResponseEnd();
OperationResponseEnd v2 = (OperationResponseEnd)cloneObject(v1);
assertNotNull(v2);
}
@Test
public void testOperationResponsePart() {
RuntimeException ex = new RuntimeException("foo", new IllegalArgumentException("Cause"));
OperationResponsePart v1 = new OperationResponsePart(ex,"bar");
OperationResponsePart v2 = (OperationResponsePart)cloneObject(v1);
assertNotNull(v2.getException());
assertEquals("bar", v2.getResult());
}
@Test
public void testOperationResponsePause() {
OperationResponsePause v1 = new OperationResponsePause();
OperationResponsePause v2 = (OperationResponsePause)cloneObject(v1);
assertNotNull(v2);
}
@Test
public void testOperationRequestMoreData() {
OperationRequestMoreData v1 = new OperationRequestMoreData();
OperationRequestMoreData v2 = (OperationRequestMoreData)cloneObject(v1);
assertNotNull(v2);
}
@Test
public void testOperationRequestStopData() {
OperationRequestStopData v1 = new OperationRequestStopData();
OperationRequestStopData v2 = (OperationRequestStopData)cloneObject(v1);
assertNotNull(v2);
}
@Test
public void testEchoMessage() {
EchoMessage v1 = new EchoMessage("test","xml");
EchoMessage v2 = (EchoMessage)cloneObject(v1);
assertEquals("test", v2.getObject());
assertEquals("xml", v2.getXml());
}
@Test
public void testOperationOptions() {
OperationOptionsBuilder builder = new OperationOptionsBuilder();
builder.setOption("foo", "bar");
builder.setOption("foo2", "bar2");
OperationOptions v1 = builder.build();
OperationOptions v2 = (OperationOptions)cloneObject(v1);
assertEquals(2,v2.getOptions().size());
assertEquals("bar",v2.getOptions().get("foo"));
assertEquals("bar2",v2.getOptions().get("foo2"));
}
@Test
public void testScript() {
ScriptBuilder builder = new ScriptBuilder();
builder.setScriptLanguage("language");
builder.setScriptText("text");
Script v1 = builder.build();
Script v2 = (Script)cloneObject(v1);
assertEquals("language",v2.getScriptLanguage());
assertEquals("text",v2.getScriptText());
}
@Test
public void testScriptContext() {
ScriptContextBuilder builder = new ScriptContextBuilder();
builder.setScriptLanguage("language");
builder.setScriptText("text");
builder.addScriptArgument("foo", "bar");
builder.addScriptArgument("foo2", "bar2");
ScriptContext v1 = builder.build();
ScriptContext v2 = (ScriptContext)cloneObject(v1);
assertEquals(2,v2.getScriptArguments().size());
assertEquals("bar",v2.getScriptArguments().get("foo"));
assertEquals("bar2",v2.getScriptArguments().get("foo2"));
assertEquals("language",v2.getScriptLanguage());
assertEquals("text",v2.getScriptText());
}
@Test
public void testSyncDeltaType() {
SyncDeltaType v1 = SyncDeltaType.DELETE;
SyncDeltaType v2 = (SyncDeltaType)cloneObject(v1);
assertEquals(v1, v2);
}
@Test
public void testSyncToken() {
SyncToken v1 = new SyncToken("mytoken");
SyncToken v2 = (SyncToken)cloneObject(v1);
assertEquals(v1.getValue(),v2.getValue());
assertEquals(v1,v2);
}
@Test
public void testSyncDelta() {
ConnectorObjectBuilder bld = new ConnectorObjectBuilder();
bld.setUid("foo");
bld.setName("name");
SyncDeltaBuilder builder = new SyncDeltaBuilder();
builder.setPreviousUid(new Uid("previous"));
builder.setObject(bld.build());
builder.setDeltaType(SyncDeltaType.CREATE_OR_UPDATE);
builder.setToken(new SyncToken("mytoken"));
SyncDelta v1 = builder.build();
SyncDelta v2 = (SyncDelta)cloneObject(v1);
assertEquals(new Uid("previous"),v2.getPreviousUid());
assertEquals(new Uid("foo"),v2.getObject().getUid());
assertEquals(new SyncToken("mytoken"),v2.getToken());
assertEquals(SyncDeltaType.CREATE_OR_UPDATE,v2.getDeltaType());
assertEquals(v1,v2);
builder = new SyncDeltaBuilder();
builder.setDeltaType(SyncDeltaType.DELETE);
builder.setToken(new SyncToken("mytoken"));
builder.setObjectClass(ObjectClass.ACCOUNT);
builder.setUid(new Uid("foo"));
v1 = builder.build();
v2 = (SyncDelta)cloneObject(v1);
assertEquals(ObjectClass.ACCOUNT,v2.getObjectClass());
assertEquals(new Uid("foo"),v2.getUid());
assertEquals(new SyncToken("mytoken"),v2.getToken());
assertEquals(SyncDeltaType.DELETE,v2.getDeltaType());
assertEquals(v1,v2);
}
@Test
public void testNull() {
Object v1 = null;
Object v2 = cloneObject(v1);
assertNull(v2);
}
@Test
public void testGuardedString() {
GuardedString v1 = new GuardedString("foobar".toCharArray());
GuardedString v2 = (GuardedString)cloneObject(v1);
assertEquals("foobar", decryptToString(v2));
}
@Test
public void testGuardedByteArray() {
GuardedByteArray v1 = new GuardedByteArray(new byte[] { 0x00, 0x01, 0x02, 0x03 });
GuardedByteArray v2 = (GuardedByteArray)cloneObject(v1);
assertTrue(Arrays.equals(new byte[] { 0x00, 0x01, 0x02, 0x03 }, decryptToBytes(v2)));
}
@Test
public void testQualifiedUid() {
QualifiedUid v1 = new QualifiedUid(new ObjectClass("myclass"),
new Uid("myuid"));
QualifiedUid v2 = (QualifiedUid)cloneObject(v1);
assertEquals(v1, v2);
assertTrue(v2.getObjectClass().is("myclass"));
assertEquals("myuid", v2.getUid().getUidValue());
}
/**
* Highly insecure method! Do not do this in production
* code. This is only for test purposes
*/
private String decryptToString(GuardedString string) {
final StringBuilder buf = new StringBuilder();
string.access(
new GuardedString.Accessor() {
public void access(char [] chars) {
buf.append(chars);
}
});
return buf.toString();
}
/**
* Highly insecure method! Do not do this in production
* code. This is only for test purposes
*/
private byte[] decryptToBytes(GuardedByteArray bytes) {
final ByteArrayOutputStream out = new ByteArrayOutputStream();
bytes.access(
new GuardedByteArray.Accessor() {
public void access(byte[] bytes) {
out.write(bytes, 0, bytes.length);
}
});
return out.toByteArray();
}
protected Object cloneObject(Object o) {
return SerializerUtil.cloneObject(o);
}
}