HoneyNode Java 11 support for 121 devices
[transportpce.git] / tests / honeynode / 1.2.1 / netconf-impl / src / test / java / org / opendaylight / netconf / impl / osgi / NetconfOperationRouterImplTest.java
diff --git a/tests/honeynode/1.2.1/netconf-impl/src/test/java/org/opendaylight/netconf/impl/osgi/NetconfOperationRouterImplTest.java b/tests/honeynode/1.2.1/netconf-impl/src/test/java/org/opendaylight/netconf/impl/osgi/NetconfOperationRouterImplTest.java
new file mode 100644 (file)
index 0000000..8b1afec
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * 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.netconf.impl.osgi;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.verify;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.opendaylight.netconf.api.DocumentedException;
+import org.opendaylight.netconf.api.xml.XmlUtil;
+import org.opendaylight.netconf.mapping.api.HandlingPriority;
+import org.opendaylight.netconf.mapping.api.NetconfOperation;
+import org.opendaylight.netconf.mapping.api.NetconfOperationChainedExecution;
+import org.opendaylight.netconf.mapping.api.NetconfOperationService;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+public class NetconfOperationRouterImplTest {
+
+    private static final String TEST_RPC = "<rpc message-id=\"101\" "
+            + "xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><test/></rpc>\n";
+    private static final String MAX_PRIORITY_REPLY = "<high/>";
+    private static final String DEFAULT_PRIORITY_REPLY = "<default/>";
+
+    private static Document TEST_RPC_DOC;
+
+    @Mock
+    private NetconfOperationService operationService;
+    @Mock
+    private NetconfOperationService operationService2;
+    @Mock
+    private NetconfOperation maxPrioMock;
+    @Mock
+    private NetconfOperation defaultPrioMock;
+
+    private NetconfOperationRouterImpl operationRouter;
+    private NetconfOperationRouterImpl emptyOperationRouter;
+
+    @BeforeClass
+    public static void suiteSetUp() throws IOException, SAXException {
+        TEST_RPC_DOC = XmlUtil.readXmlToDocument(TEST_RPC);
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+
+        doReturn(HandlingPriority.HANDLE_WITH_MAX_PRIORITY).when(maxPrioMock).canHandle(any(Document.class));
+        doReturn(XmlUtil.readXmlToDocument(MAX_PRIORITY_REPLY)).when(maxPrioMock).handle(any(Document.class),
+                any(NetconfOperationChainedExecution.class));
+
+        doReturn(HandlingPriority.HANDLE_WITH_DEFAULT_PRIORITY).when(defaultPrioMock).canHandle(any(Document.class));
+        doReturn(XmlUtil.readXmlToDocument(DEFAULT_PRIORITY_REPLY)).when(defaultPrioMock).handle(any(Document.class),
+                any(NetconfOperationChainedExecution.class));
+
+        final Set<NetconfOperation> operations = new HashSet<>();
+        operations.add(maxPrioMock);
+        operations.add(defaultPrioMock);
+        doReturn(operations).when(operationService).getNetconfOperations();
+        doNothing().when(operationService).close();
+
+        operationRouter = new NetconfOperationRouterImpl(operationService, null, "session-1");
+        doReturn(Collections.EMPTY_SET).when(operationService2).getNetconfOperations();
+        emptyOperationRouter = new NetconfOperationRouterImpl(operationService2, null, "session-1");
+    }
+
+    @Test
+    public void testOnNetconfMessage() throws Exception {
+        final ArgumentCaptor<NetconfOperationChainedExecution> highPriorityChainEx =
+                ArgumentCaptor.forClass(NetconfOperationChainedExecution.class);
+        final ArgumentCaptor<NetconfOperationChainedExecution> defaultPriorityChainEx =
+                ArgumentCaptor.forClass(NetconfOperationChainedExecution.class);
+
+        final Document document = operationRouter.onNetconfMessage(TEST_RPC_DOC, null);
+
+        //max priority message is first in chain
+        verify(maxPrioMock).handle(any(Document.class), highPriorityChainEx.capture());
+        final NetconfOperationChainedExecution chainedExecution = highPriorityChainEx.getValue();
+        Assert.assertFalse(chainedExecution.isExecutionTermination());
+
+        //execute next in chain
+        final Document execute = chainedExecution.execute(XmlUtil.newDocument());
+        Assert.assertEquals(DEFAULT_PRIORITY_REPLY, XmlUtil.toString(execute).trim());
+
+        //default priority message is second and last
+        verify(defaultPrioMock).handle(any(Document.class), defaultPriorityChainEx.capture());
+        Assert.assertTrue(defaultPriorityChainEx.getValue().isExecutionTermination());
+
+        Assert.assertEquals(MAX_PRIORITY_REPLY, XmlUtil.toString(document).trim());
+    }
+
+    @Test
+    public void testOnNetconfMessageFail() throws Exception {
+        try {
+            emptyOperationRouter.onNetconfMessage(TEST_RPC_DOC, null);
+            Assert.fail("Exception expected");
+        } catch (final DocumentedException e) {
+            Assert.assertEquals(e.getErrorTag(), DocumentedException.ErrorTag.OPERATION_NOT_SUPPORTED);
+        }
+    }
+
+    @Test
+    public void testClose() throws Exception {
+        operationRouter.close();
+        verify(operationService).close();
+    }
+
+}