3642ece43374b21b64ac690074bbafb30d5830a4
[mdsal.git] / dom / mdsal-dom-spi / src / test / java / org / opendaylight / mdsal / dom / spi / RpcRoutingStrategyTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.mdsal.dom.spi;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertTrue;
14 import static org.mockito.Mockito.doReturn;
15 import static org.mockito.Mockito.mock;
16 import static org.mockito.Mockito.reset;
17
18 import com.google.common.collect.ImmutableList;
19 import com.google.common.collect.ImmutableSet;
20 import java.lang.reflect.Field;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.opendaylight.yangtools.yang.common.QName;
24 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
27 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
28
29 public class RpcRoutingStrategyTest {
30
31     private static RpcRoutingStrategy rpcRoutingStrategy;
32     private static final QName Q_NAME = QName.create("", "testQname");
33     private static final RpcDefinition RPC_DEFINITION = mock(RpcDefinition.class);
34     private static final DataSchemaNode DATA_SCHEMA_NODE = mock(DataSchemaNode.class);
35     private static final UnknownSchemaNode UNKNOWN_SCHEMA_NODE = mock(UnknownSchemaNode.class);
36
37     @Before
38     public void setUp() throws Exception {
39         final ContainerSchemaNode containerSchemaNode = mock(ContainerSchemaNode.class);
40
41         doReturn(containerSchemaNode).when(RPC_DEFINITION).getInput();
42         doReturn(ImmutableSet.of(DATA_SCHEMA_NODE)).when(containerSchemaNode).getChildNodes();
43         doReturn(ImmutableList.of(UNKNOWN_SCHEMA_NODE)).when(DATA_SCHEMA_NODE).getUnknownSchemaNodes();
44         doReturn(QName.create("", "testNode")).when(UNKNOWN_SCHEMA_NODE).getNodeType();
45         doReturn(Q_NAME).when(RPC_DEFINITION).getQName();
46
47         rpcRoutingStrategy = RpcRoutingStrategy.from(RPC_DEFINITION);
48         assertNotNull(rpcRoutingStrategy);
49
50         assertEquals(Q_NAME, rpcRoutingStrategy.getIdentifier());
51         assertFalse(rpcRoutingStrategy.isContextBasedRouted());
52     }
53
54     @Test()
55     public void routedRpcStrategyTest() throws Exception {
56         final Field contextReferenceField = RpcRoutingStrategy.class.getDeclaredField("CONTEXT_REFERENCE");
57         contextReferenceField.setAccessible(true);
58
59         final QName contextReference = (QName) contextReferenceField.get(rpcRoutingStrategy);
60
61         reset(UNKNOWN_SCHEMA_NODE);
62         doReturn(contextReference).when(UNKNOWN_SCHEMA_NODE).getNodeType();
63         doReturn(Q_NAME).when(UNKNOWN_SCHEMA_NODE).getQName();
64         doReturn(Q_NAME).when(DATA_SCHEMA_NODE).getQName();
65         rpcRoutingStrategy = RpcRoutingStrategy.from(RPC_DEFINITION);
66
67         assertNotNull(rpcRoutingStrategy);
68
69         assertTrue(rpcRoutingStrategy.isContextBasedRouted());
70         assertEquals(Q_NAME, rpcRoutingStrategy.getContext());
71         assertEquals(Q_NAME, rpcRoutingStrategy.getLeaf());
72     }
73
74     @Test(expected = UnsupportedOperationException.class)
75     public void getLeafTest() throws Exception {
76         rpcRoutingStrategy.getLeaf();
77     }
78
79     @Test(expected = UnsupportedOperationException.class)
80     public void getContextTest() throws Exception {
81         rpcRoutingStrategy.getContext();
82     }
83 }