Generic resource API catch up
[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.mock;
5 import static org.mockito.Mockito.when;
6 import static org.onap.sdnc.northbound.GenericResourceApiProvider.APP_NAME;
7 import static org.onap.sdnc.northbound.GenericResourceApiProvider.NO_SERVICE_LOGIC_ACTIVE;
8 import static org.onap.sdnc.northbound.util.MDSALUtil.build;
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.runners.MockitoJUnitRunner;
22 import org.onap.sdnc.northbound.util.PropBuilder;
23 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
24 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
25 import org.opendaylight.controller.md.sal.common.api.data.TransactionChainClosedException;
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.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 = build(preloadNetworkTopologyOperationInput());
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 = build(preloadNetworkTopologyOperationInput()
64             .setPreloadNetworkTopologyInformation(build(preloadNetworkTopologyInformationBuilder()
65                 .setNetworkTopologyIdentifierStructure(build(networkTopologyIdentifierStructureBuilder()
66                     .setNetworkName("test-network-name")
67                     .setNetworkType("test-network-type")))))
68         );
69
70         PreloadNetworkTopologyOperationOutput output =
71             exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
72
73         assertEquals("500", output.getResponseCode());
74         assertEquals("test exception", output.getResponseMessage());
75         assertEquals("Y", output.getAckFinalIndicator());
76     }
77
78     @Test
79     public void should_fail_when_client_has_no_graph() throws Exception {
80
81         svcClient.mockHasGraph(false);
82
83         PreloadNetworkTopologyOperationInput input = build(preloadNetworkTopologyOperationInput()
84             .setPreloadNetworkTopologyInformation(build(preloadNetworkTopologyInformationBuilder()
85                 .setNetworkTopologyIdentifierStructure(build(networkTopologyIdentifierStructureBuilder()
86                     .setNetworkName("test-network-name")
87                     .setNetworkType("test-network-type")))))
88         );
89
90         PreloadNetworkTopologyOperationOutput output =
91             exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
92
93         assertEquals("503", output.getResponseCode());
94         assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
95         assertEquals("Y", output.getAckFinalIndicator());
96     }
97
98     @Test
99     public void should_fail_when_failed_to_update_mdsal() throws Exception {
100
101         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
102         svcClient.mockExecuteWoServiceData(svcResultProp);
103         svcClient.mockHasGraph(true);
104         WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
105         when(mockWriteTransaction.submit()).thenThrow(new TransactionChainClosedException("test exception"));
106
107         DataBroker spyDataBroker = Mockito.spy(dataBroker);
108         when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
109         genericResourceApiProvider.setDataBroker(spyDataBroker);
110
111         PreloadNetworkTopologyOperationInput input = build(preloadNetworkTopologyOperationInput()
112             .setPreloadNetworkTopologyInformation(build(preloadNetworkTopologyInformationBuilder()
113                 .setNetworkTopologyIdentifierStructure(build(networkTopologyIdentifierStructureBuilder()
114                     .setNetworkName("test-network-name")
115                     .setNetworkType("test-network-type")))))
116         );
117
118         PreloadNetworkTopologyOperationOutput output =
119             exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
120
121         assertEquals("500", output.getResponseCode());
122         assertEquals("test exception", output.getResponseMessage());
123         assertEquals("Y", output.getAckFinalIndicator());
124     }
125
126     @Test
127     public void should_complete_with_success_when_no_errors() throws Exception {
128
129         svcClient.mockHasGraph(true);
130         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
131         svcClient.mockExecute(svcResultProp);
132
133         PreloadNetworkTopologyOperationInput input = build(preloadNetworkTopologyOperationInput()
134             .setPreloadNetworkTopologyInformation(build(preloadNetworkTopologyInformationBuilder()
135                 .setNetworkTopologyIdentifierStructure(build(networkTopologyIdentifierStructureBuilder()
136                     .setNetworkName("test-network-name")
137                     .setNetworkType("test-network-type")))))
138             .setSdncRequestHeader(build(sdncRequestHeader()
139                 .setSvcRequestId("test-svc-request-id")
140                 .setSvcAction(SvcAction.Assign)
141             ))
142             .setRequestInformation(build(requestInformation()
143                 .setRequestId("test-request-id")
144                 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
145             ))
146         );
147
148         PreloadNetworkTopologyOperationOutput output =
149             exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
150
151         assertEquals("200", output.getResponseCode());
152         assertEquals("Y", output.getAckFinalIndicator());
153
154         PreloadNetworkTopologyOperationOutput expectedOutput = createExpectedOutput(svcResultProp, input);
155         assertEquals(expectedOutput, output);
156     }
157
158     private PreloadNetworkTopologyOperationOutput createExpectedOutput(PropBuilder svcResultProp,
159         PreloadNetworkTopologyOperationInput input) {
160         return build(preloadNetworkTopologyOperationOutput()
161             .setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId())
162             .setResponseCode(svcResultProp.get(svcClient.errorCode))
163             .setAckFinalIndicator(svcResultProp.get(svcClient.ackFinal))
164         );
165     }
166
167 }