You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2006/10/12 20:33:19 UTC

svn commit: r463366 [5/5] - in /directory/trunks/apacheds/mitosis/src: ./ main/ main/java/ main/java/org/ main/java/org/apache/ main/java/org/apache/directory/ main/java/org/apache/directory/mitosis/ main/java/org/apache/directory/mitosis/common/ main/...

Added: directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageCodecTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageCodecTest.java?view=auto&rev=463366
==============================================================================
--- directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageCodecTest.java (added)
+++ directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageCodecTest.java Thu Oct 12 11:33:14 2006
@@ -0,0 +1,53 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.mitosis.service.protocol.codec;
+
+import org.apache.directory.mitosis.common.CSNVector;
+import org.apache.directory.mitosis.common.ReplicaId;
+import org.apache.directory.mitosis.common.SimpleCSN;
+import org.apache.directory.mitosis.service.protocol.Constants;
+import org.apache.directory.mitosis.service.protocol.codec.BeginLogEntriesAckMessageDecoder;
+import org.apache.directory.mitosis.service.protocol.codec.BeginLogEntriesAckMessageEncoder;
+import org.apache.directory.mitosis.service.protocol.message.BeginLogEntriesAckMessage;
+
+public class BeginLogEntriesAckMessageCodecTest extends AbstractMessageCodecTest {
+
+    private static final CSNVector PURGE_VECTOR = new CSNVector();
+    private static final CSNVector UPDATE_VECTOR = new CSNVector();
+    
+    static
+    {
+        PURGE_VECTOR.setCSN( new SimpleCSN( System.currentTimeMillis() - 400, new ReplicaId( "replica0" ), 3456 ) );
+        PURGE_VECTOR.setCSN( new SimpleCSN( System.currentTimeMillis() - 300, new ReplicaId( "replica1" ), 9012 ) );
+        PURGE_VECTOR.setCSN( new SimpleCSN( System.currentTimeMillis() - 200, new ReplicaId( "replica2" ), 5678 ) );
+        PURGE_VECTOR.setCSN( new SimpleCSN( System.currentTimeMillis() - 100, new ReplicaId( "replica3" ), 1234 ) );
+
+        UPDATE_VECTOR.setCSN( new SimpleCSN( System.currentTimeMillis() + 000, new ReplicaId( "replica0" ), 1234 ) );
+        UPDATE_VECTOR.setCSN( new SimpleCSN( System.currentTimeMillis() + 100, new ReplicaId( "replica1" ), 5678 ) );
+        UPDATE_VECTOR.setCSN( new SimpleCSN( System.currentTimeMillis() + 200, new ReplicaId( "replica2" ), 9012 ) );
+        UPDATE_VECTOR.setCSN( new SimpleCSN( System.currentTimeMillis() + 300, new ReplicaId( "replica3" ), 3456 ) );
+    }
+    
+    public BeginLogEntriesAckMessageCodecTest() {
+        super( new BeginLogEntriesAckMessage( 1234, Constants.OK, PURGE_VECTOR, UPDATE_VECTOR ),
+               new BeginLogEntriesAckMessageEncoder(),
+               new BeginLogEntriesAckMessageDecoder() );
+    }
+}

Added: directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageCodecTest2.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageCodecTest2.java?view=auto&rev=463366
==============================================================================
--- directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageCodecTest2.java (added)
+++ directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesAckMessageCodecTest2.java Thu Oct 12 11:33:14 2006
@@ -0,0 +1,34 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.mitosis.service.protocol.codec;
+
+import org.apache.directory.mitosis.service.protocol.Constants;
+import org.apache.directory.mitosis.service.protocol.codec.BeginLogEntriesAckMessageDecoder;
+import org.apache.directory.mitosis.service.protocol.codec.BeginLogEntriesAckMessageEncoder;
+import org.apache.directory.mitosis.service.protocol.message.BeginLogEntriesAckMessage;
+
+public class BeginLogEntriesAckMessageCodecTest2 extends AbstractMessageCodecTest {
+    
+    public BeginLogEntriesAckMessageCodecTest2() {
+        super( new BeginLogEntriesAckMessage( 1234, Constants.NOT_OK, null, null ),
+               new BeginLogEntriesAckMessageEncoder(),
+               new BeginLogEntriesAckMessageDecoder() );
+    }
+}

Added: directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesMessageCodecTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesMessageCodecTest.java?view=auto&rev=463366
==============================================================================
--- directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesMessageCodecTest.java (added)
+++ directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/BeginLogEntriesMessageCodecTest.java Thu Oct 12 11:33:14 2006
@@ -0,0 +1,33 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.mitosis.service.protocol.codec;
+
+import org.apache.directory.mitosis.service.protocol.codec.BeginLogEntriesMessageDecoder;
+import org.apache.directory.mitosis.service.protocol.codec.BeginLogEntriesMessageEncoder;
+import org.apache.directory.mitosis.service.protocol.message.BeginLogEntriesMessage;
+
+public class BeginLogEntriesMessageCodecTest extends AbstractMessageCodecTest {
+
+    public BeginLogEntriesMessageCodecTest() {
+        super( new BeginLogEntriesMessage( 1234 ),
+               new BeginLogEntriesMessageEncoder(),
+               new BeginLogEntriesMessageDecoder() );
+    }
+}

Added: directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/EndLogEntriesAckMessageCodecTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/EndLogEntriesAckMessageCodecTest.java?view=auto&rev=463366
==============================================================================
--- directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/EndLogEntriesAckMessageCodecTest.java (added)
+++ directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/EndLogEntriesAckMessageCodecTest.java Thu Oct 12 11:33:14 2006
@@ -0,0 +1,33 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.mitosis.service.protocol.codec;
+
+import org.apache.directory.mitosis.service.protocol.codec.EndLogEntriesAckMessageDecoder;
+import org.apache.directory.mitosis.service.protocol.codec.EndLogEntriesAckMessageEncoder;
+import org.apache.directory.mitosis.service.protocol.message.EndLogEntriesAckMessage;
+
+public class EndLogEntriesAckMessageCodecTest extends AbstractMessageCodecTest {
+
+    public EndLogEntriesAckMessageCodecTest() {
+        super( new EndLogEntriesAckMessage( 1234, 5678 ),
+               new EndLogEntriesAckMessageEncoder(),
+               new EndLogEntriesAckMessageDecoder() );
+    }
+}

Added: directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/EndLogEntriesMessageCodecTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/EndLogEntriesMessageCodecTest.java?view=auto&rev=463366
==============================================================================
--- directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/EndLogEntriesMessageCodecTest.java (added)
+++ directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/EndLogEntriesMessageCodecTest.java Thu Oct 12 11:33:14 2006
@@ -0,0 +1,33 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.mitosis.service.protocol.codec;
+
+import org.apache.directory.mitosis.service.protocol.codec.EndLogEntriesMessageDecoder;
+import org.apache.directory.mitosis.service.protocol.codec.EndLogEntriesMessageEncoder;
+import org.apache.directory.mitosis.service.protocol.message.EndLogEntriesMessage;
+
+public class EndLogEntriesMessageCodecTest extends AbstractMessageCodecTest {
+
+    public EndLogEntriesMessageCodecTest() {
+        super( new EndLogEntriesMessage( 1234 ),
+               new EndLogEntriesMessageEncoder(),
+               new EndLogEntriesMessageDecoder() );
+    }
+}

Added: directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryAckMessageCodecTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryAckMessageCodecTest.java?view=auto&rev=463366
==============================================================================
--- directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryAckMessageCodecTest.java (added)
+++ directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryAckMessageCodecTest.java Thu Oct 12 11:33:14 2006
@@ -0,0 +1,33 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.mitosis.service.protocol.codec;
+
+import org.apache.directory.mitosis.service.protocol.codec.LogEntryAckMessageDecoder;
+import org.apache.directory.mitosis.service.protocol.codec.LogEntryAckMessageEncoder;
+import org.apache.directory.mitosis.service.protocol.message.LogEntryAckMessage;
+
+public class LogEntryAckMessageCodecTest extends AbstractMessageCodecTest {
+
+    public LogEntryAckMessageCodecTest() {
+        super( new LogEntryAckMessage( 1234, 5678 ),
+               new LogEntryAckMessageEncoder(),
+               new LogEntryAckMessageDecoder() );
+    }
+}

Added: directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryMessageCodecTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryMessageCodecTest.java?view=auto&rev=463366
==============================================================================
--- directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryMessageCodecTest.java (added)
+++ directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LogEntryMessageCodecTest.java Thu Oct 12 11:33:14 2006
@@ -0,0 +1,57 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.mitosis.service.protocol.codec;
+
+import javax.naming.InvalidNameException;
+import javax.naming.directory.BasicAttribute;
+import javax.naming.ldap.LdapName;
+
+import org.apache.directory.mitosis.common.ReplicaId;
+import org.apache.directory.mitosis.common.SimpleCSN;
+import org.apache.directory.mitosis.operation.AddAttributeOperation;
+import org.apache.directory.mitosis.service.protocol.codec.LogEntryMessageDecoder;
+import org.apache.directory.mitosis.service.protocol.codec.LogEntryMessageEncoder;
+import org.apache.directory.mitosis.service.protocol.message.BaseMessage;
+import org.apache.directory.mitosis.service.protocol.message.LogEntryMessage;
+
+public class LogEntryMessageCodecTest extends AbstractMessageCodecTest {
+
+    public LogEntryMessageCodecTest() throws InvalidNameException {
+        super( new LogEntryMessage( 1234,
+                                    new AddAttributeOperation(
+                                            new SimpleCSN( System.currentTimeMillis(), new ReplicaId( "testReplica0" ), 1234 ),
+                                            new LdapName( "ou=system" ),
+                                            new BasicAttribute( "Hello", "Test" ) ) ),
+               new LogEntryMessageEncoder(),
+               new LogEntryMessageDecoder() );
+    }
+
+    protected boolean compare( BaseMessage expected0, BaseMessage actual0 ) {
+        LogEntryMessage expected = ( LogEntryMessage ) expected0;
+        LogEntryMessage actual = ( LogEntryMessage ) actual0;
+        
+        // We don't compare operation here because it is {@link OperationCodec}'s
+        // duty to serialize and deserialize Invocations.
+        return expected.getType() == actual.getType() &&
+               expected.getSequence() == actual.getSequence() &&
+               expected.getOperation().getCSN().equals( actual.getOperation().getCSN() ) &&
+               expected.getOperation().getClass() == actual.getOperation().getClass();
+    }
+}

Added: directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LoginAckMessageCodecTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LoginAckMessageCodecTest.java?view=auto&rev=463366
==============================================================================
--- directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LoginAckMessageCodecTest.java (added)
+++ directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LoginAckMessageCodecTest.java Thu Oct 12 11:33:14 2006
@@ -0,0 +1,34 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.mitosis.service.protocol.codec;
+
+import org.apache.directory.mitosis.common.ReplicaId;
+import org.apache.directory.mitosis.service.protocol.codec.LoginAckMessageDecoder;
+import org.apache.directory.mitosis.service.protocol.codec.LoginAckMessageEncoder;
+import org.apache.directory.mitosis.service.protocol.message.LoginAckMessage;
+
+public class LoginAckMessageCodecTest extends AbstractMessageCodecTest {
+
+    public LoginAckMessageCodecTest() {
+        super( new LoginAckMessage( 1234, 5678, new ReplicaId( "ReplicaABCD" ) ),
+               new LoginAckMessageEncoder(),
+               new LoginAckMessageDecoder() );
+    }
+}

Added: directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LoginMessageCodecTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LoginMessageCodecTest.java?view=auto&rev=463366
==============================================================================
--- directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LoginMessageCodecTest.java (added)
+++ directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/protocol/codec/LoginMessageCodecTest.java Thu Oct 12 11:33:14 2006
@@ -0,0 +1,34 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.mitosis.service.protocol.codec;
+
+import org.apache.directory.mitosis.common.ReplicaId;
+import org.apache.directory.mitosis.service.protocol.codec.LoginMessageDecoder;
+import org.apache.directory.mitosis.service.protocol.codec.LoginMessageEncoder;
+import org.apache.directory.mitosis.service.protocol.message.LoginMessage;
+
+public class LoginMessageCodecTest extends AbstractMessageCodecTest {
+
+    public LoginMessageCodecTest() {
+        super( new LoginMessage( 1234, new ReplicaId( "myReplica0" ) ),
+               new LoginMessageEncoder(),
+               new LoginMessageDecoder() );
+    }
+}

Added: directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStoreTest.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStoreTest.java?view=auto&rev=463366
==============================================================================
--- directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStoreTest.java (added)
+++ directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/store/derby/DerbyReplicationStoreTest.java Thu Oct 12 11:33:14 2006
@@ -0,0 +1,409 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.mitosis.store.derby;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import javax.naming.Name;
+import javax.naming.directory.BasicAttribute;
+import javax.naming.directory.BasicAttributes;
+import javax.naming.ldap.LdapName;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.directory.server.core.DirectoryService;
+import org.apache.directory.server.core.DirectoryServiceConfiguration;
+import org.apache.directory.server.core.DirectoryServiceListener;
+import org.apache.directory.server.core.configuration.MutableStartupConfiguration;
+import org.apache.directory.server.core.configuration.StartupConfiguration;
+import org.apache.directory.server.core.interceptor.InterceptorChain;
+import org.apache.directory.server.core.partition.PartitionNexus;
+import org.apache.directory.server.core.schema.global.GlobalRegistries;
+import org.apache.directory.mitosis.common.CSN;
+import org.apache.directory.mitosis.common.CSNFactory;
+import org.apache.directory.mitosis.common.CSNVector;
+import org.apache.directory.mitosis.common.ReplicaId;
+import org.apache.directory.mitosis.common.SimpleCSN;
+import org.apache.directory.mitosis.common.SimpleCSNFactory;
+import org.apache.directory.mitosis.common.SimpleUUIDFactory;
+import org.apache.directory.mitosis.common.UUID;
+import org.apache.directory.mitosis.common.UUIDFactory;
+import org.apache.directory.mitosis.configuration.ReplicationConfiguration;
+import org.apache.directory.mitosis.operation.AddAttributeOperation;
+import org.apache.directory.mitosis.operation.AddEntryOperation;
+import org.apache.directory.mitosis.operation.CompositeOperation;
+import org.apache.directory.mitosis.operation.DeleteAttributeOperation;
+import org.apache.directory.mitosis.operation.Operation;
+import org.apache.directory.mitosis.operation.ReplaceAttributeOperation;
+import org.apache.directory.mitosis.store.ReplicationLogIterator;
+import org.apache.directory.mitosis.store.ReplicationStoreException;
+import org.apache.directory.mitosis.store.derby.DerbyReplicationStore;
+
+public class DerbyReplicationStoreTest extends TestCase
+{
+    private static final ReplicaId REPLICA_ID = new ReplicaId( "TEST_REPLICA" );
+    private static final ReplicaId OTHER_REPLICA_ID = new ReplicaId( "OTHER_REPLICA" );
+    private static final ReplicaId OTHER_REPLICA_ID_2 = new ReplicaId( "OTHER_REPLICA_2" );
+    private static final File DB_PATH = new File( "target/testDB" );
+
+    private final UUIDFactory uuidFactory = new SimpleUUIDFactory();
+    private final CSNFactory csnFactory = new SimpleCSNFactory();
+    private DerbyReplicationStore store;
+    private int testCount;
+    private long startTime;
+
+    public void setUp() throws Exception
+    {
+        dropDatabase();
+        startupDatabase( REPLICA_ID );
+        initStopWatch();
+    }
+
+    private void startupDatabase( ReplicaId replicaId ) throws Exception
+    {
+        // Prepare configuration
+        ReplicationConfiguration cfg = new ReplicationConfiguration();
+        cfg.setReplicaId( replicaId );
+        
+        // Open store
+        store = new DerbyReplicationStore();
+        store.setTablePrefix( "TEST_" );
+        store.open( new DirectoryServiceConfigurationImpl(), cfg );
+    }
+    
+    public void tearDown() throws Exception
+    {
+        store.close();
+        dropDatabase();
+    }
+
+    private void dropDatabase() throws IOException {
+        FileUtils.deleteDirectory( DB_PATH );
+        File logFile = new File( "derby.log" );
+        if( !logFile.delete() )
+        {
+            logFile.deleteOnExit();
+        }
+    }
+
+    public void testOperations() throws Exception
+    {
+        subTestReopen();
+        printElapsedTime( "Reopen" );
+        subTestUUID();
+        printElapsedTime( "UUID" );
+        subTestEmptyLog();
+        printElapsedTime( "EmptyLog" );
+        subTestWriteLog();
+        printElapsedTime( "WriteLog" );
+        subTestRemoveLogs();
+        printElapsedTime( "RemoveLogs" );
+        subTestVectors();
+        printElapsedTime( "Vectors" );
+    }
+    
+    private void subTestReopen() throws Exception
+    {
+        store.close();
+        try
+        {
+            startupDatabase( OTHER_REPLICA_ID );
+            Assert.fail( "Store cannot start up with wrong replica ID." );
+        }
+        catch( ReplicationStoreException e )
+        {
+        }
+        startupDatabase( REPLICA_ID );
+    }
+    
+    private void subTestUUID() throws Exception
+    {
+        UUID uuid = uuidFactory.newInstance();
+        Name name = new LdapName( "ou=a, ou=b" );
+        Assert.assertTrue( store.putUUID( uuid, name ) );
+        Assert.assertEquals( name, store.getDN( uuid ) );
+        Assert.assertTrue( store.removeUUID( uuid ) );
+        Assert.assertFalse( store.removeUUID( uuid ) );
+        Assert.assertNull( store.getDN( uuid ) );
+    }
+    
+    private void subTestEmptyLog() throws Exception
+    {
+        ReplicationLogIterator it;
+        
+        it = store.getLogs( csnFactory.newInstance( REPLICA_ID ), true );
+        Assert.assertFalse( it.next() );
+        it.close();
+        it = store.getLogs( csnFactory.newInstance( REPLICA_ID ), false );
+        Assert.assertFalse( it.next() );
+        it.close();
+        it = store.getLogs( csnFactory.newInstance( OTHER_REPLICA_ID ), true );
+        Assert.assertFalse( it.next() );
+        it.close();
+        it = store.getLogs( csnFactory.newInstance( OTHER_REPLICA_ID ), false );
+        Assert.assertFalse( it.next() );
+        it.close();
+        
+        Assert.assertEquals( 0, store.getLogSize() );
+    }
+
+    private void subTestWriteLog() throws Exception
+    {
+        CSN csn = csnFactory.newInstance( REPLICA_ID );
+        CompositeOperation op1 = new CompositeOperation( csn );
+        op1.add( new AddEntryOperation( csn, new LdapName( "ou=a" ), "ou=a", new BasicAttributes() ) );
+        op1.add( new AddAttributeOperation( csn, new LdapName( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
+        op1.add( new ReplaceAttributeOperation( csn, new LdapName( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
+        op1.add( new DeleteAttributeOperation( csn, new LdapName( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
+        
+        store.putLog( op1 );
+        testGetLogs( csn, op1 );
+
+        csn = csnFactory.newInstance( OTHER_REPLICA_ID );
+        CompositeOperation op2 = new CompositeOperation( csn );
+        op2.add( new AddEntryOperation( csn, new LdapName( "ou=a" ), "ou=a", new BasicAttributes() ) );
+        op2.add( new AddAttributeOperation( csn, new LdapName( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
+        op2.add( new ReplaceAttributeOperation( csn, new LdapName( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
+        op2.add( new DeleteAttributeOperation( csn, new LdapName( "ou=a" ), new BasicAttribute( "id", "valie" ) ) );
+        
+        store.putLog( op2 );
+        testGetLogs( csn, op2 );
+        
+        Assert.assertEquals( 2, store.getLogSize() );
+        Assert.assertEquals( 1, store.getLogSize( REPLICA_ID ) );
+        Assert.assertEquals( 1, store.getLogSize( OTHER_REPLICA_ID ) );
+        
+        // Test getLogs(CSNVector, true)
+        List expected = new ArrayList();
+        expected.add( op1 );
+        expected.add( op2 );
+        CSNVector updateVector = new CSNVector();
+        testGetLogs( updateVector, true, expected );
+        updateVector = new CSNVector();
+        updateVector.setCSN( op1.getCSN() );
+        testGetLogs( updateVector, true, expected );
+        updateVector = new CSNVector();
+        updateVector.setCSN( op2.getCSN() );
+        testGetLogs( updateVector, true, expected );
+        updateVector = new CSNVector();
+        updateVector.setCSN( op1.getCSN() );
+        updateVector.setCSN( op2.getCSN() );
+        testGetLogs( updateVector, true, expected );
+
+        // Test getLogs(CSNVector, false)
+        expected = new ArrayList();
+        expected.add( op1 );
+        expected.add( op2 );
+        updateVector = new CSNVector();
+        testGetLogs( updateVector, false, expected );
+        expected = new ArrayList();
+        expected.add( op2 );
+        updateVector = new CSNVector();
+        updateVector.setCSN( op1.getCSN() );
+        testGetLogs( updateVector, false, expected );
+        expected = new ArrayList();
+        expected.add( op1 );
+        updateVector = new CSNVector();
+        updateVector.setCSN( op2.getCSN() );
+        testGetLogs( updateVector, false, expected );
+        expected = new ArrayList();
+        updateVector = new CSNVector();
+        updateVector.setCSN( op1.getCSN() );
+        updateVector.setCSN( op2.getCSN() );
+        testGetLogs( updateVector, false, expected );
+    }
+    
+    private void subTestRemoveLogs()
+    {
+        CSN csn;
+        ReplicationLogIterator it;
+        
+        it = store.getLogs( new SimpleCSN( 0, REPLICA_ID, 0 ), false );
+        it.next();
+        csn = it.getOperation().getCSN();
+        it.close();
+        
+        Assert.assertEquals( 0, store.removeLogs( csn, false ) );
+        Assert.assertEquals( 1, store.removeLogs( csn, true ) );
+        Assert.assertEquals( 0, store.getLogSize( REPLICA_ID ) );
+
+        it = store.getLogs( new SimpleCSN( 0, OTHER_REPLICA_ID, 0 ), false );
+        Assert.assertTrue( it.next() );
+        csn = it.getOperation().getCSN();
+        it.close();
+        
+        Assert.assertEquals( 0, store.removeLogs( csn, false ) );
+        Assert.assertEquals( 1, store.removeLogs( csn, true ) );
+        Assert.assertEquals( 0, store.getLogSize( OTHER_REPLICA_ID ) );
+        
+        Assert.assertEquals( 0, store.getLogSize() );
+    }
+    
+    private void subTestVectors() throws Exception
+    {
+        CSN csnA = new SimpleCSN( 0, REPLICA_ID, 0 );
+        CSN csnB = new SimpleCSN( 1, REPLICA_ID, 0 );
+        CSN csnC = new SimpleCSN( 0, OTHER_REPLICA_ID_2, 0 );
+        CSN csnD = new SimpleCSN( 0, OTHER_REPLICA_ID_2, 1 );
+        store.putLog( new Operation( csnA ) );
+        store.putLog( new Operation( csnB ) );
+        store.putLog( new Operation( csnC ) );
+        store.putLog( new Operation( csnD ) );
+        
+        Set expectedKnownReplicaIds = new HashSet();
+        expectedKnownReplicaIds.add( REPLICA_ID );
+        expectedKnownReplicaIds.add( OTHER_REPLICA_ID );
+        expectedKnownReplicaIds.add( OTHER_REPLICA_ID_2 );
+        
+        Assert.assertEquals( expectedKnownReplicaIds, store.getKnownReplicaIds() );
+        
+        CSNVector expectedUpdateVector = new CSNVector();
+        expectedUpdateVector.setCSN( csnB );
+        expectedUpdateVector.setCSN( csnD );
+        
+        Assert.assertEquals( expectedUpdateVector, store.getUpdateVector() );
+
+        CSNVector expectedPurgeVector = new CSNVector();
+        expectedPurgeVector.setCSN( csnA );
+        expectedPurgeVector.setCSN( csnC );
+        
+        Assert.assertEquals( expectedPurgeVector, store.getPurgeVector() );
+    }
+    
+    private void testGetLogs( CSN csn, Operation operation )
+    {
+        List operations = new ArrayList();
+        operations.add( operation );
+        testGetLogs( csn, operations );
+    }
+
+    private void testGetLogs( CSN csn, List operations )
+    {
+        Iterator it = operations.iterator();
+        ReplicationLogIterator rit;
+        
+        rit = store.getLogs( csn, true );
+        testGetLogs( it, rit );
+        
+        rit = store.getLogs( csn, false );
+        Assert.assertFalse( rit.next() );
+        rit.close();
+    }
+
+    private void testGetLogs( CSNVector updateVector, boolean inclusive, List operations )
+    {
+        Iterator it = operations.iterator();
+        ReplicationLogIterator rit;
+        
+        rit = store.getLogs( updateVector, inclusive );
+        testGetLogs( it, rit );
+    }
+
+    private void testGetLogs( Iterator expectedIt, ReplicationLogIterator actualIt )
+    {
+        while( expectedIt.hasNext() )
+        {
+            Operation expected = ( Operation ) expectedIt.next();
+            Assert.assertTrue( actualIt.next() );
+
+            Operation actual = actualIt.getOperation();
+            Assert.assertEquals( expected.getCSN(), actual.getCSN() );
+            assertEquals( expected, actual );
+        }
+        Assert.assertFalse( actualIt.next() );
+        actualIt.close();
+    }
+
+    private void initStopWatch()
+    {
+        startTime = System.currentTimeMillis();
+    }
+    
+    private void printElapsedTime( String testName )
+    {
+        long endTime = System.currentTimeMillis();
+        System.out.println( "Subtest #" + ( ++testCount ) + " [" + testName + "]: " + ( endTime - startTime ) + " ms" );
+        startTime = System.currentTimeMillis();
+    }
+    
+    private static void assertEquals( Operation expected, Operation actual )
+    {
+        Assert.assertEquals( expected.toString(), actual.toString() );
+    }
+    
+    private static class DirectoryServiceConfigurationImpl implements DirectoryServiceConfiguration
+    {
+        public DirectoryService getService()
+        {
+            return null;
+        }
+
+        public String getInstanceId()
+        {
+            return null;
+        }
+
+        public Hashtable getEnvironment()
+        {
+            return null;
+        }
+
+        public StartupConfiguration getStartupConfiguration()
+        {
+            MutableStartupConfiguration cfg = new MutableStartupConfiguration();
+            cfg.setWorkingDirectory( DB_PATH );
+            return cfg;
+        }
+
+        public GlobalRegistries getGlobalRegistries()
+        {
+            return null;
+        }
+
+        public PartitionNexus getPartitionNexus()
+        {
+            return null;
+        }
+
+        public InterceptorChain getInterceptorChain()
+        {
+            return null;
+        }
+
+        public boolean isFirstStart()
+        {
+            return false;
+        }
+
+        public DirectoryServiceListener getServiceListener()
+        {
+            return null;
+        }
+    }
+}