+/*
+ * 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.spi;
+
+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.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import java.lang.reflect.Field;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+
+public class RpcRoutingStrategyTest {
+
+ private static RpcRoutingStrategy rpcRoutingStrategy;
+ private static final QName Q_NAME = QName.create("testQname");
+ private static final RpcDefinition RPC_DEFINITION = mock(RpcDefinition.class);
+ private static final DataSchemaNode DATA_SCHEMA_NODE = mock(DataSchemaNode.class);
+ private static final UnknownSchemaNode UNKNOWN_SCHEMA_NODE = mock(UnknownSchemaNode.class);
+
+ @Before
+ public void setUp() throws Exception {
+ final ContainerSchemaNode containerSchemaNode = mock(ContainerSchemaNode.class);
+
+ doReturn(containerSchemaNode).when(RPC_DEFINITION).getInput();
+ doReturn(ImmutableSet.of(DATA_SCHEMA_NODE)).when(containerSchemaNode).getChildNodes();
+ doReturn(ImmutableList.of(UNKNOWN_SCHEMA_NODE)).when(DATA_SCHEMA_NODE).getUnknownSchemaNodes();
+ doReturn(QName.create("testNode")).when(UNKNOWN_SCHEMA_NODE).getNodeType();
+ doReturn(Q_NAME).when(RPC_DEFINITION).getQName();
+
+ rpcRoutingStrategy = RpcRoutingStrategy.from(RPC_DEFINITION);
+ assertNotNull(rpcRoutingStrategy);
+
+ assertEquals(Q_NAME, rpcRoutingStrategy.getIdentifier());
+ assertFalse(rpcRoutingStrategy.isContextBasedRouted());
+ }
+
+ @Test()
+ public void routedRpcStrategyTest() throws Exception {
+ final Field contextReferenceField = RpcRoutingStrategy.class.getDeclaredField("CONTEXT_REFERENCE");
+ contextReferenceField.setAccessible(true);
+
+ final QName contextReference = (QName) contextReferenceField.get(rpcRoutingStrategy);
+
+ reset(UNKNOWN_SCHEMA_NODE);
+ doReturn(contextReference).when(UNKNOWN_SCHEMA_NODE).getNodeType();
+ doReturn(Q_NAME).when(UNKNOWN_SCHEMA_NODE).getQName();
+ doReturn(Q_NAME).when(DATA_SCHEMA_NODE).getQName();
+ rpcRoutingStrategy = RpcRoutingStrategy.from(RPC_DEFINITION);
+
+ assertNotNull(rpcRoutingStrategy);
+
+ assertTrue(rpcRoutingStrategy.isContextBasedRouted());
+ assertEquals(Q_NAME, rpcRoutingStrategy.getContext());
+ assertEquals(Q_NAME, rpcRoutingStrategy.getLeaf());
+ }
+
+ @Test(expected = UnsupportedOperationException.class)
+ public void getLeafTest() throws Exception {
+ rpcRoutingStrategy.getLeaf();
+ }
+
+ @Test(expected = UnsupportedOperationException.class)
+ public void getContextTest() throws Exception {
+ rpcRoutingStrategy.getContext();
+ }
+}
\ No newline at end of file