/*
* 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 legal-notices/CDDLv1_0.txt
* or http://forgerock.org/license/CDDLv1.0.html.
* 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 legal-notices/CDDLv1_0.txt.
* 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
*
*
* Copyright 2006-2009 Sun Microsystems, Inc.
* Portions Copyright 2013-2015 ForgeRock AS.
*/
package org.opends.server.replication.plugin;
import org.opends.server.replication.ReplicationTestCase;
import org.opends.server.replication.common.CSN;
import org.opends.server.replication.common.CSNGenerator;
import org.opends.server.replication.common.ServerState;
import org.opends.server.types.DN;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import static org.opends.server.TestCaseUtils.*;
import static org.testng.Assert.*;
/**
* Test the PersistentServerState class.
*/
@SuppressWarnings("javadoc")
public class PersistentServerStateTest extends ReplicationTestCase
{
/**
* The suffix for which we want to test the PersistentServerState class.
*/
@DataProvider(name = "suffix")
public Object[][] suffixData() {
return new Object[][] {
{TEST_ROOT_DN_STRING},
{"cn=schema"}
};
}
/**
* Test that the PersistentServerState class is able to store and
* retrieve ServerState to persistent storage.
*/
@Test(dataProvider = "suffix")
public void persistentServerStateTest(String dn) throws Exception
{
/*
* Create a new PersistentServerState,
* update it with 2 new csns with 2 different server Ids
* save it
*
* Then creates a new PersistentServerState and check that the
* 2 csns have been saved in this new PersistentServerState.
*/
DN baseDn = DN.valueOf(dn);
ServerState origState = new ServerState();
PersistentServerState state =
new PersistentServerState(baseDn, 1, origState);
CSNGenerator gen1 = new CSNGenerator(1, origState);
CSNGenerator gen2 = new CSNGenerator(2, origState);
CSN csn1 = gen1.newCSN();
CSN csn2 = gen2.newCSN();
assertEquals(state.update(csn1), true);
assertEquals(state.update(csn2), true);
state.save();
PersistentServerState stateSaved =
new PersistentServerState(baseDn, 1, new ServerState());
CSN csn1Saved = stateSaved.getMaxCSN(1);
CSN csn2Saved = stateSaved.getMaxCSN(2);
assertEquals(csn1Saved, csn1,
"csn1 has not been saved or loaded correctly for " + dn);
assertEquals(csn2Saved, csn2,
"csn2 has not been saved or loaded correctly for " + dn);
state.clear();
stateSaved = new PersistentServerState(baseDn, 1, new ServerState());
csn1Saved = stateSaved.getMaxCSN(1);
assertNull(csn1Saved, "csn1 has not been saved after clear for " + dn);
}
}