Perform miscellaneous cleanup from bugs and other potential problems found by
FindBugs
- A couple of cases in which it was possible to reference a variable before it
had been initialized.
- Several cases of unnecessary or inefficient type conversion (e.g., calling
String.toString() or new String(String), or calling new Long(long) instead of
Long.valueOf(long)).
- Several cases of code that was either unused or could not possibly be
reached.
- One case in which an error message was created but not added to an operation
response, and a case in which an exception was created but never thrown.
- Renaming a method in the replication code from "NewChangeNumber()" to
"newChangeNumber()", since method names should start with a lowercase letter.
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * The reference to the Java runtime used to determine the amount of memory |
| | | * currently in use. |
| | | */ |
| | | private static final Runtime runtime = Runtime.getRuntime(); |
| | | |
| | | |
| | | |
| | | // The DN of the configuration entry for this entry cache. |
| | | private DN configEntryDN; |
| | | |
| | |
| | | // The maximum number of entries that may be held in the cache. |
| | | private long maxEntries; |
| | | |
| | | // The reference to the Java runtime to use to determine the amount of memory |
| | | // currently in use. |
| | | private Runtime runtime; |
| | | |
| | | |
| | | |
| | | static |
| | |
| | | |
| | | int msgID = MSGID_SUBSCHEMASUBENTRY_VATTR_NOT_SEARCHABLE; |
| | | String message = getMessage(msgID, rule.getAttributeType().getNameOrOID()); |
| | | searchOperation.appendErrorMessage(message); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | String largestCountString = String.valueOf(subFrames[0].getTotalCount()); |
| | | int largestCountLength = largestCountString.length(); |
| | | |
| | | for (ProfileStackFrame subFrame : subFrames) |
| | | { |
| | |
| | | // There is a tree node selected, so we should convert it to a stack |
| | | // frame and display information about it. |
| | | ProfileStackFrame frame = (ProfileStackFrame) selectedObject; |
| | | if (frame == null) |
| | | { |
| | | frameInfoPane.setText(""); |
| | | return; |
| | | } |
| | | |
| | | |
| | | StringBuilder html = new StringBuilder(); |
| | | html.append("<HTML><BODY><PRE>"); |
| | |
| | | @Override |
| | | public String toString() |
| | | { |
| | | return authID.toString(); |
| | | return authID; |
| | | } |
| | | |
| | | /** |
| | |
| | | @Override |
| | | public int hashCode() |
| | | { |
| | | return this.seqnum + this.serverId + (new Long(this.timeStamp)).hashCode(); |
| | | return this.seqnum + this.serverId + Long.valueOf(timeStamp).hashCode(); |
| | | } |
| | | |
| | | /** |
| | |
| | | * |
| | | * @return the generated ChangeNUmber |
| | | */ |
| | | public ChangeNumber NewChangeNumber() |
| | | public ChangeNumber newChangeNumber() |
| | | { |
| | | /* TODO : we probably don't need a time stamp with a 1 msec accuracy */ |
| | | long curTime = TimeThread.getTime(); |
| | |
| | | @Override |
| | | public String toString() |
| | | { |
| | | StringBuilder buffer = new StringBuilder(); |
| | | |
| | | synchronized (this) |
| | | { |
| | | String str = null; |
| | | for (Short key : list.keySet()) |
| | | { |
| | | ChangeNumber change = list.get(key); |
| | | str += " " + change.toString(); |
| | | buffer.append(" "); |
| | | buffer.append(change); |
| | | } |
| | | |
| | | return str; |
| | | } |
| | | |
| | | return buffer.toString(); |
| | | } |
| | | |
| | | /** |
| | |
| | | { |
| | | ChangeNumber changeNumber; |
| | | |
| | | changeNumber = changeNumberGenerator.NewChangeNumber(); |
| | | changeNumber = changeNumberGenerator.newChangeNumber(); |
| | | PendingChange change = new PendingChange(changeNumber, operation, null); |
| | | pendingChanges.put(changeNumber, change); |
| | | return changeNumber; |
| | |
| | | String.valueOf(failureReason)); |
| | | logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, |
| | | message, msgID); |
| | | new DirectoryException(ResultCode.OTHER, message, msgID); |
| | | throw new DirectoryException(ResultCode.OTHER, message, msgID); |
| | | } |
| | | |
| | | // FIXME setBackendEnabled should be part taskUtils ? |
| | |
| | | |
| | | initialize(replicationServerId, replicationPort); |
| | | configuration.addChangeListener(this); |
| | | configDn = configuration.dn(); |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | public String toString() |
| | | { |
| | | return new String(ruleString); |
| | | return ruleString; |
| | | } |
| | | |
| | | /** |
| | |
| | | // The set of attribute types that should be included in the import. |
| | | private Set<AttributeType> includeAttributes; |
| | | |
| | | //Indicates whether all the user attributes should be included. |
| | | // Indicates whether all the user attributes should be included. |
| | | private boolean includeAllUserAttrs; |
| | | |
| | | //Indicates whether all the operational attributes should be |
| | |
| | | // excluded. |
| | | private boolean excludeAllOpAttrs; |
| | | |
| | | // The MakeLDIF template file that should be used to generate |
| | | // entries (instead of having them read from a file). |
| | | private TemplateFile templateFile; |
| | | |
| | | |
| | | |
| | | /** |
| | |
| | | KEYTOOL_COMMAND, |
| | | "-genkey", |
| | | "-alias", alias, |
| | | "-dname", subjectDN.toString(), |
| | | "-dname", subjectDN, |
| | | "-keyalg", "rsa", |
| | | "-keystore", keyStorePath, |
| | | "-storetype", keyStoreType, |
| | | "-storetype", keyStoreType |
| | | }; |
| | | runKeyTool(commandElements, keyStorePIN, keyStorePIN, true); |
| | | |
| | |
| | | KEYTOOL_COMMAND, |
| | | "-genkey", |
| | | "-alias", alias, |
| | | "-dname", subjectDN.toString(), |
| | | "-dname", subjectDN, |
| | | "-keyalg", "rsa", |
| | | "-keystore", keyStorePath, |
| | | "-storetype", keyStoreType |
| | |
| | | if (a.needsValue()) |
| | | { |
| | | String valuePlaceholder = a.getValuePlaceholder(); |
| | | if (a == null) |
| | | if (valuePlaceholder == null) |
| | | { |
| | | value = " {value}"; |
| | | } |
| | |
| | | new LinkedList<AttributeValue>()); |
| | | addDn = "dc=dependency" + sequence + "," + addDn; |
| | | AddMsg addMsg = |
| | | new AddMsg(gen.NewChangeNumber(), addDn, stringUID(sequence+1), |
| | | new AddMsg(gen.newChangeNumber(), addDn, stringUID(sequence+1), |
| | | stringUID(sequence), |
| | | entry.getObjectClassAttribute(), |
| | | entry.getAttributes(), null ); |
| | | broker.publish(addMsg); |
| | | |
| | | ModifyMsg modifyMsg = |
| | | new ModifyMsg(gen.NewChangeNumber(), DN.decode(addDn), |
| | | new ModifyMsg(gen.newChangeNumber(), DN.decode(addDn), |
| | | generatemods("description", "test"), |
| | | stringUID(sequence+1)); |
| | | broker.publish(modifyMsg); |
| | |
| | | while (sequence-->1) |
| | | { |
| | | DeleteMsg delMsg = new DeleteMsg(deleteDN.toString(), |
| | | gen.NewChangeNumber(), |
| | | gen.newChangeNumber(), |
| | | stringUID(sequence + 1)); |
| | | broker.publish(delMsg); |
| | | deleteDN = deleteDN.getParent(); |
| | |
| | | new LinkedList<AttributeValue>()); |
| | | addDn = "dc=dependency" + sequence + "," + addDn; |
| | | AddMsg addMsg = |
| | | new AddMsg(gen.NewChangeNumber(), addDn, stringUID(sequence+1), |
| | | new AddMsg(gen.newChangeNumber(), addDn, stringUID(sequence+1), |
| | | stringUID(sequence == 1 ? sequence : sequence +1000), |
| | | entry.getObjectClassAttribute(), |
| | | entry.getAttributes(), null ); |
| | | broker.publish(addMsg); |
| | | |
| | | // delete the entry |
| | | DeleteMsg delMsg = new DeleteMsg(addDn, gen.NewChangeNumber(), |
| | | DeleteMsg delMsg = new DeleteMsg(addDn, gen.newChangeNumber(), |
| | | stringUID(sequence+1)); |
| | | broker.publish(delMsg); |
| | | |
| | |
| | | entry.addAttribute(new Attribute("entryuuid", stringUID(sequence+1001)), |
| | | new LinkedList<AttributeValue>()); |
| | | addMsg = |
| | | new AddMsg(gen.NewChangeNumber(), addDn, stringUID(sequence+1001), |
| | | new AddMsg(gen.newChangeNumber(), addDn, stringUID(sequence+1001), |
| | | stringUID(sequence == 1 ? sequence : sequence +1000), |
| | | entry.getObjectClassAttribute(), |
| | | entry.getAttributes(), null ); |
| | |
| | | while (sequence-->1) |
| | | { |
| | | DeleteMsg delMsg = new DeleteMsg(deleteDN.toString(), |
| | | gen.NewChangeNumber(), |
| | | gen.newChangeNumber(), |
| | | stringUID(sequence + 1001)); |
| | | broker.publish(delMsg); |
| | | deleteDN = deleteDN.getParent(); |
| | |
| | | new LinkedList<AttributeValue>()); |
| | | addDn = "dc=dependency" + sequence + "," + BASEDN_STRING; |
| | | AddMsg addMsg = |
| | | new AddMsg(gen.NewChangeNumber(), addDn, stringUID(sequence+1), |
| | | new AddMsg(gen.newChangeNumber(), addDn, stringUID(sequence+1), |
| | | stringUID(1), |
| | | entry.getObjectClassAttribute(), |
| | | entry.getAttributes(), null ); |
| | |
| | | |
| | | // rename the entry |
| | | ModifyDNMsg moddnMsg = |
| | | new ModifyDNMsg(addDn, gen.NewChangeNumber(), stringUID(sequence+1), |
| | | new ModifyDNMsg(addDn, gen.newChangeNumber(), stringUID(sequence+1), |
| | | stringUID(1), true, null, "dc=new_dep" + sequence); |
| | | broker.publish(moddnMsg); |
| | | } |
| | |
| | | { |
| | | addDn = "dc=new_dep" + sequence + "," + BASEDN_STRING; |
| | | DeleteMsg delMsg = new DeleteMsg(addDn.toString(), |
| | | gen.NewChangeNumber(), |
| | | gen.newChangeNumber(), |
| | | stringUID(sequence + 1001)); |
| | | broker.publish(delMsg); |
| | | } |
| | |
| | | |
| | | ChangeNumberGenerator gen = new ChangeNumberGenerator((short)2, 0); |
| | | |
| | | ModifyMsg modMsg = new ModifyMsg(gen.NewChangeNumber(), |
| | | ModifyMsg modMsg = new ModifyMsg(gen.newChangeNumber(), |
| | | baseDn, rcvdMods, "cn=schema"); |
| | | broker.publish(modMsg); |
| | | |
| | |
| | | |
| | | |
| | | // Create and publish an update message to add an entry. |
| | | AddMsg addMsg = new AddMsg(gen.NewChangeNumber(), |
| | | AddMsg addMsg = new AddMsg(gen.newChangeNumber(), |
| | | personWithUUIDEntry.getDN().toString(), |
| | | user1entryUUID, |
| | | baseUUID, |
| | |
| | | setReceiveStatus(synchroServerEntry.getDN().toString(), true); |
| | | |
| | | // Create and publish another update message to add an entry. |
| | | addMsg = new AddMsg(gen.NewChangeNumber(), |
| | | addMsg = new AddMsg(gen.newChangeNumber(), |
| | | personWithUUIDEntry.getDN().toString(), |
| | | user1entryUUID, |
| | | baseUUID, |
| | |
| | | // Delete the entries to clean the database. |
| | | DeleteMsg delMsg = |
| | | new DeleteMsg(personWithUUIDEntry.getDN().toString(), |
| | | gen.NewChangeNumber(), user1entryUUID); |
| | | gen.newChangeNumber(), user1entryUUID); |
| | | broker.publish(delMsg); |
| | | resultEntry = getEntry(personWithUUIDEntry.getDN(), 10000, false); |
| | | |
| | |
| | | |
| | | |
| | | // Create and publish an update message to add an entry. |
| | | AddMsg addMsg = new AddMsg(gen.NewChangeNumber(), |
| | | AddMsg addMsg = new AddMsg(gen.newChangeNumber(), |
| | | personWithUUIDEntry.getDN().toString(), |
| | | user1entryUUID, |
| | | baseUUID, |
| | |
| | | |
| | | // Send a first modify operation message. |
| | | List<Modification> mods = generatemods("telephonenumber", "01 02 45"); |
| | | ModifyMsg modMsg = new ModifyMsg(gen.NewChangeNumber(), |
| | | ModifyMsg modMsg = new ModifyMsg(gen.newChangeNumber(), |
| | | personWithUUIDEntry.getDN(), mods, |
| | | user1entryUUID); |
| | | broker.publish(modMsg); |
| | |
| | | |
| | | // Send a second modify operation message. |
| | | mods = generatemods("description", "Description was changed"); |
| | | modMsg = new ModifyMsg(gen.NewChangeNumber(), |
| | | modMsg = new ModifyMsg(gen.newChangeNumber(), |
| | | personWithUUIDEntry.getDN(), mods, |
| | | user1entryUUID); |
| | | broker.publish(modMsg); |
| | |
| | | // Delete the entries to clean the database. |
| | | DeleteMsg delMsg = |
| | | new DeleteMsg(personWithUUIDEntry.getDN().toString(), |
| | | gen.NewChangeNumber(), user1entryUUID); |
| | | gen.newChangeNumber(), user1entryUUID); |
| | | broker.publish(delMsg); |
| | | resultEntry = getEntry(personWithUUIDEntry.getDN(), 10000, false); |
| | | |
| | |
| | | * Finally check that the modify operation has been applied. |
| | | */ |
| | | // create the entry with a given DN |
| | | AddMsg addMsg = new AddMsg(gen.NewChangeNumber(), |
| | | AddMsg addMsg = new AddMsg(gen.newChangeNumber(), |
| | | personWithUUIDEntry.getDN().toString(), |
| | | user1entryUUID, |
| | | baseUUID, |
| | |
| | | |
| | | // send a modify operation with the correct unique ID but another DN |
| | | List<Modification> mods = generatemods("telephonenumber", "01 02 45"); |
| | | ModifyMsg modMsg = new ModifyMsg(gen.NewChangeNumber(), |
| | | ModifyMsg modMsg = new ModifyMsg(gen.newChangeNumber(), |
| | | DN.decode("cn=something,ou=People,dc=example,dc=com"), mods, |
| | | user1entryUUID); |
| | | broker.publish(modMsg); |
| | |
| | | */ |
| | | |
| | | // create the entry with a given DN and unique ID |
| | | addMsg = new AddMsg(gen.NewChangeNumber(), |
| | | addMsg = new AddMsg(gen.newChangeNumber(), |
| | | personWithUUIDEntry.getDN().toString(), |
| | | user1entryUUID, baseUUID, |
| | | personWithUUIDEntry.getObjectClassAttribute(), |
| | |
| | | |
| | | // send a modify operation with a wrong unique ID but the same DN |
| | | mods = generatemods("telephonenumber", "02 01 03 05"); |
| | | modMsg = new ModifyMsg(gen.NewChangeNumber(), |
| | | modMsg = new ModifyMsg(gen.newChangeNumber(), |
| | | DN.decode(user1dn), mods, "10000000-9abc-def0-1234-1234567890ab"); |
| | | broker.publish(modMsg); |
| | | |
| | |
| | | // used above |
| | | DeleteMsg delMsg = |
| | | new DeleteMsg("cn=anotherdn,ou=People,dc=example,dc=com", |
| | | gen.NewChangeNumber(), user1entryUUID); |
| | | gen.newChangeNumber(), user1entryUUID); |
| | | broker.publish(delMsg); |
| | | |
| | | // check that the delete operation has been applied |
| | |
| | | */ |
| | | |
| | | // create an entry with a given DN and unique ID |
| | | addMsg = new AddMsg(gen.NewChangeNumber(), |
| | | addMsg = new AddMsg(gen.newChangeNumber(), |
| | | personWithUUIDEntry.getDN().toString(), |
| | | user1entryUUID, baseUUID, |
| | | personWithUUIDEntry.getObjectClassAttribute(), |
| | |
| | | entryList.add(resultEntry.getDN()); |
| | | |
| | | // create an entry with the same DN and another unique ID |
| | | addMsg = new AddMsg(gen.NewChangeNumber(), |
| | | addMsg = new AddMsg(gen.newChangeNumber(), |
| | | personWithSecondUniqueID.getDN().toString(), |
| | | user1entrysecondUUID, baseUUID, |
| | | personWithSecondUniqueID.getObjectClassAttribute(), |
| | |
| | | // delete the entries to clean the database. |
| | | delMsg = |
| | | new DeleteMsg(personWithUUIDEntry.getDN().toString(), |
| | | gen.NewChangeNumber(), user1entryUUID); |
| | | gen.newChangeNumber(), user1entryUUID); |
| | | broker.publish(delMsg); |
| | | delMsg = |
| | | new DeleteMsg(personWithSecondUniqueID.getDN().toString(), |
| | | gen.NewChangeNumber(), user1entrysecondUUID); |
| | | gen.newChangeNumber(), user1entrysecondUUID); |
| | | broker.publish(delMsg); |
| | | resultEntry = getEntry(personWithUUIDEntry.getDN(), 10000, false); |
| | | |
| | |
| | | * Simulate this by trying to add an entry below a DN that does not |
| | | * exist but with a parent ID that exist. |
| | | */ |
| | | addMsg = new AddMsg(gen.NewChangeNumber(), |
| | | addMsg = new AddMsg(gen.newChangeNumber(), |
| | | "uid=new person,o=nothere,o=below,ou=People,dc=example,dc=com", |
| | | user1entryUUID, |
| | | baseUUID, |
| | |
| | | |
| | | delMsg = |
| | | new DeleteMsg("uid=new person,ou=People,dc=example,dc=com", |
| | | gen.NewChangeNumber(), "11111111-9abc-def0-1234-1234567890ab"); |
| | | gen.newChangeNumber(), "11111111-9abc-def0-1234-1234567890ab"); |
| | | broker.publish(delMsg); |
| | | resultEntry = getEntry( |
| | | DN.decode("uid=new person,ou=People,dc=example,dc=com"), 10000, true); |
| | |
| | | */ |
| | | |
| | | ModifyDNMsg modDnMsg = new ModifyDNMsg( |
| | | "uid=new person,ou=People,dc=example,dc=com", gen.NewChangeNumber(), |
| | | "uid=new person,ou=People,dc=example,dc=com", gen.newChangeNumber(), |
| | | user1entryUUID, baseUUID, false, |
| | | "uid=wrong, ou=people,dc=example,dc=com", |
| | | "uid=newrdn"); |
| | |
| | | */ |
| | | |
| | | modDnMsg = new ModifyDNMsg( |
| | | "uid=wrong,ou=People,dc=example,dc=com", gen.NewChangeNumber(), |
| | | "uid=wrong,ou=People,dc=example,dc=com", gen.newChangeNumber(), |
| | | user1entryUUID, baseUUID, false, null, "uid=reallynewrdn"); |
| | | broker.publish(modDnMsg); |
| | | |
| | |
| | | */ |
| | | |
| | | // add a second entry |
| | | addMsg = new AddMsg(gen.NewChangeNumber(), |
| | | addMsg = new AddMsg(gen.newChangeNumber(), |
| | | user1dn, |
| | | user1entrysecondUUID, |
| | | baseUUID, |
| | |
| | | assertNotNull(resultEntry, "The add operation was not replayed"); |
| | | |
| | | // try to rename the first entry |
| | | modDnMsg = new ModifyDNMsg(user1dn, gen.NewChangeNumber(), |
| | | modDnMsg = new ModifyDNMsg(user1dn, gen.newChangeNumber(), |
| | | user1entrysecondUUID, baseUUID, false, |
| | | baseDn.toString(), "uid=reallynewrdn"); |
| | | broker.publish(modDnMsg); |
| | |
| | | // delete the entries to clean the database |
| | | delMsg = |
| | | new DeleteMsg("uid=reallynewrdn,ou=People,dc=example,dc=com", |
| | | gen.NewChangeNumber(), user1entryUUID); |
| | | gen.newChangeNumber(), user1entryUUID); |
| | | broker.publish(delMsg); |
| | | resultEntry = getEntry( |
| | | DN.decode("uid=reallynewrdn,ou=People,dc=example,dc=com"), 10000, false); |
| | |
| | | new DeleteMsg("entryUUID = " + user1entrysecondUUID + "+" + |
| | | DN.decode(user1dn).getRDN().toString() + |
| | | ",ou=People,dc=example,dc=com", |
| | | gen.NewChangeNumber(), user1entrysecondUUID); |
| | | gen.newChangeNumber(), user1entrysecondUUID); |
| | | broker.publish(delMsg); |
| | | resultEntry = getEntry( |
| | | DN.decode("entryUUID = " + user1entrysecondUUID + "+" + |
| | |
| | | "Entry not added: ou=baseDn1,"+baseDn); |
| | | |
| | | // - create Add Msg for user1 with parent entry 1 UUID |
| | | addMsg = new AddMsg(gen.NewChangeNumber(), |
| | | addMsg = new AddMsg(gen.newChangeNumber(), |
| | | "uid=new person,ou=baseDn1,"+baseDn, |
| | | user1entryUUID, |
| | | getEntryUUID(DN.decode("ou=baseDn1,"+baseDn)), |
| | |
| | | * |
| | | * Start by testing the Add message reception |
| | | */ |
| | | AddMsg addMsg = new AddMsg(gen.NewChangeNumber(), |
| | | AddMsg addMsg = new AddMsg(gen.newChangeNumber(), |
| | | personWithUUIDEntry.getDN().toString(), |
| | | user1entryUUID, baseUUID, |
| | | personWithUUIDEntry.getObjectClassAttribute(), |
| | |
| | | /* |
| | | * Test the reception of Modify Msg |
| | | */ |
| | | modMsg = new ModifyMsg(gen.NewChangeNumber(), personWithUUIDEntry.getDN(), |
| | | modMsg = new ModifyMsg(gen.newChangeNumber(), personWithUUIDEntry.getDN(), |
| | | mods, user1entryUUID); |
| | | if (assured) |
| | | modMsg.setAssured(); |
| | |
| | | * Test the Reception of Modify Dn Msg |
| | | */ |
| | | moddnMsg = new ModifyDNMsg(personWithUUIDEntry.getDN().toString(), |
| | | gen.NewChangeNumber(), |
| | | gen.newChangeNumber(), |
| | | user1entryUUID, null, |
| | | true, null, "uid= new person"); |
| | | if (assured) |
| | |
| | | * Test the Reception of Delete Msg |
| | | */ |
| | | delMsg = new DeleteMsg("uid= new person,ou=People,dc=example,dc=com", |
| | | gen.NewChangeNumber(), user1entryUUID); |
| | | gen.newChangeNumber(), user1entryUUID); |
| | | if (assured) |
| | | delMsg.setAssured(); |
| | | broker.publish(delMsg); |
| | |
| | | { |
| | | // Publish a delete message for this test entry. |
| | | DeleteMsg delMsg = new DeleteMsg(tmp.getDN().toString(), |
| | | gen.NewChangeNumber(), |
| | | gen.newChangeNumber(), |
| | | uuid); |
| | | broker.publish(delMsg); |
| | | |
| | |
| | | public class ChangeNumberGeneratorTest extends ReplicationTestCase |
| | | { |
| | | /** |
| | | * Test the adjust method of ChangeNumberGenerator |
| | | * Test the adjust method of ChangeNumberGenerator |
| | | */ |
| | | @Test(dataProvider = "changeNumberData") |
| | | public void adjustTest() |
| | | { |
| | | ChangeNumberGenerator generator = |
| | | new ChangeNumberGenerator((short)5, TimeThread.getTime()); |
| | | |
| | | ChangeNumber cn = generator.NewChangeNumber(); |
| | | |
| | | |
| | | ChangeNumber cn = generator.newChangeNumber(); |
| | | |
| | | ChangeNumber cn1 = |
| | | new ChangeNumber(cn.getTime() + 5000, cn.getSeqnum(), (short) 6); |
| | | generator.adjust(cn1); |
| | | |
| | | ChangeNumber cn2 = generator.NewChangeNumber(); |
| | | |
| | | ChangeNumber cn2 = generator.newChangeNumber(); |
| | | |
| | | assertTrue((cn2.compareTo(cn1)>0), |
| | | "ChangeNumberGenerator generated an earlier ChangeNumber " |
| | |
| | | {TimeThread.getTime(), (short) 123, (short) 45} |
| | | }; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Test ChangeNumber constructor |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * Test toString and constructor from String |
| | | * Test toString and constructor from String |
| | | */ |
| | | @Test(dataProvider = "changeNumberData") |
| | | public void ChangeNumberEncodeDecode(long time, int seq, short id) |
| | |
| | | // Create 2 ChangeNumber with the same data and check equality |
| | | ChangeNumber cn = new ChangeNumber(time,seq,id); |
| | | ChangeNumber cn2 = new ChangeNumber(cn.toString()); |
| | | |
| | | |
| | | assertEquals(cn, cn2, |
| | | "The encoding/decoding of ChangeNumber is not reversible"); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Create ChangeNumber |
| | | */ |
| | |
| | | new ChangeNumberGenerator((short) 0, TimeThread.getTime()); |
| | | |
| | | // Generate 2 changeNumbers and check that they are differents |
| | | CN1 = cng.NewChangeNumber(); |
| | | CN2 = cng.NewChangeNumber(); |
| | | 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.sleep(10); |
| | | CN2 = cng.NewChangeNumber(); |
| | | CN2 = cng.newChangeNumber(); |
| | | assertTrue(CN1.compareTo(CN2) != 0); |
| | | |
| | | // Generate a changeNumber separates by 300 milliseconds |
| | | // and check that they are differents |
| | | Thread.sleep(300); |
| | | CN2 = cng.NewChangeNumber(); |
| | | CN2 = cng.newChangeNumber(); |
| | | assertTrue(CN1.compareTo(CN2) != 0); |
| | | |
| | | // Adjust with the oldest CN |
| | | cng.adjust(CN1) ; |
| | | CN2 = cng.NewChangeNumber(); |
| | | CN2 = cng.newChangeNumber(); |
| | | assertTrue(CN1.compareTo(CN2) != 0 ); |
| | | |
| | | // Adjust with the newest generated |
| | | cng.adjust(CN2) ; |
| | | CN1 = CN2; |
| | | CN2 = cng.NewChangeNumber(); |
| | | 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(); |
| | | 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(); |
| | | 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(); |
| | | CN2 = cng.newChangeNumber(); |
| | | assertTrue(CN1.compareTo(CN2) != 0 ); |
| | | } |
| | | } |
| | |
| | | ChangeNumberGenerator gen1 = new ChangeNumberGenerator((short) 1, state); |
| | | ChangeNumberGenerator gen2 = new ChangeNumberGenerator((short) 2, state); |
| | | |
| | | ChangeNumber cn1 = gen1.NewChangeNumber(); |
| | | ChangeNumber cn2 = gen2.NewChangeNumber(); |
| | | ChangeNumber cn1 = gen1.newChangeNumber(); |
| | | ChangeNumber cn2 = gen2.newChangeNumber(); |
| | | |
| | | state.update(cn1); |
| | | state.update(cn2); |
| | |
| | | ChangeNumberGenerator gen1 = new ChangeNumberGenerator((short) 1, state); |
| | | ChangeNumberGenerator gen2 = new ChangeNumberGenerator((short) 2, state); |
| | | |
| | | ChangeNumber cn1 = gen1.NewChangeNumber(); |
| | | ChangeNumber cn2 = gen2.NewChangeNumber(); |
| | | ChangeNumber cn1 = gen1.newChangeNumber(); |
| | | ChangeNumber cn2 = gen2.newChangeNumber(); |
| | | |
| | | state.update(cn1); |
| | | state.update(cn2); |
| | |
| | | new DbHandler((short) 1, DN.decode("o=test"), replicationServer, dbEnv); |
| | | |
| | | ChangeNumberGenerator gen = new ChangeNumberGenerator((short)1, 0); |
| | | ChangeNumber changeNumber1 = gen.NewChangeNumber(); |
| | | ChangeNumber changeNumber2 = gen.NewChangeNumber(); |
| | | ChangeNumber changeNumber3 = gen.NewChangeNumber(); |
| | | ChangeNumber changeNumber1 = gen.newChangeNumber(); |
| | | ChangeNumber changeNumber2 = gen.newChangeNumber(); |
| | | ChangeNumber changeNumber3 = gen.newChangeNumber(); |
| | | |
| | | DeleteMsg update1 = new DeleteMsg("o=test", changeNumber1, "uid"); |
| | | DeleteMsg update2 = new DeleteMsg("o=test", changeNumber2, "uid"); |
| | |
| | | socket.close(); |
| | | |
| | | ReplServerFakeConfiguration conf = |
| | | new ReplServerFakeConfiguration(replicationServerPort, null, 0, 1, 0, 0, null); |
| | | new ReplServerFakeConfiguration(replicationServerPort, null, 0, 1, 0, 0, null); |
| | | replicationServer = new ReplicationServer(conf); |
| | | } |
| | | |
| | |
| | | */ |
| | | firstChangeNumberServer2 = new ChangeNumber(time+ 1, 1, (short) 2); |
| | | secondChangeNumberServer2 = new ChangeNumber(time + 3, 2, (short) 2); |
| | | |
| | | |
| | | /* |
| | | * Create a ChangeNumber between firstChangeNumberServer1 and |
| | | * Create a ChangeNumber between firstChangeNumberServer1 and |
| | | * secondChangeNumberServer1 that will not be used to create a |
| | | * change sent to the replicationServer but that will be used |
| | | * in the Server State when opening a connection to the |
| | | * ReplicationServer to make sure that the ReplicationServer is |
| | | * in the Server State when opening a connection to the |
| | | * ReplicationServer to make sure that the ReplicationServer is |
| | | * able to accept such clients. |
| | | */ |
| | | unknownChangeNumberServer1 = new ChangeNumber(time+1, 1, (short) 1); |
| | |
| | | |
| | | newClientWithChanges(state, secondChangeNumberServer1); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Test with a client that has already seen a Change that the |
| | | * ReplicationServer has not seen. |
| | |
| | | for (int i = 0; i< TOTAL_MSG; i++) |
| | | { |
| | | DeleteMsg msg = |
| | | new DeleteMsg("o=test,dc=example,dc=com", gen.NewChangeNumber(), |
| | | new DeleteMsg("o=test,dc=example,dc=com", gen.newChangeNumber(), |
| | | "uid"); |
| | | server.publish(msg); |
| | | } |
| | |
| | | "localhost:" + ((i == 0) ? changelogPorts[1] : changelogPorts[0])); |
| | | ReplServerFakeConfiguration conf = |
| | | new ReplServerFakeConfiguration(changelogPorts[i], "changelogDb"+i, 0, |
| | | changelogIds[i], 0, 100, servers); |
| | | changelogIds[i], 0, 100, servers); |
| | | replicationServer = new ReplicationServer(conf); |
| | | } |
| | | |
| | |
| | | if (itest > 0) |
| | | { |
| | | socket.close(); |
| | | |
| | | |
| | | SortedSet<String> servers = new TreeSet<String>(); |
| | | servers.add("localhost:"+changelogPorts[0]); |
| | | ReplServerFakeConfiguration conf = |
| | | new ReplServerFakeConfiguration(changelogPorts[1], null, 0, |
| | | changelogIds[1], 0, 0, null); |
| | | changelogIds[1], 0, 0, null); |
| | | changelogs[1] = new ReplicationServer(conf); |
| | | |
| | | // Connect broker 2 to changelog2 |
| | |
| | | count--; |
| | | |
| | | DeleteMsg msg = |
| | | new DeleteMsg("o=test,dc=example,dc=com", gen.NewChangeNumber(), |
| | | new DeleteMsg("o=test,dc=example,dc=com", gen.newChangeNumber(), |
| | | "uid"); |
| | | broker.publish(msg); |
| | | } |