| | |
| | | */ |
| | | package org.opends.server.replication.protocol; |
| | | |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.math.BigInteger; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | import java.util.zip.DataFormatException; |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.opendj.ldap.ModificationType; |
| | |
| | | import org.testng.annotations.DataProvider; |
| | | import org.testng.annotations.Test; |
| | | |
| | | import static org.assertj.core.api.Assertions.*; |
| | | import static org.opends.messages.ReplicationMessages.*; |
| | | import static org.opends.server.TestCaseUtils.*; |
| | | import static org.opends.server.replication.protocol.OperationContext.*; |
| | |
| | | |
| | | short REPLICATION_PROTOCOL_VLAST = ProtocolVersion.getCurrentVersion(); |
| | | |
| | | /** |
| | | * Set up the environment for performing the tests in this Class. |
| | | * |
| | | * @throws Exception |
| | | * If the environment could not be set up. |
| | | */ |
| | | /** Set up the environment for performing the tests in this class. */ |
| | | @BeforeClass |
| | | @Override |
| | | public void setUp() throws Exception |
| | |
| | | super.setUp(); |
| | | } |
| | | |
| | | /** |
| | | * Clean up the environment. |
| | | * |
| | | * @throws Exception If the environment could not be set up. |
| | | */ |
| | | /** Clean up the environment. */ |
| | | @AfterClass |
| | | @Override |
| | | public void classCleanUp() throws Exception |
| | |
| | | } |
| | | |
| | | @DataProvider(name="createReplServerStartData") |
| | | public Object [][] createReplServerStartData() throws Exception |
| | | public Object[][] createReplServerStartData() throws Exception |
| | | { |
| | | DN baseDN = DN.valueOf("o=test"); |
| | | ServerState state = new ServerState(); |
| | | state.update(new CSN(0, 0,0)); |
| | | Object[] set1 = new Object[] {1, baseDN, 0, "localhost:8989", state, 0L, (byte)0, 0}; |
| | | final DN baseDN1 = DN.valueOf("o=test"); |
| | | final ServerState state1 = new ServerState(); |
| | | state1.update(new CSN(0, 0,0)); |
| | | |
| | | baseDN = DN.valueOf("dc=example,dc=com"); |
| | | state = new ServerState(); |
| | | state.update(new CSN(75, 5,263)); |
| | | Object[] set2 = new Object[] {16, baseDN, 100, "anotherHost:1025", state, 1245L, (byte)25, 3456}; |
| | | final DN baseDN2 = DN.valueOf("dc=example,dc=com"); |
| | | final ServerState state2 = new ServerState(); |
| | | state2.update(new CSN(75, 5,263)); |
| | | |
| | | return new Object [][] { set1, set2 }; |
| | | return new Object[][] |
| | | { |
| | | { 1, baseDN1, 0, "localhost:8989", state1, 0L, (byte) 0, 0}, |
| | | { 16, baseDN2, 100, "anotherHost:1025", state2, 1245L, (byte) 25, 3456}, |
| | | }; |
| | | } |
| | | |
| | | /** |
| | |
| | | // Entry attributes |
| | | Attribute eattr1 = Attributes.create("description", "eav description"); |
| | | Attribute eattr2 = Attributes.create("namingcontexts", "eav naming contexts"); |
| | | List<Attribute> entryAttrList = new ArrayList<Attribute>(); |
| | | entryAttrList.add(eattr1); |
| | | entryAttrList.add(eattr2); |
| | | List<Attribute> entryAttrList = newList(eattr1, eattr2); |
| | | |
| | | return new Object[][] { |
| | | {"dc=example,dc=com", false, AssuredMode.SAFE_DATA_MODE, (byte)0, null}, |
| | |
| | | |
| | | @Test(dataProvider = "createAddData") |
| | | public void addMsgTestVLASTV2(String rawDN, boolean isAssured, AssuredMode assuredMode, |
| | | byte safeDataLevel, List<Attribute> entryAttrList) |
| | | throws Exception |
| | | byte safeDataLevel, List<Attribute> entryAttrList) |
| | | throws Exception |
| | | { |
| | | // TODO: addMsgTest as soon as V3 will have any incompatibility with V2 |
| | | } |
| | | |
| | | @Test(dataProvider = "createAddData") |
| | | public void addMsgTestVLASTV1(String rawDN, boolean isAssured, AssuredMode assuredMode, |
| | | byte safeDataLevel, List<Attribute> entryAttrList) |
| | | throws Exception |
| | | byte safeDataLevel, List<Attribute> entryAttrList) |
| | | throws Exception |
| | | { |
| | | final DN dn = DN.valueOf(rawDN); |
| | | |
| | |
| | | objectClassList.put(DirectoryServer.getObjectClass("organization"), |
| | | "organization"); |
| | | |
| | | ArrayList<Attribute> userAttributes = new ArrayList<Attribute>(1); |
| | | Attribute attr = Attributes.create("o", "com"); |
| | | userAttributes.add(attr); |
| | | List<Attribute> userAttributes = newList(attr); |
| | | HashMap<AttributeType, List<Attribute>> userAttList = new HashMap<AttributeType, List<Attribute>>(); |
| | | userAttList.put(attr.getAttributeType(), userAttributes); |
| | | |
| | | |
| | | ArrayList<Attribute> operationalAttributes = new ArrayList<Attribute>(1); |
| | | attr = Attributes.create("creatorsName", "dc=creator"); |
| | | operationalAttributes.add(attr); |
| | | List<Attribute> operationalAttributes = newList(attr); |
| | | HashMap<AttributeType,List<Attribute>> opList= |
| | | new HashMap<AttributeType,List<Attribute>>(); |
| | | opList.put(attr.getAttributeType(), operationalAttributes); |
| | |
| | | assertEquals(msg.getSafeDataLevel(), vlastMsg.getSafeDataLevel()); |
| | | |
| | | // Get ECL entry attributes |
| | | ArrayList<RawAttribute> genAttrList = vlastMsg.getEclIncludes(); |
| | | if (entryAttrList==null) |
| | | assertTrue(genAttrList.size()==0); |
| | | else |
| | | { |
| | | assertTrue(genAttrList.size()==entryAttrList.size()); |
| | | int i=0; |
| | | for (Attribute eattr : entryAttrList) |
| | | { |
| | | assertTrue(eattr.getName().equalsIgnoreCase(genAttrList.get(i).toAttribute().getName())); |
| | | assertTrue(eattr.toString().equalsIgnoreCase(genAttrList.get(i).toAttribute().toString()), |
| | | "Comparing: " + eattr + " and " + genAttrList.get(i).toAttribute()); |
| | | i++; |
| | | } |
| | | } |
| | | assertAttributesEqual(vlastMsg.getEclIncludes(), entryAttrList); |
| | | |
| | | // Create an add operation from each message to compare attributes (kept encoded in messages) |
| | | op = msg.createOperation(connection, dn); |
| | |
| | | assertEquals(addOpBasis.getUserAttributes(), genAddOpBasis.getUserAttributes()); |
| | | } |
| | | |
| | | private void assertAttributesEqual(List<RawAttribute> actualAttrs, |
| | | List<Attribute> expectedAttrs) throws LDAPException |
| | | { |
| | | if (expectedAttrs == null) |
| | | { |
| | | assertThat(actualAttrs).isEmpty(); |
| | | } |
| | | else |
| | | { |
| | | assertThat(actualAttrs).hasSize(expectedAttrs.size()); |
| | | for (int i = 0; i < expectedAttrs.size(); i++) |
| | | { |
| | | final Attribute expectedAttr = expectedAttrs.get(i); |
| | | final Attribute actualAttr = actualAttrs.get(i).toAttribute(); |
| | | |
| | | assertTrue(expectedAttr.getName().equalsIgnoreCase(actualAttr.getName())); |
| | | assertTrue(expectedAttr.toString().equalsIgnoreCase(actualAttr.toString()), |
| | | "Comparing: " + expectedAttr + " and " + actualAttr); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Build some data for the DeleteMsg test below. |
| | | */ |
| | |
| | | // Entry attributes |
| | | Attribute eattr1 = Attributes.create("description", "eav description"); |
| | | Attribute eattr2 = Attributes.create("namingcontexts", "eav naming contexts"); |
| | | List<Attribute> entryAttrList = new ArrayList<Attribute>(); |
| | | entryAttrList.add(eattr1); |
| | | entryAttrList.add(eattr2); |
| | | List<Attribute> entryAttrList = newList(eattr1, eattr2); |
| | | |
| | | return new Object[][] { |
| | | {"dc=example,dc=com", false, AssuredMode.SAFE_DATA_MODE, (byte)0, null}, |
| | |
| | | */ |
| | | @Test(dataProvider = "createDeleteData") |
| | | public void deleteMsgTestVLASTV2(String rawDN, boolean isAssured, AssuredMode assuredMode, |
| | | byte safeDataLevel, List<Attribute> entryAttrList) |
| | | throws Exception |
| | | byte safeDataLevel, List<Attribute> entryAttrList) |
| | | throws Exception |
| | | { |
| | | // TODO: deleteMsgTestVLASTV2 as soon as V3 will have any incompatibility with V2 |
| | | } |
| | |
| | | */ |
| | | @Test(dataProvider = "createDeleteData") |
| | | public void deleteMsgTestVLASTV1(String rawDN, boolean isAssured, AssuredMode assuredMode, |
| | | byte safeDataLevel, List<Attribute> entryAttrList) |
| | | throws Exception |
| | | byte safeDataLevel, List<Attribute> entryAttrList) |
| | | throws Exception |
| | | { |
| | | final DN dn = DN.valueOf(rawDN); |
| | | |
| | |
| | | assertEquals(msg.getSafeDataLevel(), vlastMsg.getSafeDataLevel()); |
| | | |
| | | // Get ECL entry attributes |
| | | ArrayList<RawAttribute> genAttrList = vlastMsg.getEclIncludes(); |
| | | if (entryAttrList==null) |
| | | assertTrue(genAttrList.size()==0); |
| | | else |
| | | { |
| | | assertTrue(genAttrList.size()==entryAttrList.size()); |
| | | int i=0; |
| | | for (Attribute attr : entryAttrList) |
| | | { |
| | | assertTrue(attr.getName().equalsIgnoreCase(genAttrList.get(i).toAttribute().getName())); |
| | | assertTrue(attr.toString().equalsIgnoreCase(genAttrList.get(i).toAttribute().toString()), |
| | | "Comparing: " + attr + " and " + genAttrList.get(i).toAttribute()); |
| | | i++; |
| | | } |
| | | } |
| | | assertAttributesEqual(vlastMsg.getEclIncludes(), entryAttrList); |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | Attribute attr1 = Attributes.create("description", "new value"); |
| | | Modification mod1 = new Modification(ModificationType.REPLACE, attr1); |
| | | List<Modification> mods1 = new ArrayList<Modification>(); |
| | | mods1.add(mod1); |
| | | List<Modification> mods1 = newList(mod1); |
| | | |
| | | Attribute attr2 = Attributes.empty("description"); |
| | | Modification mod2 = new Modification(ModificationType.DELETE, attr2); |
| | | List<Modification> mods2 = new ArrayList<Modification>(); |
| | | mods2.add(mod1); |
| | | mods2.add(mod2); |
| | | List<Modification> mods2 = newList(mod1, mod2); |
| | | |
| | | AttributeBuilder builder = new AttributeBuilder(type); |
| | | List<Modification> mods3 = new ArrayList<Modification>(); |
| | | builder.add("string"); |
| | | builder.add("value"); |
| | | builder.add("again"); |
| | | Attribute attr3 = builder.toAttribute(); |
| | | Modification mod3 = new Modification(ModificationType.ADD, attr3); |
| | | mods3.add(mod3); |
| | | List<Modification> mods3 = newList(mod3); |
| | | |
| | | List<Modification> mods4 = new ArrayList<Modification>(); |
| | | for (int i = 0; i < 10; i++) |
| | | { |
| | | Attribute attr = Attributes.create("description", "string" |
| | | + String.valueOf(i)); |
| | | Modification mod = new Modification(ModificationType.ADD, attr); |
| | | mods4.add(mod); |
| | | Attribute attr = Attributes.create("description", "string" + i); |
| | | mods4.add(new Modification(ModificationType.ADD, attr)); |
| | | } |
| | | |
| | | Attribute attr5 = Attributes.create("namingcontexts", "o=test"); |
| | | Modification mod5 = new Modification(ModificationType.REPLACE, attr5); |
| | | List<Modification> mods5 = new ArrayList<Modification>(); |
| | | mods5.add(mod5); |
| | | List<Modification> mods5 = newList(mod5); |
| | | |
| | | // Entry attributes |
| | | Attribute eattr1 = Attributes.create("description", "eav description"); |
| | | Attribute eattr2 = Attributes.create("namingcontexts", "eav naming contexts"); |
| | | List<Attribute> entryAttrList = new ArrayList<Attribute>(); |
| | | entryAttrList.add(eattr1); |
| | | entryAttrList.add(eattr2); |
| | | List<Attribute> entryAttrList = newList(eattr1, eattr2); |
| | | |
| | | return new Object[][] { |
| | | { csn1, "dc=test", mods1, false, AssuredMode.SAFE_DATA_MODE, (byte) 0, null }, |
| | |
| | | assertEquals(origVlastMsg.getSafeDataLevel(), generatedVlastMsg.getSafeDataLevel()); |
| | | assertEquals(origVlastMsg.getSafeDataLevel(), generatedVlastMsg.getSafeDataLevel()); |
| | | // Get ECL entry attributes |
| | | ArrayList<RawAttribute> genAttrList = generatedVlastMsg.getEclIncludes(); |
| | | if (entryAttrList==null) |
| | | assertTrue(genAttrList.size()==0); |
| | | else |
| | | { |
| | | assertTrue(genAttrList.size()==entryAttrList.size()); |
| | | int i=0; |
| | | for (Attribute attr : entryAttrList) |
| | | { |
| | | assertTrue(attr.getName().equalsIgnoreCase(genAttrList.get(i).toAttribute().getName())); |
| | | assertTrue(attr.toString().equalsIgnoreCase(genAttrList.get(i).toAttribute().toString()), |
| | | "Comparing: " + attr + " and " + genAttrList.get(i).toAttribute()); |
| | | i++; |
| | | } |
| | | } |
| | | assertAttributesEqual(generatedVlastMsg.getEclIncludes(), entryAttrList); |
| | | |
| | | // Create a modify operation from each message to compare mods (kept encoded in messages) |
| | | opFromOrigVlast = origVlastMsg.createOperation(connection); |
| | |
| | | |
| | | Attribute attr1 = Attributes.create("description", "new value"); |
| | | Modification mod1 = new Modification(ModificationType.REPLACE, attr1); |
| | | List<Modification> mods1 = new ArrayList<Modification>(); |
| | | mods1.add(mod1); |
| | | List<Modification> mods1 = newList(mod1); |
| | | |
| | | Attribute attr2 = Attributes.empty("description"); |
| | | Modification mod2 = new Modification(ModificationType.DELETE, attr2); |
| | | List<Modification> mods2 = new ArrayList<Modification>(); |
| | | mods2.add(mod1); |
| | | mods2.add(mod2); |
| | | List<Modification> mods2 = newList(mod1, mod2); |
| | | |
| | | AttributeBuilder builder = new AttributeBuilder(type); |
| | | List<Modification> mods3 = new ArrayList<Modification>(); |
| | | builder.add("string"); |
| | | builder.add("value"); |
| | | builder.add("again"); |
| | | Attribute attr3 = builder.toAttribute(); |
| | | Modification mod3 = new Modification(ModificationType.ADD, attr3); |
| | | mods3.add(mod3); |
| | | List<Modification> mods3 = newList(mod3); |
| | | |
| | | List<Modification> mods4 = new ArrayList<Modification>(); |
| | | for (int i = 0; i < 10; i++) |
| | | { |
| | | Attribute attr = Attributes.create("description", "string" |
| | | + String.valueOf(i)); |
| | | Modification mod = new Modification(ModificationType.ADD, attr); |
| | | mods4.add(mod); |
| | | Attribute attr = Attributes.create("description", "string" + i); |
| | | mods4.add(new Modification(ModificationType.ADD, attr)); |
| | | } |
| | | |
| | | // Entry attributes |
| | | Attribute eattr1 = Attributes.create("description", "eav description"); |
| | | Attribute eattr2 = Attributes.create("namingcontexts", "eav naming contexts"); |
| | | List<Attribute> entryAttrList = new ArrayList<Attribute>(); |
| | | entryAttrList.add(eattr1); |
| | | entryAttrList.add(eattr2); |
| | | List<Attribute> entryAttrList = newList(eattr1, eattr2); |
| | | |
| | | return new Object[][] { |
| | | {"dc=test,dc=com", "dc=new", "11111111-1111-1111-1111-111111111111", "22222222-2222-2222-2222-222222222222", false, "dc=change", mods1, false, AssuredMode.SAFE_DATA_MODE, (byte)0, null}, |
| | |
| | | assertEquals(msg.deleteOldRdn(), vlastMsg.deleteOldRdn()); |
| | | |
| | | // Get ECL entry attributes |
| | | ArrayList<RawAttribute> genAttrList = vlastMsg.getEclIncludes(); |
| | | if (entryAttrList==null) |
| | | assertTrue(genAttrList.size()==0); |
| | | else |
| | | { |
| | | assertTrue(genAttrList.size()==entryAttrList.size()); |
| | | int i=0; |
| | | for (Attribute attr : entryAttrList) |
| | | { |
| | | assertTrue(attr.getName().equalsIgnoreCase(genAttrList.get(i).toAttribute().getName())); |
| | | assertTrue(attr.toString().equalsIgnoreCase(genAttrList.get(i).toAttribute().toString()), |
| | | "Comparing: " + attr + " and " + genAttrList.get(i).toAttribute()); |
| | | i++; |
| | | } |
| | | } |
| | | assertAttributesEqual(vlastMsg.getEclIncludes(), entryAttrList); |
| | | |
| | | // Create a modDn operation from each message to compare mods (kept encoded in messages) |
| | | op = msg.createOperation(connection); |
| | |
| | | * |
| | | * The data provider generates arguments containing a pre-formatted |
| | | * UpdateMsg and the corresponding data. |
| | | * |
| | | */ |
| | | @Test(dataProvider = "createOldUpdateData") |
| | | public void createOldUpdate( |
| | | String encodedString, Class<?> msgType, CSN csn, String dn) |
| | | throws UnsupportedEncodingException, DataFormatException, |
| | | NotSupportedOldVersionPDUException, DirectoryException |
| | | public void createOldUpdate(String encodedString, Class<?> msgType, CSN csn, String dn) |
| | | throws Exception |
| | | { |
| | | LDAPUpdateMsg msg = (LDAPUpdateMsg) ReplicationMsg.generateMsg( |
| | | hexStringToByteArray(encodedString), ProtocolVersion.REPLICATION_PROTOCOL_V3); |
| | |
| | | @DataProvider(name = "createoldAckMsgData") |
| | | public Object[][] createoldAckMsgData() |
| | | { |
| | | ArrayList<Integer> fservers4 = new ArrayList<Integer>(); |
| | | fservers4.add(new Integer(100)); |
| | | fservers4.add(new Integer(2000)); |
| | | fservers4.add(new Integer(30000)); |
| | | List<Integer> fservers4 = newList(100, 2000, 30000); |
| | | |
| | | return new Object[][] { |
| | | {"05303030303031323366316535383832383030326430303030303037" + |
| | |
| | | |
| | | @Test(dataProvider = "createStartSessionData") |
| | | public void oldStartSessionPDUs(String pdu, ServerStatus status, |
| | | boolean assured, AssuredMode assuredMode, byte level) |
| | | throws Exception |
| | | boolean assured, AssuredMode assuredMode, byte level) throws Exception |
| | | { |
| | | StartSessionMsg msg = new StartSessionMsg(hexStringToByteArray(pdu), |
| | | ProtocolVersion.REPLICATION_PROTOCOL_V3); |
| | |
| | | } |
| | | |
| | | @DataProvider |
| | | public Object [][] createTopologyData() throws Exception |
| | | public Object[][] createTopologyData() throws Exception |
| | | { |
| | | List<String> urls1 = newList( |
| | | "ldap://ldap.iplanet.com/o=test??sub?(sn=Jensen)", |
| | |
| | | } |
| | | |
| | | @DataProvider(name="createEntryMsgData") |
| | | public Object [][] createEntryMsgData() throws Exception |
| | | public Object[][] createEntryMsgData() throws Exception |
| | | { |
| | | int sid = 1; |
| | | int dest = 2; |
| | |
| | | } |
| | | |
| | | @DataProvider(name="createErrorMsgData") |
| | | public Object [][] createErrorMsgData() throws Exception |
| | | public Object[][] createErrorMsgData() throws Exception |
| | | { |
| | | int sender = 1; |
| | | int dest = 2; |
| | |
| | | */ |
| | | @Test(enabled=true, dataProvider="createErrorMsgData") |
| | | public void errorMsgTestVLASTV3(int sender, int dest, LocalizableMessage message) |
| | | throws Exception |
| | | throws Exception |
| | | { |
| | | // Create VLAST message |
| | | ErrorMsg msg = new ErrorMsg(sender, dest, message); |
| | |
| | | } |
| | | |
| | | @DataProvider(name="createInitializationRequestMsgData") |
| | | public Object [][] createInitializationRequestMsgData() throws Exception |
| | | public Object[][] createInitializationRequestMsgData() throws Exception |
| | | { |
| | | int sender = 1; |
| | | int dest = 2; |
| | | DN baseDN = DN.valueOf("dc=whatever"); |
| | | int initWindow = 22; |
| | | Object[] set1 = new Object[] { sender, dest, baseDN, initWindow }; |
| | | return new Object [][] { set1}; |
| | | return new Object[][] |
| | | { |
| | | { sender, dest, baseDN, initWindow }, |
| | | }; |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | @DataProvider(name="createInitializeTargetMsgData") |
| | | public Object [][] createInitializeTargetMsgData() throws Exception |
| | | public Object[][] createInitializeTargetMsgData() throws Exception |
| | | { |
| | | int sender = 1; |
| | | int dest = 2; |
| | |
| | | DN baseDN = DN.valueOf("dc=whatever"); |
| | | int entryCount = 56; |
| | | int initWindow = 22; |
| | | Object[] set1 = new Object[] {sender, dest, initiator, baseDN, entryCount, initWindow }; |
| | | return new Object [][] { set1}; |
| | | return new Object[][] |
| | | { |
| | | { sender, dest, initiator, baseDN, entryCount, initWindow }, |
| | | }; |
| | | } |
| | | |
| | | /** |
| | |
| | | @Test(enabled=true, dataProvider="createInitializeTargetMsgData") |
| | | public void initializeTargetMsgTestVLASTV3(int sender, int dest, |
| | | int initiator, DN baseDN, int entryCount, int initWindow) |
| | | throws Exception |
| | | throws Exception |
| | | { |
| | | // Create VLAST message |
| | | InitializeTargetMsg msg = new InitializeTargetMsg(baseDN, sender, dest, |
| | |
| | | 1, 2}}; |
| | | } |
| | | @Test(dataProvider = "createEntryMsgV3") |
| | | public void entryMsgPDUV3( |
| | | String pduV3, int dest, int sender) throws Exception |
| | | public void entryMsgPDUV3(String pduV3, int dest, int sender) throws Exception |
| | | { |
| | | // this msg is changed by V4, so we want to test that V>3 server can |
| | | // build a V>3 version when it receives a V3 PDU from a V3 server. |
| | | EntryMsg msg = new EntryMsg(hexStringToByteArray(pduV3), |
| | | ProtocolVersion.REPLICATION_PROTOCOL_V3); |
| | | assertEquals(msg.getDestination(), dest, "Expected:" + dest); |
| | | assertEquals(msg.getSenderID(), sender, "Expected:" + sender); |
| | | assertEquals(msg.getMsgId(), -1, "Expected:-1"); |
| | | assertEquals(msg.getDestination(), dest); |
| | | assertEquals(msg.getSenderID(), sender); |
| | | assertEquals(msg.getMsgId(), -1); |
| | | // we should test EntryBytes |
| | | } |
| | | |
| | |
| | | // build a V>3 version when it receives a V3 PDU from a V3 server. |
| | | ErrorMsg msg = new ErrorMsg(hexStringToByteArray(pduV3), |
| | | ProtocolVersion.REPLICATION_PROTOCOL_V3); |
| | | assertEquals(msg.getDestination(), 9, "Expected:"+9); |
| | | assertEquals(msg.getSenderID(), 8, "Expected:"+8); |
| | | assertTrue(0==msg.getDetails().toString().compareTo(errorDetails)); |
| | | assertEquals(msg.getDestination(), dest); |
| | | assertEquals(msg.getSenderID(), sender); |
| | | assertEquals(msg.getDetails().toString(), errorDetails); |
| | | } |
| | | |
| | | @DataProvider(name = "initializeTargetMsgV3") |
| | |
| | | assertEquals(msg.getCSN(), generatedMsg.getCSN()); |
| | | |
| | | // Get ECL entry attributes |
| | | assertAttributesEqual(entryAttrList, generatedMsg.getEclIncludes()); |
| | | assertAttributesEqual(generatedMsg.getEclIncludes(), entryAttrList); |
| | | |
| | | ModifyOperation mod1 = (ModifyOperation) msg.createOperation(connection); |
| | | ModifyOperation mod2 = (ModifyOperation) generatedMsg.createOperation(connection); |
| | |
| | | assertEquals(generatedMsg.isSubtreeDelete(), subtree); |
| | | |
| | | // Get ECL entry attributes |
| | | assertAttributesEqual(entryAttrList, generatedMsg.getEclIncludes()); |
| | | assertAttributesEqual(generatedMsg.getEclIncludes(), entryAttrList); |
| | | |
| | | DeleteOperation mod2 = (DeleteOperation) generatedMsg.createOperation(connection); |
| | | assertEquals(mod2.getRequestControl(SubtreeDeleteControl.DECODER) != null, subtree); |
| | |
| | | List<Modification> mods4 = new ArrayList<Modification>(); |
| | | for (int i = 0; i < 10; i++) |
| | | { |
| | | Attribute attr = Attributes.create("description", "string" |
| | | + String.valueOf(i)); |
| | | Modification mod = new Modification(ModificationType.ADD, attr); |
| | | mods4.add(mod); |
| | | Attribute attr = Attributes.create("description", "string" + i); |
| | | mods4.add(new Modification(ModificationType.ADD, attr)); |
| | | } |
| | | |
| | | List<Attribute> entryAttrList = getEntryAttributes(); |
| | |
| | | { |
| | | InternalClientConnection connection = |
| | | InternalClientConnection.getRootConnection(); |
| | | ModifyDNOperation op = |
| | | new ModifyDNOperationBasis(connection, 1, 1, null, |
| | | ModifyDNOperation op = new ModifyDNOperationBasis(connection, 1, 1, null, |
| | | DN.valueOf(rawDN), RDN.decode(newRdn), deleteOldRdn, |
| | | (newSuperior.length() != 0 ? DN.valueOf(newSuperior) : null)); |
| | | |
| | |
| | | LocalBackendModifyDNOperation localOp = |
| | | new LocalBackendModifyDNOperation(op); |
| | | for (Modification mod : mods) |
| | | { |
| | | localOp.addModification(mod); |
| | | ModifyDNMsg msg = new ModifyDNMsg(localOp); |
| | | } |
| | | |
| | | ModifyDNMsg msg = new ModifyDNMsg(localOp); |
| | | msg.setAssured(isAssured); |
| | | msg.setAssuredMode(assuredMode); |
| | | msg.setSafeDataLevel(safeDataLevel); |
| | |
| | | assertEquals(generatedMsg.getSafeDataLevel(), safeDataLevel); |
| | | |
| | | // Get ECL entry attributes |
| | | assertAttributesEqual(entryAttrList, generatedMsg.getEclIncludes()); |
| | | assertAttributesEqual(generatedMsg.getEclIncludes(), entryAttrList); |
| | | |
| | | ModifyDNOperation moddn1 = (ModifyDNOperation) msg.createOperation(connection); |
| | | ModifyDNOperation moddn2 = (ModifyDNOperation) generatedMsg.createOperation(connection); |
| | |
| | | AddMsg msg = new AddMsg(csn, dn, "thisIsaUniqueID", "parentUniqueId", |
| | | objectClass, userAttributes, |
| | | operationalAttributes); |
| | | |
| | | msg.setAssured(isAssured); |
| | | msg.setAssuredMode(assuredMode); |
| | | msg.setSafeDataLevel(safeDataLevel); |
| | |
| | | assertEquals(generatedMsg.getSafeDataLevel(), safeDataLevel); |
| | | |
| | | // Get ECL entry attributes |
| | | assertAttributesEqual(entryAttrList, generatedMsg.getEclIncludes()); |
| | | assertAttributesEqual(generatedMsg.getEclIncludes(), entryAttrList); |
| | | |
| | | // Create an new Add Operation from the current addMsg |
| | | InternalClientConnection connection = |
| | |
| | | localAddOp.setAttachment(SYNCHROCONTEXT, opCtx); |
| | | |
| | | generatedMsg = new AddMsg(localAddOp); |
| | | |
| | | generatedMsg.setAssured(isAssured); |
| | | generatedMsg.setAssuredMode(assuredMode); |
| | | generatedMsg.setSafeDataLevel(safeDataLevel); |
| | |
| | | assertEquals(msg.getCSN(), updateMsg.getCSN()); |
| | | } |
| | | |
| | | private void assertAttributesEqual(List<Attribute> entryAttrList, |
| | | List<RawAttribute> genAttrList) throws LDAPException |
| | | private void assertAttributesEqual(List<RawAttribute> actualAttrs, |
| | | List<Attribute> expectedAttrs) throws LDAPException |
| | | { |
| | | if (entryAttrList == null) |
| | | if (expectedAttrs == null) |
| | | { |
| | | assertEquals(genAttrList.size(), 0); |
| | | Assertions.assertThat(actualAttrs).isEmpty(); |
| | | return; |
| | | } |
| | | |
| | | assertEquals(genAttrList.size(), entryAttrList.size()); |
| | | int i = 0; |
| | | for (Attribute eattr : entryAttrList) |
| | | Assertions.assertThat(actualAttrs).hasSize(expectedAttrs.size()); |
| | | for (int i = 0; i < expectedAttrs.size(); i++) |
| | | { |
| | | final Attribute genAttr = genAttrList.get(i).toAttribute(); |
| | | assertTrue(eattr.getName().equalsIgnoreCase(genAttr.getName())); |
| | | assertTrue(eattr.toString().equalsIgnoreCase(genAttr.toString()), |
| | | "Comparing: " + eattr + " and " + genAttr); |
| | | i++; |
| | | final Attribute expectedAttr = expectedAttrs.get(i); |
| | | final Attribute actualAttr = actualAttrs.get(i).toAttribute(); |
| | | |
| | | assertTrue(expectedAttr.getName().equalsIgnoreCase(actualAttr.getName())); |
| | | assertTrue(expectedAttr.toString().equalsIgnoreCase(actualAttr.toString()), |
| | | "Comparing: " + expectedAttr + " and " + actualAttr); |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | // This should generated an exception |
| | | msg2 = new AckMsg(b); |
| | | assertTrue(false); |
| | | fail("Expected DataFormatException"); |
| | | } |
| | | catch (DataFormatException e) |
| | | catch (DataFormatException expected) |
| | | { |
| | | assertTrue(true); |
| | | } |
| | | |
| | | // Check that retrieved CSN is OK |
| | |
| | | } |
| | | |
| | | @DataProvider(name="createServerStartData") |
| | | public Object [][] createServerStartData() throws Exception |
| | | public Object[][] createServerStartData() throws Exception |
| | | { |
| | | DN baseDN = TEST_ROOT_DN; |
| | | ServerState state = new ServerState(); |
| | | state.update(new CSN(0, 0,0)); |
| | | Object[] set1 = new Object[] {1, baseDN, 0, state, 0L, false, (byte)0}; |
| | | |
| | | state = new ServerState(); |
| | | state.update(new CSN(75, 5,263)); |
| | | Object[] set2 = new Object[] {16, baseDN, 100, state, 1248L, true, (byte)31}; |
| | | final ServerState state1 = new ServerState(); |
| | | state1.update(new CSN(0, 0,0)); |
| | | final ServerState state2 = new ServerState(); |
| | | state2.update(new CSN(75, 5,263)); |
| | | final ServerState state3 = new ServerState(); |
| | | state3.update(new CSN(75, 98573895,45263)); |
| | | |
| | | state = new ServerState(); |
| | | state.update(new CSN(75, 98573895,45263)); |
| | | Object[] set3 = new Object[] {16, baseDN, 100, state, 1248L, true, (byte)31}; |
| | | |
| | | return new Object [][] { set1, set2, set3 }; |
| | | return new Object[][] |
| | | { |
| | | { 1, baseDN, 0, state1, 0L, false, (byte) 0 }, |
| | | { 16, baseDN, 100, state2, 1248L, true, (byte)31 }, |
| | | { 16, baseDN, 100, state3, 1248L, true, (byte)31 } |
| | | }; |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | @DataProvider(name="createReplServerStartData") |
| | | public Object [][] createReplServerStartData() throws Exception |
| | | public Object[][] createReplServerStartData() throws Exception |
| | | { |
| | | DN baseDN = TEST_ROOT_DN; |
| | | ServerState state = new ServerState(); |
| | | state.update(new CSN(0, 0,0)); |
| | | Object[] set1 = new Object[] {1, baseDN, 0, "localhost:8989", state, 0L, (byte)0, 0}; |
| | | |
| | | state = new ServerState(); |
| | | state.update(new CSN(75, 5,263)); |
| | | Object[] set2 = new Object[] {16, baseDN, 100, "anotherHost:1025", state, 1245L, (byte)25, 3456}; |
| | | final ServerState state1 = new ServerState(); |
| | | state1.update(new CSN(0, 0,0)); |
| | | final ServerState state2 = new ServerState(); |
| | | state2.update(new CSN(75, 5,263)); |
| | | final ServerState state3 = new ServerState(); |
| | | state3.update(new CSN(75, 5, 45263)); |
| | | |
| | | state = new ServerState(); |
| | | state.update(new CSN(75, 5, 45263)); |
| | | Object[] set3 = new Object[] {16, baseDN, 100, "anotherHost:1025", state, 1245L, (byte)25, 3456}; |
| | | |
| | | return new Object [][] { set1, set2, set3 }; |
| | | return new Object[][] |
| | | { |
| | | {1, baseDN, 0, "localhost:8989", state1, 0L, (byte)0, 0}, |
| | | {16, baseDN, 100, "anotherHost:1025", state2, 1245L, (byte)25, 3456}, |
| | | {16, baseDN, 100, "anotherHost:1025", state3, 1245L, (byte)25, 3456}, |
| | | }; |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | @DataProvider(name="createReplServerStartDSData") |
| | | public Object [][] createReplServerStartDSData() throws Exception |
| | | public Object[][] createReplServerStartDSData() throws Exception |
| | | { |
| | | DN baseDN = TEST_ROOT_DN; |
| | | ServerState state = new ServerState(); |
| | | state.update(new CSN(0, 0, 0)); |
| | | Object[] set1 = new Object[] {1, baseDN, 0, "localhost:8989", state, 0L, (byte)0, 0, 0, 0}; |
| | | |
| | | state = new ServerState(); |
| | | state.update(new CSN(75, 5, 263)); |
| | | Object[] set2 = new Object[] {16, baseDN, 100, "anotherHost:1025", state, 1245L, (byte)25, 3456, 3, 31512}; |
| | | final ServerState state1 = new ServerState(); |
| | | state1.update(new CSN(0, 0, 0)); |
| | | final ServerState state2 = new ServerState(); |
| | | state2.update(new CSN(75, 5, 263)); |
| | | final ServerState state3 = new ServerState(); |
| | | state3.update(new CSN(123, 5, 98)); |
| | | |
| | | state = new ServerState(); |
| | | state.update(new CSN(123, 5, 98)); |
| | | Object[] set3 = new Object[] {36, baseDN, 100, "anotherHostAgain:8017", state, 6841L, (byte)32, 2496, 630, 9524}; |
| | | |
| | | return new Object [][] { set1, set2, set3 }; |
| | | return new Object[][] |
| | | { |
| | | {1, baseDN, 0, "localhost:8989", state1, 0L, (byte)0, 0, 0, 0}, |
| | | {16, baseDN, 100, "anotherHost:1025", state2, 1245L, (byte)25, 3456, 3, 31512}, |
| | | {36, baseDN, 100, "anotherHostAgain:8017", state3, 6841L, (byte)32, 2496, 630, 9524}, |
| | | }; |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | // RS State |
| | | ServerState rsState = new ServerState(); |
| | | CSN rsCSN1 = new CSN(1, 1, 1); |
| | | CSN rsCSN2 = new CSN(1, 1, 45678); |
| | | rsState.update(rsCSN1); |
| | | rsState.update(rsCSN2); |
| | | rsState.update(new CSN(1, 1, 1)); |
| | | rsState.update(new CSN(1, 1, 45678)); |
| | | |
| | | // LS1 state |
| | | ServerState s1 = new ServerState(); |
| | | int sid1 = 111; |
| | | CSN csn1 = new CSN(1, 1, sid1); |
| | | s1.update(csn1); |
| | | s1.update(new CSN(1, 1, sid1)); |
| | | |
| | | // LS2 state |
| | | ServerState s2 = new ServerState(); |
| | | int sid2 = 222; |
| | | Long now = ((Integer)10).longValue(); |
| | | CSN csn2 = new CSN(now, 123, sid2); |
| | | s2.update(csn2); |
| | | long now = 10; |
| | | s2.update(new CSN(now, 123, sid2)); |
| | | |
| | | // LS3 state |
| | | ServerState s3 = new ServerState(); |
| | | int sid3 = 56789; |
| | | CSN csn3 = new CSN(now, 123, sid3); |
| | | s3.update(csn3); |
| | | s3.update(new CSN(now, 123, sid3)); |
| | | |
| | | MonitorMsg msg = |
| | | new MonitorMsg(sender, dest); |
| | | MonitorMsg msg = new MonitorMsg(sender, dest); |
| | | msg.setReplServerDbState(rsState); |
| | | msg.setServerState(sid1, s1, now+1, true); |
| | | msg.setServerState(sid2, s2, now+2, true); |
| | |
| | | ServerState s = newMsg.getLDAPServerState(sid); |
| | | if (sid == sid1) |
| | | { |
| | | assertEquals(s.toString(), s1.toString(), ""); |
| | | assertEquals(now + 1, newMsg.getLDAPApproxFirstMissingDate(sid), ""); |
| | | assertEquals(s.toString(), s1.toString()); |
| | | assertEquals(now + 1, newMsg.getLDAPApproxFirstMissingDate(sid)); |
| | | } |
| | | else if (sid == sid2) |
| | | { |
| | | assertEquals(s.toString(), s2.toString()); |
| | | assertEquals(now + 2, newMsg.getLDAPApproxFirstMissingDate(sid), ""); |
| | | assertEquals(now + 2, newMsg.getLDAPApproxFirstMissingDate(sid)); |
| | | } |
| | | else |
| | | { |
| | |
| | | ServerState s = newMsg.getRSServerState(sid); |
| | | if (sid == sid3) |
| | | { |
| | | assertEquals(s.toString(), s3.toString(), ""); |
| | | assertEquals(now + 3, newMsg.getRSApproxFirstMissingDate(sid), ""); |
| | | assertEquals(s.toString(), s3.toString()); |
| | | assertEquals(now + 3, newMsg.getRSApproxFirstMissingDate(sid)); |
| | | } |
| | | else |
| | | { |
| | |
| | | assertEquals(msg.getLastChangeNumber(), newMsg.getLastChangeNumber()); |
| | | assertTrue(msg.getCrossDomainServerState().equalsIgnoreCase(newMsg.getCrossDomainServerState())); |
| | | assertTrue(msg.getOperationId().equalsIgnoreCase(newMsg.getOperationId())); |
| | | Set<String> dns2 = newMsg.getExcludedBaseDNs(); |
| | | assertEquals(dns2.size(), 2); |
| | | boolean dn1found=false,dn2found=false; |
| | | for (String dn : dns2) |
| | | { |
| | | if (!dn1found) dn1found=(dn.compareTo(dn1)==0); |
| | | if (!dn2found) dn2found=(dn.compareTo(dn2)==0); |
| | | } |
| | | assertTrue(dn1found); |
| | | assertTrue(dn2found); |
| | | Assertions.assertThat(newMsg.getExcludedBaseDNs()).containsOnly(dn1, dn2); |
| | | } |
| | | |
| | | private int perfRep = 100000; |
| | |
| | | "parentUniqueId"); |
| | | addOp.setAttachment(SYNCHROCONTEXT, opCtx); |
| | | t2 = System.nanoTime(); |
| | | createop += (t2 - t1); |
| | | createop += t2 - t1; |
| | | |
| | | // create msg from op |
| | | AddMsg generatedMsg = new AddMsg(addOp); |
| | | t3 = System.nanoTime(); |
| | | createmsgfromop += (t3 - t2); |
| | | createmsgfromop += t3 - t2; |
| | | |
| | | // set entry attr |
| | | generatedMsg.setEclIncludes(entryAttrList); |
| | | t31 = System.nanoTime(); |
| | | setentryattr += (t31 - t3); |
| | | setentryattr += t31 - t3; |
| | | |
| | | // encode msg |
| | | generatedMsg.encode(); |
| | | t4 = System.nanoTime(); |
| | | encodemsg += (t4 - t31); |
| | | encodemsg += t4 - t31; |
| | | |
| | | // getBytes |
| | | byte[] bytes = generatedMsg.getBytes(getCurrentVersion()); |
| | | t5 = System.nanoTime(); |
| | | getbytes += (t5 - t4); |
| | | getbytes += t5 - t4; |
| | | |
| | | // getBytes |
| | | new AddMsg(bytes); |
| | | t6 = System.nanoTime(); |
| | | buildnew += (t6 - t5); |
| | | buildnew += t6 - t5; |
| | | } |
| | | |
| | | System.out.println( |
| | |
| | | OperationContext opCtx = new ModifyContext(csn2, "thisIsaUniqueID"); |
| | | modifyOp.setAttachment(SYNCHROCONTEXT, opCtx); |
| | | t2 = System.nanoTime(); |
| | | createop += (t2 - t1); |
| | | createop += t2 - t1; |
| | | |
| | | // create msg from op |
| | | ModifyMsg generatedMsg = new ModifyMsg(modifyOp); |
| | | t3 = System.nanoTime(); |
| | | createmsgfromop += (t3 - t2); |
| | | createmsgfromop += t3 - t2; |
| | | |
| | | // set entry attr |
| | | // generatedMsg.setEntryAttributes(entryAttrList); |
| | | t31 = System.nanoTime(); |
| | | setentryattr += (t31 - t3); |
| | | setentryattr += t31 - t3; |
| | | |
| | | // encode msg |
| | | generatedMsg.encode(); |
| | | t4 = System.nanoTime(); |
| | | encodemsg += (t4 - t31); |
| | | encodemsg += t4 - t31; |
| | | |
| | | // getBytes |
| | | byte[] bytes = generatedMsg.getBytes(getCurrentVersion()); |
| | | t5 = System.nanoTime(); |
| | | getbytes += (t5 - t4); |
| | | getbytes += t5 - t4; |
| | | |
| | | // getBytes |
| | | new ModifyMsg(bytes); |
| | | t6 = System.nanoTime(); |
| | | buildnew += (t6 - t5); |
| | | buildnew += t6 - t5; |
| | | } |
| | | |
| | | System.out.println( |
| | |
| | | CSN csn = new CSN(TimeThread.getTime(), 123, 45); |
| | | op.setAttachment(SYNCHROCONTEXT, new DeleteContext(csn, "uniqueid")); |
| | | t2 = System.nanoTime(); |
| | | createop += (t2 - t1); |
| | | createop += t2 - t1; |
| | | |
| | | // create msg from op |
| | | DeleteMsg generatedMsg = new DeleteMsg(op); |
| | | t3 = System.nanoTime(); |
| | | createmsgfromop += (t3 - t2); |
| | | createmsgfromop += t3 - t2; |
| | | |
| | | // set entry attr |
| | | //generatedMsg.setEntryAttributes(entryAttrList); |
| | | t31 = System.nanoTime(); |
| | | setentryattr += (t31 - t3); |
| | | setentryattr += t31 - t3; |
| | | |
| | | // encode msg |
| | | generatedMsg.encode(); |
| | | t4 = System.nanoTime(); |
| | | encodemsg += (t4 - t31); |
| | | encodemsg += t4 - t31; |
| | | |
| | | // getBytes |
| | | byte[] bytes = generatedMsg.getBytes(getCurrentVersion()); |
| | | t5 = System.nanoTime(); |
| | | getbytes += (t5 - t4); |
| | | getbytes += t5 - t4; |
| | | |
| | | // getBytes |
| | | new DeleteMsg(bytes); |
| | | t6 = System.nanoTime(); |
| | | buildnew += (t6 - t5); |
| | | buildnew += t6 - t5; |
| | | } |
| | | |
| | | System.out.println( |