/* * The contents of this file are subject to the terms of the Common Development and * Distribution License (the License). You may not use this file except in compliance with the * License. * * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the * specific language governing permission and limitations under the License. * * When distributing Covered Software, include this CDDL Header Notice in each file and include * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL * Header, with the fields enclosed by brackets [] replaced by your own identifying * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2006-2010 Sun Microsystems, Inc. * Portions Copyright 2013-2016 ForgeRock AS. */ package org.opends.server.replication.common; import java.util.Set; import org.opends.server.replication.ReplicationTestCase; import org.opends.server.util.TimeThread; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import static org.testng.Assert.*; /** Test the ServerState. */ @SuppressWarnings("javadoc") public class ServerStateTest extends ReplicationTestCase { /** Create CSN Data. */ @DataProvider(name = "csnData") public Object[][] createCSNData() { return new Object[][] { {new CSN(1, 0, 1)}, {new CSN(TimeThread.getTime(), 123, 45)} }; } /** Create a new ServerState object. */ @Test(dataProvider = "csnData") public void serverStateTest(CSN csn) throws Exception { // Check constructor ServerState serverState = new ServerState() ; // Check Load // serverState.loadState() ; // TODO Check result; // Check update assertFalse(serverState.update((CSN)null)); assertTrue(serverState.update(csn)); assertFalse(serverState.update(csn)); CSN csn1 = new CSN(csn.getTime() + 1, csn.getSeqnum(), csn.getServerId()); CSN csn2 = new CSN(csn1.getTime(), csn1.getSeqnum() + 1, csn1.getServerId()); CSN csn3 = new CSN(csn2.getTime(), csn2.getSeqnum(), (csn2.getServerId() + 1)); assertTrue(serverState.update(csn1)); assertTrue(serverState.update(csn2)); assertTrue(serverState.update(csn3)); // Check toStringSet CSN[] csns = { csn2, csn3 }; Set stringSet = serverState.toStringSet(); assertEquals(csns.length, stringSet.size()); // TODO Check the value // Check getMaxCSN assertEquals(csn2.compareTo(serverState.getCSN(csn2.getServerId())), 0); assertEquals(csn3.compareTo(serverState.getCSN(csn3.getServerId())), 0); // Check the toString String stringRep = serverState.toString(); assertTrue(stringRep.contains(csn2.toString())); assertTrue(stringRep.contains(csn3.toString())); } @Test public void testCover() throws Exception { final CSN csn1Server1 = new CSN(1, 0, 1); final CSN csn2Server1 = new CSN(2, 0, 1); final CSN csn1Server2 = new CSN(1, 0, 2); final CSN csn0Server3 = new CSN(0, 0, 3); final ServerState state = new ServerState(); assertFalse(state.cover(csn1Server1)); assertFalse(state.cover(csn2Server1)); assertFalse(state.cover(csn1Server2)); assertFalse(state.cover(csn0Server3)); state.update(csn1Server1); assertTrue(state.cover(csn1Server1)); assertFalse(state.cover(csn2Server1)); assertFalse(state.cover(csn1Server2)); assertFalse(state.cover(csn0Server3)); state.update(csn1Server2); assertTrue(state.cover(csn1Server1)); assertFalse(state.cover(csn2Server1)); assertTrue(state.cover(csn1Server2)); assertFalse(state.cover(csn0Server3)); state.update(csn2Server1); assertTrue(state.cover(csn1Server1)); assertTrue(state.cover(csn2Server1)); assertTrue(state.cover(csn1Server2)); assertFalse(state.cover(csn0Server3)); } @Test public void testRemoveCSN() throws Exception { final CSN csn1Server1 = new CSN(1, 0, 1); final CSN csn2Server1 = new CSN(2, 0, 1); final CSN csn1Server2 = new CSN(1, 0, 2); final ServerState state = new ServerState(); assertTrue(state.update(csn1Server1)); // test 1 assertFalse(state.removeCSN(null)); // test 2 assertEquals(csn1Server1, state.getCSN(1)); assertFalse(state.removeCSN(csn2Server1)); assertEquals(csn1Server1, state.getCSN(1)); // test 3 assertNull(state.getCSN(2)); assertFalse(state.removeCSN(csn1Server2)); assertNull(state.getCSN(2)); // test 4 assertEquals(csn1Server1, state.getCSN(1)); assertTrue(state.removeCSN(csn1Server1)); assertNull(state.getCSN(1)); } }