From 8a91b6bf2b80d9237af8de3d7683714807dbcc4a Mon Sep 17 00:00:00 2001 From: Peter Nosal Date: Fri, 20 May 2016 12:14:57 +0200 Subject: [PATCH 1/1] Bug 5947: Increasing code coverage for mdsal project - increasing coverage for module mdsal-dom Change-Id: I768341d7a9eded8fb080de3b0d40e2b9e9f44b35 Signed-off-by: Peter Nosal --- .../binding/api/DataTreeIdentifierTest.java | 63 ++++++++++ .../impl/UnionValueOptionContextTest.java | 58 +++++++++ .../yang/binding/InstanceIdentifierTest.java | 14 +-- .../dom/api/DOMDataTreeIdentifierTest.java | 110 ++++++++++++++++++ .../mdsal/dom/api/DOMExceptionsTest.java | 96 +++++++++++++++ .../mdsal/dom/api/DOMRpcIdentifierTest.java | 58 +++++++++ .../DOMEntityOwnershipChangeTest.java | 27 +++++ .../dom/api/clustering/DOMEntityTest.java | 17 ++- .../GlobalDOMRpcRoutingTableEntryTest.java | 56 +++++++++ .../mdsal/dom/broker/TestUtils.java | 85 ++++++++++++++ ...actionCommitFailedExceptionMapperTest.java | 19 +++ .../UnknownDOMRpcRoutingTableEntryTest.java | 60 ++++++++++ .../mdsal/dom/broker/test/DOMBrokerTest.java | 97 +++++++++++---- .../broker/test/DOMDataTreeListenerTest.java | 52 +++++---- 14 files changed, 753 insertions(+), 59 deletions(-) create mode 100644 binding/mdsal-binding-api/src/test/java/org/opendaylight/mdsal/binding/api/DataTreeIdentifierTest.java create mode 100644 binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/yangtools/binding/data/codec/impl/UnionValueOptionContextTest.java create mode 100644 dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/DOMDataTreeIdentifierTest.java create mode 100644 dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/DOMExceptionsTest.java create mode 100644 dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/DOMRpcIdentifierTest.java create mode 100644 dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/clustering/DOMEntityOwnershipChangeTest.java create mode 100644 dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/GlobalDOMRpcRoutingTableEntryTest.java create mode 100644 dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/TestUtils.java create mode 100644 dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/TransactionCommitFailedExceptionMapperTest.java create mode 100644 dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/UnknownDOMRpcRoutingTableEntryTest.java diff --git a/binding/mdsal-binding-api/src/test/java/org/opendaylight/mdsal/binding/api/DataTreeIdentifierTest.java b/binding/mdsal-binding-api/src/test/java/org/opendaylight/mdsal/binding/api/DataTreeIdentifierTest.java new file mode 100644 index 0000000000..c5427c2353 --- /dev/null +++ b/binding/mdsal-binding-api/src/test/java/org/opendaylight/mdsal/binding/api/DataTreeIdentifierTest.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.api; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.yangtools.yang.binding.DataContainer; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class DataTreeIdentifierTest { + private static final DataTreeIdentifier TEST_IDENTIFIER1 = DataTreeIdentifier.create( + LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(TestDataObject1.class)); + private static final DataTreeIdentifier TEST_IDENTIFIER2 = DataTreeIdentifier.create( + LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(TestDataObject2.class)); + + @Test + public void containsTest() { + assertTrue("Contains", TEST_IDENTIFIER1.contains(DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, + InstanceIdentifier.create(TestDataObject1.class)))); + assertFalse("Not Contains", TEST_IDENTIFIER1.contains(TEST_IDENTIFIER2)); + } + + @Test + public void hashCodeTest() { + assertEquals("hashCode", TEST_IDENTIFIER1.hashCode(), DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, + InstanceIdentifier.create(TestDataObject1.class)).hashCode()); + assertNotEquals("hashCode", TEST_IDENTIFIER1.hashCode(), TEST_IDENTIFIER2.hashCode()); + } + + @Test + public void equalsTest() { + assertTrue("Equals", TEST_IDENTIFIER1.equals(DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, + InstanceIdentifier.create(TestDataObject1.class)))); + assertFalse("Different", TEST_IDENTIFIER1.equals(DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, + InstanceIdentifier.create(TestDataObject1.class)))); + assertFalse("Different", TEST_IDENTIFIER1.equals(TEST_IDENTIFIER2)); + } + + private static class TestDataObject1 implements DataObject { + @Override + public Class getImplementedInterface() { + return null; + } + } + + private static class TestDataObject2 implements DataObject { + @Override + public Class getImplementedInterface() { + return null; + } + } +} \ No newline at end of file diff --git a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/yangtools/binding/data/codec/impl/UnionValueOptionContextTest.java b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/yangtools/binding/data/codec/impl/UnionValueOptionContextTest.java new file mode 100644 index 0000000000..ca97d36883 --- /dev/null +++ b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/yangtools/binding/data/codec/impl/UnionValueOptionContextTest.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.binding.data.codec.impl; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; + +import java.lang.reflect.Method; +import org.junit.Before; +import org.junit.Test; + +public class UnionValueOptionContextTest { + private static UnionValueOptionContext TEST_UVOC_1; + private static UnionValueOptionContext TEST_UVOC_2; + + @Before + public void setUp() throws Exception { + final Method methodFoo1 = TestDataObject1.class.getMethod("foo"); + final Method methodFoo2 = TestDataObject2.class.getMethod("foo"); + TEST_UVOC_1 = new UnionValueOptionContext(TestDataObject1.class, methodFoo1, ValueTypeCodec.EMPTY_CODEC); + TEST_UVOC_2 = new UnionValueOptionContext(TestDataObject2.class, methodFoo2, ValueTypeCodec.EMPTY_CODEC); + } + + @Test + public void hashCodeTest() throws Exception { + final Method methodFoo1 = TestDataObject1.class.getMethod("foo"); + final UnionValueOptionContext test_uvoc = new UnionValueOptionContext(TestDataObject1.class, methodFoo1, + ValueTypeCodec.EMPTY_CODEC); + + assertEquals("HashCode", test_uvoc.hashCode(), TEST_UVOC_1.hashCode()); + assertNotEquals("HashCode", TEST_UVOC_1.hashCode(), TEST_UVOC_2.hashCode()); + } + + @Test + public void equalsTest() throws Exception { + final Method methodFoo1 = TestDataObject1.class.getMethod("foo"); + final UnionValueOptionContext test_uvoc = new UnionValueOptionContext(TestDataObject1.class, methodFoo1, + ValueTypeCodec.EMPTY_CODEC); + + assertTrue("Equals", TEST_UVOC_1.equals(test_uvoc)); + assertFalse("Not equals", TEST_UVOC_1.equals(TEST_UVOC_2)); + } + + protected static final class TestDataObject1 { + public void foo() {} + } + + protected static final class TestDataObject2 { + public void foo() {} + } +} \ No newline at end of file diff --git a/binding/yang-binding/src/test/java/org/opendaylight/yangtools/yang/binding/InstanceIdentifierTest.java b/binding/yang-binding/src/test/java/org/opendaylight/yangtools/yang/binding/InstanceIdentifierTest.java index 97ee4feded..189818f96e 100644 --- a/binding/yang-binding/src/test/java/org/opendaylight/yangtools/yang/binding/InstanceIdentifierTest.java +++ b/binding/yang-binding/src/test/java/org/opendaylight/yangtools/yang/binding/InstanceIdentifierTest.java @@ -12,9 +12,8 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; + import org.junit.Test; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.test.mock.FooChild; import org.opendaylight.yangtools.yang.binding.test.mock.InstantiatedFoo; import org.opendaylight.yangtools.yang.binding.test.mock.Node; @@ -27,7 +26,6 @@ public class InstanceIdentifierTest { @Test public void constructWithPredicates() { - InstanceIdentifier nodes = InstanceIdentifier.builder(Nodes.class).build(); assertNotNull(nodes); @@ -44,9 +42,9 @@ public class InstanceIdentifierTest { @Test public void fluentConstruction() { - InstanceIdentifier nodes = InstanceIdentifier.builder(Nodes.class).build(); - InstanceIdentifier node = InstanceIdentifier.builder(Nodes.class).child(Node.class,new NodeKey(10)).build(); + InstanceIdentifier node = + InstanceIdentifier.builder(Nodes.class).child(Node.class,new NodeKey(10)).build(); assertNotNull(node); assertEquals(Node.class, node.getTargetType()); @@ -57,7 +55,8 @@ public class InstanceIdentifierTest { @Test public void negativeContains() { - InstanceIdentifier fooChild = InstanceIdentifier.builder(Nodes.class).child(InstantiatedFoo.class).child(FooChild.class).build(); + InstanceIdentifier fooChild = + InstanceIdentifier.builder(Nodes.class).child(InstantiatedFoo.class).child(FooChild.class).build(); InstanceIdentifier nodeTen = InstanceIdentifier.builder(Nodes.class) // .child(Node.class,new NodeKey(10)).build(); @@ -137,7 +136,8 @@ public class InstanceIdentifierTest { @Test public void firstIdentifierOfTest() { - InstanceIdentifier instanceIdentifier = InstanceIdentifier.builder(Nodes.class).child(Node.class,new NodeKey(10)).build(); + InstanceIdentifier instanceIdentifier = + InstanceIdentifier.builder(Nodes.class).child(Node.class,new NodeKey(10)).build(); InstanceIdentifier nodesIdentifier = instanceIdentifier.firstIdentifierOf(Nodes.class); assertNotNull(nodesIdentifier); diff --git a/dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/DOMDataTreeIdentifierTest.java b/dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/DOMDataTreeIdentifierTest.java new file mode 100644 index 0000000000..c2b28e4fa6 --- /dev/null +++ b/dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/DOMDataTreeIdentifierTest.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.dom.api; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.net.URI; +import org.junit.Test; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; + +public class DOMDataTreeIdentifierTest { + private static final String REF_LISTS = "ref-lists"; + private static final String TEST_LISTS = "test-lists"; + private static final String COMPARE_FIRST_LISTS = "A-test-lists"; + private static final String COMPARE_SECOND_LISTS = "B-test-lists"; + private static final QNameModule TEST_MODULE = QNameModule.create(URI.create( + "urn:opendaylight:params:xml:ns:yang:controller:md:sal:test:store"), null); + private static final YangInstanceIdentifier REF_YII_IID = YangInstanceIdentifier.create( + new YangInstanceIdentifier.NodeIdentifier(QName.create(TEST_MODULE, REF_LISTS))); + private static final YangInstanceIdentifier TEST_YII_IID = YangInstanceIdentifier.create( + new YangInstanceIdentifier.NodeIdentifier(QName.create(TEST_MODULE, TEST_LISTS))); + private static final DOMDataTreeIdentifier REF_TREE = new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, + REF_YII_IID); + private static final DOMDataTreeIdentifier TEST_DIFF_TREE = new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, + TEST_YII_IID); + + @Test + public void constructTest() { + assertNotNull("Instantiation", new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, REF_YII_IID)); + } + + @Test(expected = NullPointerException.class) + public void firstArgumentNullTest() throws Exception { + new DOMDataTreeIdentifier(null, REF_YII_IID); + } + + @Test(expected = NullPointerException.class) + public void secondArgumentNullTest() throws Exception { + new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, null); + } + + @Test + public void hashCodeTest() { + assertEquals("hashCode", REF_TREE.hashCode(), new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, + REF_YII_IID).hashCode()); + assertNotEquals("hashCode", REF_TREE.hashCode(), TEST_DIFF_TREE.hashCode()); + } + + @Test + public void equalsTest() { + assertTrue("Equals same", REF_TREE.equals(new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, + REF_YII_IID))); + assertFalse("Different DataStoreType", REF_TREE.equals(new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, + REF_YII_IID))); + assertTrue("Equals same instance", REF_TREE.equals(REF_TREE)); + assertFalse("Different object", REF_TREE.equals(new Object())); + assertFalse("Different instance", REF_TREE.equals(TEST_DIFF_TREE)); + } + + @Test + public void compareToTest() { + final YangInstanceIdentifier compareFirstIid = YangInstanceIdentifier.create( + new YangInstanceIdentifier.NodeIdentifier(QName.create(TEST_MODULE, COMPARE_FIRST_LISTS))); + final YangInstanceIdentifier compareSecondIid = YangInstanceIdentifier.create( + new YangInstanceIdentifier.NodeIdentifier(QName.create(TEST_MODULE, COMPARE_SECOND_LISTS))); + + assertEquals("Compare same to same", REF_TREE.compareTo(new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, + REF_YII_IID)), 0); + assertNotEquals("Compare same to same with different datastore", REF_TREE.compareTo(new DOMDataTreeIdentifier( + LogicalDatastoreType.CONFIGURATION, REF_YII_IID)), 0); + assertEquals("Compare same to same with different datastore", + new DOMDataTreeIdentifier( + LogicalDatastoreType.OPERATIONAL, + YangInstanceIdentifier.create( + YangInstanceIdentifier.NodeIdentifier.create(QName.create(TEST_MODULE, REF_LISTS)), + YangInstanceIdentifier.NodeIdentifier.create(QName.create(TEST_MODULE, TEST_LISTS)))) + .compareTo(REF_TREE), 1); + assertTrue("Compare first to second", new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, + compareFirstIid).compareTo(new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, + compareSecondIid)) < 0); + assertTrue("Compare second to first", new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, + compareSecondIid).compareTo(new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, + compareFirstIid)) > 0); + } + + @Test + public void containsTest() { + assertTrue("Contains", REF_TREE.contains(new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, + REF_YII_IID))); + assertEquals("Not contains", false, REF_TREE.contains(TEST_DIFF_TREE)); + } + + @Test + public void toStringTest() { + assertTrue("ToString", REF_TREE.toString().contains(REF_TREE.getRootIdentifier().toString()) && REF_TREE + .toString().contains(REF_TREE.getDatastoreType().toString())); + } +} \ No newline at end of file diff --git a/dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/DOMExceptionsTest.java b/dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/DOMExceptionsTest.java new file mode 100644 index 0000000000..3c8bd7533e --- /dev/null +++ b/dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/DOMExceptionsTest.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.dom.api; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.net.URI; +import org.junit.Test; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; + +public class DOMExceptionsTest { + private static final String TEST_MESSAGE = "TestMessage"; + private static final String TEST_LISTS = "test-lists"; + private static final QNameModule TEST_MODULE = QNameModule.create(URI.create( + "urn:opendaylight:params:xml:ns:yang:controller:md:sal:test:store"), null); + private static final YangInstanceIdentifier TEST_YI_ID = YangInstanceIdentifier.create( + new YangInstanceIdentifier.NodeIdentifier(QName.create(TEST_MODULE, TEST_LISTS))); + private static final DOMDataTreeIdentifier TEST_TREE = new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, + TEST_YI_ID); + + @Test(expected = DOMDataTreeInaccessibleException.class) + public void DOMDataTreeInaccessibleExceptionTest() throws Exception { + final DOMDataTreeInaccessibleException testExc = new DOMDataTreeInaccessibleException(TEST_TREE, TEST_MESSAGE); + assertTrue(testExc.getMessage().contains(TEST_MESSAGE)); + assertNotNull(testExc.getTreeIdentifier()); + assertEquals(TEST_TREE, testExc.getTreeIdentifier()); + + throw new DOMDataTreeInaccessibleException(TEST_TREE, TEST_MESSAGE, new Throwable()); + } + + @Test(expected = DOMDataTreeListeningException.class) + public void DOMDataTreeListeningExceptionTest() throws Exception { + final DOMDataTreeListeningException testExc = new DOMDataTreeListeningException(TEST_MESSAGE); + assertTrue(testExc.getMessage().contains(TEST_MESSAGE)); + + throw new DOMDataTreeListeningException(TEST_MESSAGE, new Throwable()); + } + + @Test(expected = DOMDataTreeLoopException.class) + public void DOMDataTreeLoopExceptionTest() throws Exception { + final DOMDataTreeLoopException testExc = new DOMDataTreeLoopException(TEST_MESSAGE); + assertTrue(testExc.getMessage().contains(TEST_MESSAGE)); + + throw new DOMDataTreeLoopException(TEST_MESSAGE, new Throwable()); + } + + @Test(expected = DOMDataTreeProducerBusyException.class) + public void DOMDataTreeProducerBusyExceptionTest() throws Exception { + final DOMDataTreeProducerBusyException testExc = new DOMDataTreeProducerBusyException(TEST_MESSAGE); + assertTrue(testExc.getMessage().contains(TEST_MESSAGE)); + + throw new DOMDataTreeProducerBusyException(TEST_MESSAGE, new Throwable()); + } + + @Test(expected = DOMDataTreeProducerException.class) + public void DOMDataTreeProducerExceptionTest() throws Exception { + final DOMDataTreeProducerException testExc = new DOMDataTreeProducerException(TEST_MESSAGE); + assertTrue(testExc.getMessage().contains(TEST_MESSAGE)); + + throw new DOMDataTreeProducerException(TEST_MESSAGE, new Throwable()); + } + + @Test(expected = DOMDataTreeShardingConflictException.class) + public void DOMDataTreeShardingConflictExceptionTest() throws Exception { + final DOMDataTreeShardingConflictException testExc = new DOMDataTreeShardingConflictException(TEST_MESSAGE); + assertTrue(testExc.getMessage().contains(TEST_MESSAGE)); + + throw new DOMDataTreeShardingConflictException(TEST_MESSAGE, new Throwable()); + } + + @Test(expected = DOMNotificationRejectedException.class) + public void DOMNotificationRejectedExceptionTest() throws Exception { + final DOMNotificationRejectedException testExc = new DOMNotificationRejectedException(TEST_MESSAGE); + assertTrue(testExc.getMessage().contains(TEST_MESSAGE)); + + throw new DOMNotificationRejectedException(TEST_MESSAGE, new Throwable()); + } + + @Test(expected = DOMRpcImplementationNotAvailableException.class) + public void DOMRpcImplementationNotAvailableExceptionTest() throws Exception { + final DOMRpcImplementationNotAvailableException testExc = new DOMRpcImplementationNotAvailableException(TEST_MESSAGE); + assertTrue(testExc.getMessage().contains(TEST_MESSAGE)); + + throw new DOMRpcImplementationNotAvailableException(new Throwable(), TEST_MESSAGE, new Object()); + } +} \ No newline at end of file diff --git a/dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/DOMRpcIdentifierTest.java b/dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/DOMRpcIdentifierTest.java new file mode 100644 index 0000000000..e486388236 --- /dev/null +++ b/dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/DOMRpcIdentifierTest.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.dom.api; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; + +import java.net.URI; +import org.junit.Test; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; + +public class DOMRpcIdentifierTest { + private static final String LOCAL_IDENT = "local"; + private static final QNameModule TEST_MODULE = QNameModule.create(URI.create( + "urn:opendaylight:params:xml:ns:yang:controller:md:sal:test:store"), null); + private static final DOMRpcIdentifier GLOBAL = DOMRpcIdentifier.create(SchemaPath.SAME, null); + private static final DOMRpcIdentifier LOCAL = DOMRpcIdentifier.create(SchemaPath.ROOT,YangInstanceIdentifier.create( + new NodeIdentifier(QName.create(TEST_MODULE, LOCAL_IDENT)))); + + @Test + public void createTest() { + assertTrue("Global instance", GLOBAL.getClass().getCanonicalName().contains("Global")); + assertTrue("Local instance", LOCAL.getClass().getCanonicalName().contains("Local")); + } + + @Test + public void hashCodeTest() { + assertEquals("hashCode", GLOBAL.hashCode(), DOMRpcIdentifier.create(SchemaPath.ROOT).hashCode()); + assertNotEquals("hashCode", GLOBAL.hashCode(), LOCAL.hashCode()); + } + + @Test + public void equalsTest() { + assertTrue("Equals same", GLOBAL.equals(DOMRpcIdentifier.create(SchemaPath.SAME))); + assertTrue("Equals same instance", GLOBAL.equals(GLOBAL)); + assertFalse("Different object", GLOBAL.equals(new Object())); + assertFalse("Different instance", GLOBAL.equals(LOCAL)); + } + + @Test + public void toStringTest() { + assertTrue("ToString", GLOBAL.toString().contains(GLOBAL.getContextReference().toString()) && GLOBAL.toString() + .contains(GLOBAL.getType().toString())); + assertTrue("ToString", LOCAL.toString().contains(LOCAL.getContextReference().toString()) && LOCAL.toString() + .contains(LOCAL.getType().toString())); + } +} \ No newline at end of file diff --git a/dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/clustering/DOMEntityOwnershipChangeTest.java b/dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/clustering/DOMEntityOwnershipChangeTest.java new file mode 100644 index 0000000000..8f1169b503 --- /dev/null +++ b/dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/clustering/DOMEntityOwnershipChangeTest.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.dom.api.clustering; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.opendaylight.mdsal.common.api.clustering.EntityOwnershipChangeState; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; + +public class DOMEntityOwnershipChangeTest { + private static final String ENTITY_TYPE = "type"; + private static final YangInstanceIdentifier ID = YangInstanceIdentifier.of(QName.create("test")); + private static final DOMEntity ENTITY = new DOMEntity(ENTITY_TYPE, ID); + + @Test + public void createTest() { + assertNotNull(new DOMEntityOwnershipChange(ENTITY, EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED)); + assertNotNull(new DOMEntityOwnershipChange(ENTITY, EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED, false)); + } +} \ No newline at end of file diff --git a/dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/clustering/DOMEntityTest.java b/dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/clustering/DOMEntityTest.java index cfe15586cf..e82ecbbb54 100644 --- a/dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/clustering/DOMEntityTest.java +++ b/dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/clustering/DOMEntityTest.java @@ -7,8 +7,10 @@ */ package org.opendaylight.mdsal.dom.api.clustering; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; import static org.opendaylight.mdsal.dom.api.clustering.DOMEntity.ENTITY; -import static org.junit.Assert.*; + import java.util.List; import java.util.Map.Entry; import org.junit.Test; @@ -21,10 +23,12 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum * @author Thomas Pantelis */ public class DOMEntityTest { - static String ENTITY_TYPE1 = "type1"; - static String ENTITY_TYPE2 = "type2"; - static final YangInstanceIdentifier ID1 = YangInstanceIdentifier.of(QName.create("test", "2015-11-24", "one")); - static final YangInstanceIdentifier ID2 = YangInstanceIdentifier.of(QName.create("test", "2015-11-24", "two")); + private static String ENTITY_TYPE1 = "type1"; + private static String ENTITY_TYPE2 = "type2"; + private static final YangInstanceIdentifier ID1 = YangInstanceIdentifier.of(QName.create( + "test", "2015-11-24", "one")); + private static final YangInstanceIdentifier ID2 = YangInstanceIdentifier.of(QName.create( + "test", "2015-11-24", "two")); @Test public void testHashCode() { @@ -54,7 +58,8 @@ public class DOMEntityTest { assertEquals("pathArgs size", 2, pathArgs.size()); assertEquals("First PathArgument node type", ENTITY, pathArgs.get(0).getNodeType()); assertEquals("Second PathArgument node type", ENTITY, pathArgs.get(1).getNodeType()); - Entry key = ((NodeIdentifierWithPredicates) pathArgs.get(1)).getKeyValues().entrySet().iterator().next(); + Entry key = ((NodeIdentifierWithPredicates) pathArgs.get(1)).getKeyValues().entrySet() + .iterator().next(); assertEquals("Key node type", QName.create(ENTITY, "name"), key.getKey()); assertEquals("Key value", "foo", key.getValue()); } diff --git a/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/GlobalDOMRpcRoutingTableEntryTest.java b/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/GlobalDOMRpcRoutingTableEntryTest.java new file mode 100644 index 0000000000..0536cb620c --- /dev/null +++ b/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/GlobalDOMRpcRoutingTableEntryTest.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.dom.broker; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.Test; +import org.opendaylight.mdsal.dom.api.DOMRpcImplementation; +import org.opendaylight.mdsal.dom.api.DOMRpcImplementationNotAvailableException; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.model.api.RpcDefinition; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; + +public class GlobalDOMRpcRoutingTableEntryTest extends TestUtils { + + @Test + public void basicTest() throws Exception { + final Map> rpcImplementations = new HashMap<>(); + final List rpcImplementation = new ArrayList<>(); + final RpcDefinition rpcDefinition = mock(RpcDefinition.class); + final YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.builder().build(); + + doReturn(SchemaPath.ROOT).when(rpcDefinition).getPath(); + final GlobalDOMRpcRoutingTableEntry globalDOMRpcRoutingTableEntry = new GlobalDOMRpcRoutingTableEntry( + rpcDefinition, new HashMap<>()); + rpcImplementation.add(getTestRpcImplementation()); + rpcImplementations.put(yangInstanceIdentifier, rpcImplementation); + + assertTrue(globalDOMRpcRoutingTableEntry.getSchemaPath().equals(SchemaPath.ROOT)); + assertTrue(globalDOMRpcRoutingTableEntry.getImplementations().isEmpty()); + assertFalse(globalDOMRpcRoutingTableEntry.newInstance(rpcImplementations).getImplementations().isEmpty()); + assertTrue(globalDOMRpcRoutingTableEntry.newInstance(rpcImplementations).getImplementations().containsValue( + rpcImplementation)); + + try{ + globalDOMRpcRoutingTableEntry.newInstance(rpcImplementations) + .invokeRpc(TEST_CONTAINER).checkedGet(); + fail("Expected DOMRpcImplementationNotAvailableException"); + }catch(DOMRpcImplementationNotAvailableException e){ + assertTrue(e.getMessage().contains(EXCEPTION_TEXT)); + } + } +} \ No newline at end of file diff --git a/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/TestUtils.java b/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/TestUtils.java new file mode 100644 index 0000000000..07dd433b4a --- /dev/null +++ b/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/TestUtils.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.mdsal.dom.broker; + +import static org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes.leafNode; + +import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.Futures; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.opendaylight.mdsal.dom.api.DOMRpcException; +import org.opendaylight.mdsal.dom.api.DOMRpcIdentifier; +import org.opendaylight.mdsal.dom.api.DOMRpcImplementation; +import org.opendaylight.mdsal.dom.api.DOMRpcImplementationNotAvailableException; +import org.opendaylight.mdsal.dom.api.DOMRpcResult; +import org.opendaylight.mdsal.dom.broker.test.util.TestModel; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; +import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.impl.schema.Builders; +import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder; + +abstract class TestUtils { + + private static final DataContainerChild OUTER_LIST = ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME) + .withChild(ImmutableNodes.mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1)).build(); + + private static final String TOP_LEVEL_LIST_FOO_KEY_VALUE = "foo"; + private static final QName TOP_QNAME = TestModel.ID_QNAME; + private static final QName TOP_LEVEL_LIST_QNAME = QName.create(TOP_QNAME, "top-level-list"); + private static final QName TOP_LEVEL_LIST_KEY_QNAME = QName.create(TOP_QNAME, "name"); + + private final static MapEntryNode topLevelListNormalized = ImmutableMapEntryNodeBuilder.create() + .withNodeIdentifier( + new YangInstanceIdentifier.NodeIdentifierWithPredicates( + TOP_LEVEL_LIST_QNAME, TOP_LEVEL_LIST_KEY_QNAME, TOP_LEVEL_LIST_FOO_KEY_VALUE)) + .withChild(leafNode(TOP_LEVEL_LIST_KEY_QNAME, TOP_LEVEL_LIST_FOO_KEY_VALUE)) + .build(); + + private static final DataContainerChild CHILD_LIST = ImmutableNodes.mapNodeBuilder(TestModel.TEST_QNAME) + .withNodeIdentifier(NodeIdentifier.create(TestModel.TEST_QNAME)) + .withChild(topLevelListNormalized) + .build(); + + static final NormalizedNode TEST_CONTAINER = Builders.containerBuilder() + .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(TestModel.TEST_QNAME)) + .withChild(OUTER_LIST) + .build(); + + static final NormalizedNode TEST_CHILD = Builders.containerBuilder() + .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(TestModel.TEST_QNAME)) + .withChild(CHILD_LIST) + .build(); + + static final String EXCEPTION_TEXT = "TestRpcImplementationException"; + + static TestRpcImplementation getTestRpcImplementation(){ + return new TestRpcImplementation(); + } + + private static final class TestRpcImplementation implements DOMRpcImplementation { + private final CheckedFuture unknownRpc; + + private TestRpcImplementation() { + unknownRpc = Futures.immediateFailedCheckedFuture( + new DOMRpcImplementationNotAvailableException(EXCEPTION_TEXT)); + } + + @Nonnull + public CheckedFuture invokeRpc( + @Nonnull DOMRpcIdentifier rpc, @Nullable NormalizedNode input) { + return unknownRpc; + } + } +} diff --git a/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/TransactionCommitFailedExceptionMapperTest.java b/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/TransactionCommitFailedExceptionMapperTest.java new file mode 100644 index 0000000000..e593ab4bbd --- /dev/null +++ b/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/TransactionCommitFailedExceptionMapperTest.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.dom.broker; + +import org.junit.Test; +import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; + +public class TransactionCommitFailedExceptionMapperTest { + + @Test(expected = TransactionCommitFailedException.class) + public void create() throws Exception { + throw TransactionCommitFailedExceptionMapper.create("test").newWithCause("test_cause", new Throwable()); + } +} \ No newline at end of file diff --git a/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/UnknownDOMRpcRoutingTableEntryTest.java b/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/UnknownDOMRpcRoutingTableEntryTest.java new file mode 100644 index 0000000000..4a5a56ed29 --- /dev/null +++ b/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/UnknownDOMRpcRoutingTableEntryTest.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.dom.broker; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.Test; +import org.opendaylight.mdsal.dom.api.DOMRpcImplementation; +import org.opendaylight.mdsal.dom.broker.test.util.TestModel; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; + +public class UnknownDOMRpcRoutingTableEntryTest extends TestUtils { + private static final List TEST_LIST = new ArrayList<>(); + + @Test + public void basicTest() throws Exception { + final Map> emptyImpls = new HashMap<>(); + final List addList1 = new ArrayList<>(); + final List addList2 = new ArrayList<>(); + final DOMRpcImplementation testClass = getTestRpcImplementation(); + final UnknownDOMRpcRoutingTableEntry test = new UnknownDOMRpcRoutingTableEntry(SchemaPath.ROOT, emptyImpls); + + TEST_LIST.add(testClass); + emptyImpls.put(YangInstanceIdentifier.EMPTY, TEST_LIST); + + assertNotNull(test); + assertNotNull(test.newInstance(emptyImpls)); + assertNotNull(test.invokeRpc(TEST_CONTAINER)); + assertNotNull(test.getImplementations()); + assertEquals(test.getImplementations(YangInstanceIdentifier.EMPTY), TEST_LIST); + assertTrue(test.containsContext(YangInstanceIdentifier.EMPTY)); + assertTrue(test.registeredIdentifiers().contains(YangInstanceIdentifier.EMPTY)); + + addList1.add(YangInstanceIdentifier.EMPTY); + addList1.add(YangInstanceIdentifier.of(TestModel.TEST_QNAME)); + addList2.add(YangInstanceIdentifier.of(TestModel.TEST2_QNAME)); + + final AbstractDOMRpcRoutingTableEntry tst = test.add(testClass, addList1); + final AbstractDOMRpcRoutingTableEntry tst1 = tst.add(testClass, addList2); + final AbstractDOMRpcRoutingTableEntry tst2 = tst1.remove(testClass, addList1); + + assertEquals(1, test.getImplementations().size()); + assertEquals(2, tst.getImplementations().size()); + assertEquals(3, tst1.getImplementations().size()); + assertNotNull(tst2.getImplementations()); + assertEquals(2, tst2.getImplementations().size()); + } +} \ No newline at end of file diff --git a/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/test/DOMBrokerTest.java b/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/test/DOMBrokerTest.java index 9ed475c51a..b5f234bc6e 100644 --- a/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/test/DOMBrokerTest.java +++ b/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/test/DOMBrokerTest.java @@ -5,27 +5,15 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.mdsal.dom.broker.test; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.CONFIGURATION; import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.OPERATIONAL; -import org.opendaylight.mdsal.dom.broker.test.util.TestModel; - -import org.opendaylight.mdsal.dom.store.inmemory.InMemoryDOMDataStore; -import org.opendaylight.mdsal.dom.spi.store.DOMStore; - -import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.mdsal.common.api.TransactionCommitDeadlockException; -import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; -import org.opendaylight.mdsal.dom.broker.AbstractDOMDataBroker; -import org.opendaylight.mdsal.dom.broker.SerializedDOMDataBroker; -import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; -import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; import com.google.common.util.concurrent.ForwardingExecutorService; @@ -43,9 +31,23 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.mdsal.common.api.ReadFailedException; +import org.opendaylight.mdsal.common.api.TransactionCommitDeadlockException; +import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; +import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; +import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; +import org.opendaylight.mdsal.dom.broker.AbstractDOMDataBroker; +import org.opendaylight.mdsal.dom.broker.SerializedDOMDataBroker; +import org.opendaylight.mdsal.dom.broker.test.util.TestModel; +import org.opendaylight.mdsal.dom.spi.store.DOMStore; +import org.opendaylight.mdsal.dom.store.inmemory.InMemoryDOMDataStore; import org.opendaylight.yangtools.util.concurrent.DeadlockDetectingListeningExecutorService; import org.opendaylight.yangtools.util.concurrent.SpecialExecutors; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.model.api.SchemaContext; @@ -58,8 +60,7 @@ public class DOMBrokerTest { private CommitExecutorService commitExecutor; @Before - public void setupStore() throws Exception{ - + public void setupStore() throws Exception { InMemoryDOMDataStore operStore = new InMemoryDOMDataStore("OPER", MoreExecutors.newDirectExecutorService()); InMemoryDOMDataStore configStore = new InMemoryDOMDataStore("CFG", @@ -69,9 +70,9 @@ public class DOMBrokerTest { operStore.onGlobalContextUpdated(schemaContext); configStore.onGlobalContextUpdated(schemaContext); - ImmutableMap stores = ImmutableMap. builder() // - .put(CONFIGURATION, configStore) // - .put(OPERATIONAL, operStore) // + ImmutableMap stores = ImmutableMap. builder() + .put(CONFIGURATION, configStore) + .put(OPERATIONAL, operStore) .build(); commitExecutor = new CommitExecutorService(Executors.newSingleThreadExecutor()); @@ -94,7 +95,6 @@ public class DOMBrokerTest { @Test(timeout=10000) public void testTransactionIsolation() throws InterruptedException, ExecutionException { - assertNotNull(domBroker); DOMDataTreeReadTransaction readTx = domBroker.newReadOnlyTransaction(); @@ -102,6 +102,7 @@ public class DOMBrokerTest { DOMDataTreeWriteTransaction writeTx = domBroker.newWriteOnlyTransaction(); assertNotNull(writeTx); + /** * * Writes /test in writeTx @@ -109,7 +110,6 @@ public class DOMBrokerTest { */ writeTx.put(OPERATIONAL, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME)); - /** * * Reads /test from readTx Read should return Absent. @@ -122,7 +122,6 @@ public class DOMBrokerTest { @Test(timeout=10000) public void testTransactionCommit() throws InterruptedException, ExecutionException { - DOMDataTreeWriteTransaction writeTx = domBroker.newWriteOnlyTransaction(); assertNotNull(writeTx); /** @@ -141,7 +140,6 @@ public class DOMBrokerTest { @Test(expected=TransactionCommitFailedException.class) public void testRejectedCommit() throws Exception { - commitExecutor.delegate = Mockito.mock( ExecutorService.class ); Mockito.doThrow( new RejectedExecutionException( "mock" ) ) .when( commitExecutor.delegate ).execute( Mockito.any( Runnable.class ) ); @@ -175,6 +173,61 @@ public class DOMBrokerTest { return caughtEx; } + @Test(expected = ReadFailedException.class) + public void basicTests() throws Exception { + final DataContainerChild outerList = ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME) + .withChild(ImmutableNodes.mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1)) + .build(); + final NormalizedNode testContainer = Builders.containerBuilder() + .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(TestModel.TEST_QNAME)) + .withChild(outerList) + .build(); + + DOMDataTreeWriteTransaction writeTx = domBroker.newWriteOnlyTransaction(); + DOMDataTreeReadTransaction readRx = domBroker.newReadOnlyTransaction(); + assertNotNull(writeTx); + assertNotNull(readRx); + + writeTx.put(OPERATIONAL, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME)); + writeTx.submit().get(); + assertFalse(writeTx.cancel()); + + assertEquals(false, domBroker.newReadOnlyTransaction().exists(CONFIGURATION, TestModel.TEST_PATH).get()); + assertEquals(true, domBroker.newReadOnlyTransaction().exists(OPERATIONAL, TestModel.TEST_PATH).get()); + assertEquals(false, domBroker.newReadOnlyTransaction().exists(OPERATIONAL, TestModel.TEST2_PATH).get()); + + writeTx = domBroker.newWriteOnlyTransaction(); + writeTx.put(OPERATIONAL, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME)); + writeTx.delete(OPERATIONAL, TestModel.TEST_PATH); + writeTx.submit().get(); + assertEquals(false, domBroker.newReadOnlyTransaction().exists(OPERATIONAL, TestModel.TEST_PATH).get()); + assertTrue(domBroker.newWriteOnlyTransaction().cancel()); + + writeTx = domBroker.newWriteOnlyTransaction(); + writeTx.put(OPERATIONAL, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME)); + writeTx.merge(OPERATIONAL, TestModel.TEST_PATH, testContainer); + writeTx.submit().get(); + assertEquals(true, domBroker.newReadOnlyTransaction().exists(OPERATIONAL, TestModel.TEST_PATH).get()); + assertEquals(true, domBroker.newReadOnlyTransaction().read(OPERATIONAL, TestModel.TEST_PATH).get() + .get().toString().contains(testContainer.toString())); + + readRx.close(); + //Expected exception after close call + readRx.read(OPERATIONAL, TestModel.TEST_PATH).checkedGet(); + } + + @Test + public void closeTest() throws Exception { + final String TEST_EXCEPTION = "TestException"; + + domBroker.setCloseable(() -> { throw new Exception(TEST_EXCEPTION); }); + try{ + domBroker.close(); + }catch(Exception e){ + assertTrue(e.getMessage().contains(TEST_EXCEPTION)); + } + } + static class CommitExecutorService extends ForwardingExecutorService { ExecutorService delegate; diff --git a/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/test/DOMDataTreeListenerTest.java b/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/test/DOMDataTreeListenerTest.java index 71575ef5d7..1a439d3a86 100644 --- a/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/test/DOMDataTreeListenerTest.java +++ b/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/test/DOMDataTreeListenerTest.java @@ -5,6 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ + package org.opendaylight.mdsal.dom.broker.test; import static org.junit.Assert.assertEquals; @@ -14,20 +15,6 @@ import static org.junit.Assert.assertTrue; import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.CONFIGURATION; import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.OPERATIONAL; -import org.opendaylight.mdsal.dom.broker.test.util.TestModel; - -import org.opendaylight.mdsal.dom.store.inmemory.InMemoryDOMDataStore; -import org.opendaylight.mdsal.dom.spi.store.DOMStore; -import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.mdsal.common.api.TransactionCommitDeadlockException; -import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; -import org.opendaylight.mdsal.dom.broker.AbstractDOMDataBroker; -import org.opendaylight.mdsal.dom.broker.SerializedDOMDataBroker; -import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension; -import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; -import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService; -import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; -import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; import com.google.common.collect.ImmutableMap; import com.google.common.util.concurrent.ForwardingExecutorService; import com.google.common.util.concurrent.ListeningExecutorService; @@ -43,6 +30,19 @@ import javax.annotation.Nonnull; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.mdsal.common.api.TransactionCommitDeadlockException; +import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; +import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension; +import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; +import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService; +import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; +import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; +import org.opendaylight.mdsal.dom.broker.AbstractDOMDataBroker; +import org.opendaylight.mdsal.dom.broker.SerializedDOMDataBroker; +import org.opendaylight.mdsal.dom.broker.test.util.TestModel; +import org.opendaylight.mdsal.dom.spi.store.DOMStore; +import org.opendaylight.mdsal.dom.store.inmemory.InMemoryDOMDataStore; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.util.concurrent.DeadlockDetectingListeningExecutorService; import org.opendaylight.yangtools.util.concurrent.SpecialExecutors; @@ -66,11 +66,13 @@ public class DOMDataTreeListenerTest { private ExecutorService futureExecutor; private CommitExecutorService commitExecutor; - private static final DataContainerChild OUTER_LIST = ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME) + private static final DataContainerChild OUTER_LIST = + ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME) .withChild(ImmutableNodes.mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1)) .build(); - private static final DataContainerChild OUTER_LIST_2 = ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME) + private static final DataContainerChild OUTER_LIST_2 = + ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME) .withChild(ImmutableNodes.mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 2)) .build(); @@ -91,7 +93,7 @@ public class DOMDataTreeListenerTest { LogicalDatastoreType.CONFIGURATION, TestModel.OUTER_LIST_PATH); @Before - public void setupStore() throws Exception{ + public void setupStore() throws Exception { InMemoryDOMDataStore operStore = new InMemoryDOMDataStore("OPER", MoreExecutors.newDirectExecutorService()); InMemoryDOMDataStore configStore = new InMemoryDOMDataStore("CFG", @@ -101,9 +103,9 @@ public class DOMDataTreeListenerTest { operStore.onGlobalContextUpdated(schemaContext); configStore.onGlobalContextUpdated(schemaContext); - ImmutableMap stores = ImmutableMap.builder() // - .put(CONFIGURATION, configStore) // - .put(OPERATIONAL, operStore) // + ImmutableMap stores = ImmutableMap.builder() + .put(CONFIGURATION, configStore) + .put(OPERATIONAL, operStore) .build(); commitExecutor = new CommitExecutorService(Executors.newSingleThreadExecutor()); @@ -337,11 +339,14 @@ public class DOMDataTreeListenerTest { dataTreeChangeService.registerDataTreeChangeListener(OUTER_LIST_DATA_TREE_ID, listener); final YangInstanceIdentifier.NodeIdentifierWithPredicates outerListEntryId1 = - new YangInstanceIdentifier.NodeIdentifierWithPredicates(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1); + new YangInstanceIdentifier.NodeIdentifierWithPredicates( + TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1); final YangInstanceIdentifier.NodeIdentifierWithPredicates outerListEntryId2 = - new YangInstanceIdentifier.NodeIdentifierWithPredicates(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 2); + new YangInstanceIdentifier.NodeIdentifierWithPredicates( + TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 2); final YangInstanceIdentifier.NodeIdentifierWithPredicates outerListEntryId3 = - new YangInstanceIdentifier.NodeIdentifierWithPredicates(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 3); + new YangInstanceIdentifier.NodeIdentifierWithPredicates( + TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 3); final MapEntryNode outerListEntry1 = ImmutableNodes.mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1); final MapEntryNode outerListEntry2 = ImmutableNodes.mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 2); @@ -421,7 +426,6 @@ public class DOMDataTreeListenerTest { return dataTreeChangeService; } - static class CommitExecutorService extends ForwardingExecutorService { ExecutorService delegate; -- 2.36.6