| opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/AttrInfoTest.java | ●●●●● patch | view | raw | blame | history | |
| opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ChangeNumberTest.java | ●●●●● patch | view | raw | blame | history | |
| opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/SynchronizationMsgTest.java | ●●●●● patch | view | raw | blame | history | |
| opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ValueInfoTest.java | ●●●●● patch | view | raw | blame | history |
opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/AttrInfoTest.java
New file @@ -0,0 +1,153 @@ /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at * trunk/opends/resource/legal-notices/OpenDS.LICENSE * or https://OpenDS.dev.java.net/OpenDS.LICENSE. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, * add the following below this CDDL HEADER, with the fields enclosed * by brackets "[]" replaced with your own identifying * information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Portions Copyright 2006 Sun Microsystems, Inc. */ package org.opends.server.synchronization; import java.util.ArrayList; import java.util.LinkedHashSet; import org.opends.server.core.DirectoryServer; import org.opends.server.types.AttributeType; import org.opends.server.types.AttributeValue; import org.opends.server.util.TimeThread; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import static org.testng.Assert.*; /** * Test AttrInfo and AttrInfoWithOptions */ public class AttrInfoTest extends SynchronizationTestCase { /** * Build some data for the AttrInfo test below. */ @DataProvider(name = "attrInfo") public Object[][] createData() { AttributeType type = DirectoryServer.getAttributeType("description"); AttributeValue att1 = new AttributeValue(type, "string"); AttributeValue att2 = new AttributeValue(type, "value"); AttributeValue att3 = new AttributeValue(null, "again"); ChangeNumber del1 = new ChangeNumber(1, (short) 0, (short) 1); ChangeNumber del2 = new ChangeNumber(1, (short) 1, (short) 1); ChangeNumber del3 = new ChangeNumber(1, (short) 0, (short) 2); ChangeNumber upd1 = new ChangeNumber(TimeThread.getTime(), (short) 123, (short) 45); ChangeNumber upd2 = new ChangeNumber(TimeThread.getTime() + 1000, (short) 123, (short) 45); ChangeNumber upd3 = new ChangeNumber(TimeThread.getTime(), (short) 321, (short) 54); return new Object[][] { { att1, del1, upd1 }, { att2, del2, upd2 }, { att3, del3, upd3 }, { att3, upd3, upd3 } }; } /** * Create a AttrInfo and check the methods */ @Test(dataProvider = "attrInfo") public void attrInfo( AttributeValue att, ChangeNumber deleteTime, ChangeNumber updateTime) throws Exception { // Create an empty AttrInfo AttrInfo attrInfo1 = new AttrInfo(); // Check getLastUpdateTime setLastUpdateTime if (attrInfo1.getLastUpdateTime() != null) { assertTrue(false); } attrInfo1.setLastUpdateTime(updateTime); assertTrue(attrInfo1.getLastUpdateTime().compareTo(updateTime) == 0); // Check getDeleteTime setDeleteTime if (attrInfo1.getDeleteTime() != null) { assertTrue(false); } attrInfo1.setDeleteTime(deleteTime); assertTrue(attrInfo1.getDeleteTime().compareTo(deleteTime) == 0); // Check add(AttributeValue val, ChangeNumber CN) attrInfo1.add(att, updateTime); ArrayList<ValueInfo> values1 = attrInfo1.getValuesInfo(); assertTrue(values1.size() == 1); ValueInfo valueInfo1 = new ValueInfo(att, updateTime, null); assertTrue(values1.get(0).equals(valueInfo1)); // Check constructor with parameter ValueInfo valueInfo2 = new ValueInfo(att, updateTime, deleteTime); ArrayList<ValueInfo> values = new ArrayList<ValueInfo>(); values.add(valueInfo2); AttrInfo attrInfo2 = new AttrInfo(deleteTime, updateTime, values); // Check equality assertTrue(attrInfo1.getLastUpdateTime().compareTo( attrInfo2.getLastUpdateTime()) == 0); assertTrue(attrInfo1.getDeleteTime().compareTo(attrInfo2.getDeleteTime())==0); // Check constructor with time parameter and not Value AttrInfo attrInfo3 = new AttrInfo(deleteTime, updateTime, null); attrInfo3.add(att, updateTime); ArrayList<ValueInfo> values3 = attrInfo3.getValuesInfo(); assertTrue(values3.size() == 1); valueInfo1 = new ValueInfo(att, updateTime, null); assertTrue(values3.get(0).equals(valueInfo1)); // Check duplicate AttrInfo attrInfo4 = attrInfo3.duplicate(); ArrayList<ValueInfo> values4 = attrInfo4.getValuesInfo(); assertTrue(attrInfo4.getDeleteTime().compareTo(attrInfo3.getDeleteTime())==0); assertTrue(attrInfo4.getLastUpdateTime().compareTo( attrInfo3.getLastUpdateTime()) == 0); assertEquals(values4.size(), values3.size()); // Check delete(AttributeValue val, ChangeNumber CN) attrInfo4.delete(att, updateTime); assertTrue(attrInfo4.getValuesInfo().size() == 1); // Check delete(LinkedHashSet<AttributeValue> values, ChangeNumber CN) LinkedHashSet<AttributeValue> attVals = new LinkedHashSet<AttributeValue>(); attVals.add(att); attrInfo3.delete(attVals, updateTime) ; assertTrue(attrInfo3.getValuesInfo().size() == 1); // Check delete(ChangeNumber CN) attrInfo2.delete(updateTime) ; assertTrue(attrInfo2.getValuesInfo().size() == 0); } } opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ChangeNumberTest.java
New file @@ -0,0 +1,288 @@ /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at * trunk/opends/resource/legal-notices/OpenDS.LICENSE * or https://OpenDS.dev.java.net/OpenDS.LICENSE. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, * add the following below this CDDL HEADER, with the fields enclosed * by brackets "[]" replaced with your own identifying * information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Portions Copyright 2006 Sun Microsystems, Inc. */ package org.opends.server.synchronization; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import static org.testng.Assert.*; import org.opends.server.util.TimeThread; /** * Test ChangeNumber and ChangeNumberGenerator */ public class ChangeNumberTest extends SynchronizationTestCase { /** * Create ChangeNumber Data */ @DataProvider(name = "changeNumberData") public Object[][] createConstructorData() { return new Object[][] { {1, (short) 0, (short) 1}, {TimeThread.getTime(), (short) 123, (short) 45} }; } /** * Test ChangeNumber constructor */ @Test(dataProvider = "changeNumberData") public void CreateChangeNumber(long time, int seq, short id) throws Exception { // Create 2 ChangeNumber with the same data and check equality new ChangeNumber(time,seq,id); new ChangeNumber(time,seq,id); new ChangeNumber(time+1,seq,id) ; new ChangeNumber(time,seq+1,id) ; new ChangeNumber(time,seq,(short)(id+1)); assertTrue(true); } /** * Create ChangeNumber */ @DataProvider(name = "createChangeNumber") public Object[][] createChangeNumberData() { long time[] = {1, TimeThread.getTime()} ; short seq[] = {(short)0, (short) 123} ; short id [] = {(short)1, (short) 45} ; Object[][] obj = new Object[time.length][5]; for (int i=0; i<time.length; i++) { obj[i][0] = new ChangeNumber(time[i],seq[i],id[i]); obj[i][1] = new ChangeNumber(time[i],seq[i],id[i]); obj[i][2] = new ChangeNumber(time[i]+1,seq[i],id[i]); obj[i][3] = new ChangeNumber(time[i],seq[i]+1,id[i]); obj[i][4] = new ChangeNumber(time[i],seq[i],(short)(id[i]+1)); } return obj; } /** * Test ChangeNumber hashCode method */ @Test(dataProvider = "createChangeNumber") public void ChangeNumberhashCode( ChangeNumber cn1, ChangeNumber cn2, ChangeNumber cn3, ChangeNumber cn4, ChangeNumber cn5) throws Exception { // Check hashCode assertTrue (cn1.hashCode() == cn2.hashCode()); } /** * Test ChangeNumber equals method */ @Test(dataProvider = "createChangeNumber") public void ChangeNumberEquals( ChangeNumber cn1, ChangeNumber cn2, ChangeNumber cn3, ChangeNumber cn4, ChangeNumber cn5) throws Exception { // Check equals assertFalse(cn1.equals(new Object())); assertTrue (cn1.equals(cn1)); assertTrue (cn1.equals(cn2)); assertFalse(cn1.equals(cn3)); assertFalse(cn1.equals(cn4)); assertFalse(cn1.equals(cn5)); } /** * Test ChangeNumbergetTimeSec method */ @Test(dataProvider = "createChangeNumber") public void ChangeNumbergetTimeSec( ChangeNumber cn1, ChangeNumber cn2, ChangeNumber cn3, ChangeNumber cn4, ChangeNumber cn5) throws Exception { // Check time in sec assertEquals(cn1.getTime()/1000, cn1.getTimeSec()) ; assertEquals(cn2.getTime()/1000, cn2.getTimeSec()) ; assertEquals(cn3.getTime()/1000, cn3.getTimeSec()) ; assertEquals(cn4.getTime()/1000, cn4.getTimeSec()) ; assertEquals(cn5.getTime()/1000, cn5.getTimeSec()) ; } /** * Test ChangeNumber compare method */ @Test(dataProvider = "createChangeNumber") public void ChangeNumbercompare( ChangeNumber cn1, ChangeNumber cn2, ChangeNumber cn3, ChangeNumber cn4, ChangeNumber cn5) throws Exception { // Check compare assertTrue((ChangeNumber.compare(null, null) == 0)); assertTrue((ChangeNumber.compare(null, cn2) < 0)); assertTrue((ChangeNumber.compare(cn1, null) > 0)); assertTrue((ChangeNumber.compare(cn1, cn2) == 0)); assertTrue((ChangeNumber.compare(cn1, cn3) < 0)); assertTrue((ChangeNumber.compare(cn3, cn1) > 0)); assertTrue((ChangeNumber.compare(cn1, cn4) < 0)); assertTrue((ChangeNumber.compare(cn4, cn1) > 0)); assertTrue((ChangeNumber.compare(cn1, cn5) < 0)); assertTrue((ChangeNumber.compare(cn5, cn1) > 0)); } /** * Test ChangeNumber older method */ @Test(dataProvider = "createChangeNumber") public void ChangeNumberolder( ChangeNumber cn1, ChangeNumber cn2, ChangeNumber cn3, ChangeNumber cn4, ChangeNumber cn5) throws Exception { // Check older assertFalse(cn1.older(null)); assertFalse(cn1.older(cn1)); assertTrue(cn1.older(cn3)); assertTrue(cn1.older(cn4)); assertTrue(cn1.older(cn5)); } /** * Test ChangeNumber olderOrEqual method */ @Test(dataProvider = "createChangeNumber") public void ChangeNumberolderOrEqual( ChangeNumber cn1, ChangeNumber cn2, ChangeNumber cn3, ChangeNumber cn4, ChangeNumber cn5) throws Exception { // Check olderOrEqual assertFalse(cn1.olderOrEqual(null)); assertTrue(cn1.olderOrEqual(cn1)); assertTrue(cn1.olderOrEqual(cn3)); assertTrue(cn1.olderOrEqual(cn4)); assertTrue(cn1.olderOrEqual(cn5)); } /** * Test ChangeNumber newer method */ @Test(dataProvider = "createChangeNumber") public void ChangeNumbernewer( ChangeNumber cn1, ChangeNumber cn2, ChangeNumber cn3, ChangeNumber cn4, ChangeNumber cn5) throws Exception { // Check newer assertTrue(cn1.newer(null)); assertFalse(cn1.newer(cn1)); assertFalse(cn1.newer(cn3)); assertFalse(cn1.newer(cn4)); assertFalse(cn1.newer(cn5)); } /** * Test ChangeNumber newerOrEquals method */ @Test(dataProvider = "createChangeNumber") public void ChangeNumbernewerOrEquals( ChangeNumber cn1, ChangeNumber cn2, ChangeNumber cn3, ChangeNumber cn4, ChangeNumber cn5) throws Exception { // Check newerOrEquals assertTrue(cn1.newerOrEquals(null)); assertTrue(cn1.newerOrEquals(cn1)); assertFalse(cn1.newerOrEquals(cn3)); assertFalse(cn1.newerOrEquals(cn4)); assertFalse(cn1.newerOrEquals(cn5)); } /** * Create a ChangeNumberGenerator The call NewChangeNumber() and adjust() */ @Test public void changeNumberGenerator() throws Exception { ChangeNumber CN1; ChangeNumber CN2; // Generated the ChangeNumberGenerator object ChangeNumberGenerator cng = new ChangeNumberGenerator((short) 0, TimeThread.getTime()); // Generate 2 changeNumbers and check that they are differents CN1 = cng.NewChangeNumber(); CN2 = cng.NewChangeNumber(); assertTrue(CN1.compareTo(CN2) != 0); // Generate a changeNumber separates by 10 milliseconds // and check that they are differents Thread.currentThread().sleep(10); CN2 = cng.NewChangeNumber(); assertTrue(CN1.compareTo(CN2) != 0); // Generate a changeNumber separates by 300 milliseconds // and check that they are differents Thread.currentThread().sleep(300); CN2 = cng.NewChangeNumber(); assertTrue(CN1.compareTo(CN2) != 0); // Adjust with the oldest CN cng.adjust(CN1) ; CN2 = cng.NewChangeNumber(); assertTrue(CN1.compareTo(CN2) != 0 ); // Adjust with the newest generated cng.adjust(CN2) ; CN1 = CN2; CN2 = cng.NewChangeNumber(); assertTrue(CN1.compareTo(CN2) != 0 ); // Adjust with the newest generated (time + 300) CN1 = new ChangeNumber(CN2.getTime() +300 ,CN2.getSeqnum(), CN2.getServerId()) ; cng.adjust(CN1) ; CN2 = cng.NewChangeNumber(); assertTrue(CN1.compareTo(CN2) != 0 ); // Adjust with the newest generated (seqmun + 10) CN1 = new ChangeNumber(CN2.getTime() ,CN2.getSeqnum() +10, CN2.getServerId()) ; cng.adjust(CN1) ; CN2 = cng.NewChangeNumber(); assertTrue(CN1.compareTo(CN2) != 0 ); // Adjust with the newest generated (seqmun = 0XFFFF) CN1 = new ChangeNumber(CN2.getTime() ,0XFFFF +10,CN2.getServerId()) ; cng.adjust(CN1) ; CN2 = cng.NewChangeNumber(); assertTrue(CN1.compareTo(CN2) != 0 ); } } opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/SynchronizationMsgTest.java
@@ -29,6 +29,7 @@ import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.zip.DataFormatException; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; @@ -55,7 +56,7 @@ /** * Test the contructors, encoders and decoders of the synchronization * ModifyMsg, ModifyDnMsg, AddMsg and Delete Msg * AckMsg, ModifyMsg, ModifyDnMsg, AddMsg and Delete Msg */ public class SynchronizationMsgTest extends SynchronizationTestCase { @@ -279,4 +280,54 @@ assertEquals(msg.getBytes(), generatedMsg.getBytes()); // TODO : should test that generated attributes match original attributes. } /** * Build some data for the AckMsg test below. * @throws DirectoryException */ @DataProvider(name = "ackMsg") public Object[][] createAckData() { ChangeNumber cn1 = new ChangeNumber(1, (short) 0, (short) 1); ChangeNumber cn2 = new ChangeNumber(TimeThread.getTime(), (short) 123, (short) 45); return new Object[][] { {cn1}, {cn2} }; } @Test(dataProvider = "ackMsg") public void ackMsg(ChangeNumber cn) throws Exception { AckMessage msg1, msg2 ; // Consctructor test (with ChangeNumber) // Chech that retrieved CN is OK msg1 = new AckMessage(cn); assertEquals(msg1.getChangeNumber().compareTo(cn), 0); // Consctructor test (with byte[]) // Check that retrieved CN is OK msg2 = new AckMessage(msg1.getBytes()); assertEquals(msg2.getChangeNumber().compareTo(cn), 0); // Check invalid bytes for constructor byte[] b = msg1.getBytes(); b[0] = SynchronizationMessage.MSG_TYPE_ADD_REQUEST ; try { // This should generated an exception msg2 = new AckMessage(b); assertTrue(false); } catch (DataFormatException e) { assertTrue(true); } // Check that retrieved CN is OK msg2 = new AckMessage(msg1.getBytes()); } } opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ValueInfoTest.java
New file @@ -0,0 +1,120 @@ /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at * trunk/opends/resource/legal-notices/OpenDS.LICENSE * or https://OpenDS.dev.java.net/OpenDS.LICENSE. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, * add the following below this CDDL HEADER, with the fields enclosed * by brackets "[]" replaced with your own identifying * information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Portions Copyright 2006 Sun Microsystems, Inc. */ package org.opends.server.synchronization; import org.opends.server.core.DirectoryServer; import org.opends.server.types.AttributeType; import org.opends.server.types.AttributeValue; import org.opends.server.util.TimeThread; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import static org.testng.Assert.*; /** * Test of ValueInfo */ public class ValueInfoTest extends SynchronizationTestCase { /** * Build some data for the ValueInfo test below. */ @DataProvider(name = "valueInfo") public Object[][] createData() { AttributeType type = DirectoryServer.getAttributeType("description"); AttributeValue att1 = new AttributeValue(type, "string"); AttributeValue att2 = new AttributeValue(type, "value"); AttributeValue att3 = new AttributeValue(type, "again"); ChangeNumber del1 = new ChangeNumber(1, (short) 0, (short) 1); ChangeNumber del2 = new ChangeNumber(1, (short) 1, (short) 1); ChangeNumber del3 = new ChangeNumber(1, (short) 0, (short) 2); ChangeNumber upd1 = new ChangeNumber(TimeThread.getTime(), (short) 123, (short) 45); ChangeNumber upd2 = new ChangeNumber(TimeThread.getTime()+ 1000, (short) 123, (short) 45); ChangeNumber upd3 = new ChangeNumber(TimeThread.getTime(), (short) 321, (short) 54); return new Object[][] { {att1,null,null}, {att1,upd1,del1}, {att2,upd2,del2}, {att3,upd3,del3}}; } /** * Create a ValueInfo and check the methods */ @Test(dataProvider = "valueInfo") public void valueInfo(AttributeValue value, ChangeNumber CNupdate, ChangeNumber CNdelete) throws Exception { ValueInfo valInfo1 = new ValueInfo(value,CNupdate,CNdelete); ValueInfo valInfo2 = new ValueInfo(value,CNupdate,CNupdate); ValueInfo valInfo3 = new ValueInfo(new AttributeValue(null,"Test"), CNupdate,CNupdate); // Check equals assertFalse(valInfo1.equals(new Object())) ; assertTrue(valInfo1.equals(valInfo1)) ; assertTrue(valInfo1.equals(valInfo2)) ; assertFalse(valInfo1.equals(valInfo3)) ; // Check hashcode assertTrue(valInfo1.hashCode() == valInfo2.hashCode()) ; // Check getValueDeleteTime if (valInfo1.getValueDeleteTime() != null) { assertTrue(valInfo1.getValueDeleteTime().compareTo(CNdelete) == 0); } // Check getValueUpdateTime if (valInfo1.getValueUpdateTime() != null) { assertTrue(valInfo1.getValueUpdateTime().compareTo(CNupdate) == 0); } // Check getValue assertTrue(valInfo1.getValue().equals(value)) ; // Chek valueUpdateTime if (CNupdate == null) { assertFalse(valInfo1.isUpdate()); } else { assertTrue(valInfo1.isUpdate()); } } }