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