From 307509d87acb80ce1369a1c38e08ea6d8d4341e7 Mon Sep 17 00:00:00 2001
From: lutoff <lutoff@localhost>
Date: Wed, 06 Sep 2006 06:46:42 +0000
Subject: [PATCH] Add basic tests on synchronisation data structure
---
opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ValueInfoTest.java | 120 ++++++++++
opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/SynchronizationMsgTest.java | 53 ++++
opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ChangeNumberTest.java | 288 ++++++++++++++++++++++++++
opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/AttrInfoTest.java | 153 +++++++++++++
4 files changed, 613 insertions(+), 1 deletions(-)
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/AttrInfoTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/AttrInfoTest.java
new file mode 100644
index 0000000..0988362
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/AttrInfoTest.java
@@ -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);
+
+ }
+}
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ChangeNumberTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ChangeNumberTest.java
new file mode 100644
index 0000000..8dc5b64
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ChangeNumberTest.java
@@ -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 );
+ }
+}
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/SynchronizationMsgTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/SynchronizationMsgTest.java
index 74fdec7..bcc98c9 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/SynchronizationMsgTest.java
+++ b/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());
+ }
}
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ValueInfoTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ValueInfoTest.java
new file mode 100644
index 0000000..4a9f7a3
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ValueInfoTest.java
@@ -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());
+ }
+ }
+}
--
Gitblit v1.10.0