/* * 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 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 ); } }