696df2624f89ab813a53d320e262ac0641c4dad2
[sdnc/northbound.git] / generic-resource-api / provider / src / test / java / org / onap / sdnc / northbound / PreloadNetworkTopologyRPCTest.java
1 package org.onap.sdnc.northbound;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.mockito.Mockito.lenient;
5 import static org.mockito.Mockito.mock;
6 import static org.mockito.Mockito.when;
7 import static org.onap.sdnc.northbound.GenericResourceApiProvider.APP_NAME;
8 import static org.onap.sdnc.northbound.GenericResourceApiProvider.NO_SERVICE_LOGIC_ACTIVE;
9 import static org.onap.sdnc.northbound.util.MDSALUtil.exec;
10 import static org.onap.sdnc.northbound.util.MDSALUtil.networkTopologyIdentifierStructureBuilder;
11 import static org.onap.sdnc.northbound.util.MDSALUtil.preloadNetworkTopologyInformationBuilder;
12 import static org.onap.sdnc.northbound.util.MDSALUtil.preloadNetworkTopologyOperationInput;
13 import static org.onap.sdnc.northbound.util.MDSALUtil.preloadNetworkTopologyOperationOutput;
14 import static org.onap.sdnc.northbound.util.MDSALUtil.requestInformation;
15 import static org.onap.sdnc.northbound.util.MDSALUtil.sdncRequestHeader;
16
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.junit.runner.RunWith;
20 import org.mockito.Mockito;
21 import org.mockito.junit.MockitoJUnitRunner;
22 import org.onap.sdnc.northbound.util.PropBuilder;
23 import org.opendaylight.mdsal.binding.api.DataBroker;
24 import org.opendaylight.mdsal.binding.api.TransactionChainClosedException;
25 import org.opendaylight.mdsal.binding.api.WriteTransaction;
26 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadNetworkTopologyOperationInput;
27 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadNetworkTopologyOperationOutput;
28 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.request.information.RequestInformation;
29 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.sdnc.request.header.SdncRequestHeader.SvcAction;
30 import org.opendaylight.yangtools.yang.common.RpcResult;
31
32 @RunWith(MockitoJUnitRunner.Silent.class)
33 public class PreloadNetworkTopologyRPCTest extends GenericResourceApiProviderTest {
34
35     private static final String SVC_OPERATION = "preload-network-topology-operation";
36
37     @Before
38     public void setUp() throws Exception {
39         super.setUp();
40         svcClient.setScvOperation(SVC_OPERATION);
41     }
42
43     @Test
44     public void should_fail_when_invalid_network_topology() throws Exception {
45
46         PreloadNetworkTopologyOperationInput input = preloadNetworkTopologyOperationInput().build();
47
48         PreloadNetworkTopologyOperationOutput output =
49             exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
50
51         assertEquals("403", output.getResponseCode());
52         assertEquals("invalid input, null or empty preload-network-topology-information", output.getResponseMessage());
53         assertEquals("Y", output.getAckFinalIndicator());
54     }
55
56
57     @Test
58     public void should_fail_when_client_execution_failed() throws Exception {
59
60         svcClient.mockHasGraph(true);
61         svcClient.mockExecuteWoServiceDataPreload(new RuntimeException("test exception"));
62
63         PreloadNetworkTopologyOperationInput input = preloadNetworkTopologyOperationInput()
64             .setPreloadNetworkTopologyInformation(preloadNetworkTopologyInformationBuilder()
65                 .setNetworkTopologyIdentifierStructure(networkTopologyIdentifierStructureBuilder()
66                     .setNetworkName("test-network-name")
67                     .setNetworkType("test-network-type").build()
68                 ).build()
69             ).build();
70
71         PreloadNetworkTopologyOperationOutput output =
72             exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
73
74         assertEquals("500", output.getResponseCode());
75         assertEquals("test exception", output.getResponseMessage());
76         assertEquals("Y", output.getAckFinalIndicator());
77     }
78
79     @Test
80     public void should_fail_when_client_has_no_graph() throws Exception {
81
82         svcClient.mockHasGraph(false);
83
84         PreloadNetworkTopologyOperationInput input = preloadNetworkTopologyOperationInput()
85             .setPreloadNetworkTopologyInformation(preloadNetworkTopologyInformationBuilder()
86                 .setNetworkTopologyIdentifierStructure(networkTopologyIdentifierStructureBuilder()
87                     .setNetworkName("test-network-name")
88                     .setNetworkType("test-network-type").build()
89                 ).build()
90             ).build();
91
92         PreloadNetworkTopologyOperationOutput output =
93             exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
94
95         assertEquals("503", output.getResponseCode());
96         assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
97         assertEquals("Y", output.getAckFinalIndicator());
98     }
99
100     @Test
101     public void should_fail_when_failed_to_update_mdsal() throws Exception {
102
103         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
104         svcClient.mockExecuteWoServiceData(svcResultProp);
105         svcClient.mockHasGraph(true);
106         WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
107         when(mockWriteTransaction.commit()).thenThrow(new TransactionChainClosedException("test exception"));
108
109         DataBroker spyDataBroker = Mockito.spy(dataBroker);
110         when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
111         genericResourceApiProvider.setDataBroker(spyDataBroker);
112
113         PreloadNetworkTopologyOperationInput input = preloadNetworkTopologyOperationInput()
114             .setPreloadNetworkTopologyInformation(preloadNetworkTopologyInformationBuilder()
115                 .setNetworkTopologyIdentifierStructure(networkTopologyIdentifierStructureBuilder()
116                     .setNetworkName("test-network-name")
117                     .setNetworkType("test-network-type").build()
118                 ).build()
119             ).build();
120
121         PreloadNetworkTopologyOperationOutput output =
122             exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
123
124         assertEquals("500", output.getResponseCode());
125         assertEquals("test exception", output.getResponseMessage());
126         assertEquals("Y", output.getAckFinalIndicator());
127     }
128
129     @Test
130     public void should_complete_with_success_when_no_errors() throws Exception {
131
132         svcClient.mockHasGraph(true);
133         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
134         svcClient.mockExecute(svcResultProp);
135
136         PreloadNetworkTopologyOperationInput input = preloadNetworkTopologyOperationInput()
137             .setPreloadNetworkTopologyInformation(preloadNetworkTopologyInformationBuilder()
138                 .setNetworkTopologyIdentifierStructure(networkTopologyIdentifierStructureBuilder()
139                     .setNetworkName("test-network-name")
140                     .setNetworkType("test-network-type").build()
141                 ).build()
142             )
143             .setSdncRequestHeader(sdncRequestHeader()
144                 .setSvcRequestId("test-svc-request-id")
145                 .setSvcAction(SvcAction.Assign).build()
146             )
147             .setRequestInformation(requestInformation()
148                 .setRequestId("test-request-id")
149                 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance).build()
150             ).build();
151
152         PreloadNetworkTopologyOperationOutput output =
153             exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
154
155         assertEquals("200", output.getResponseCode());
156         assertEquals("Y", output.getAckFinalIndicator());
157
158         PreloadNetworkTopologyOperationOutput expectedOutput = createExpectedOutput(svcResultProp, input);
159         assertEquals(expectedOutput, output);
160     }
161
162     private PreloadNetworkTopologyOperationOutput createExpectedOutput(PropBuilder svcResultProp,
163         PreloadNetworkTopologyOperationInput input) {
164         return preloadNetworkTopologyOperationOutput()
165             .setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId())
166             .setResponseCode(svcResultProp.get(svcClient.errorCode))
167             .setAckFinalIndicator(svcResultProp.get(svcClient.ackFinal)).build();
168     }
169
170 }