b05f1b27f2e6ad1afbfcd33ff1604602267ff5dd
[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.networkTopologyIdentifierBuilder;
11 import static org.onap.sdnc.northbound.util.MDSALUtil.networkTopologyInformationBuilder;
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_vnf_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("input is null", output.getResponseMessage());
53         assertEquals("Y", output.getAckFinalIndicator());
54     }
55
56
57     @Test
58     public void should_fail_when_invalid_preload_data() throws Exception {
59
60         PreloadNetworkTopologyOperationInput input = build(preloadNetworkTopologyOperationInput()
61             .setNetworkTopologyInformation(build(networkTopologyInformationBuilder()
62                 .setNetworkTopologyIdentifier(build(networkTopologyIdentifierBuilder()
63                     .setNetworkName("test-network-name")))))
64         );
65
66         PreloadNetworkTopologyOperationOutput output =
67             exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
68
69         assertEquals("403", output.getResponseCode());
70         assertEquals("invalid input: network-name or network-type is null or empty", output.getResponseMessage());
71         assertEquals("Y", output.getAckFinalIndicator());
72     }
73
74
75     @Test
76     public void should_fail_when_client_execution_failed() throws Exception {
77
78         svcClient.mockHasGraph(true);
79         svcClient.mockExecuteWoServiceData(new RuntimeException("test exception"));
80
81         PreloadNetworkTopologyOperationInput input = build(preloadNetworkTopologyOperationInput()
82             .setNetworkTopologyInformation(build(networkTopologyInformationBuilder()
83                 .setNetworkTopologyIdentifier(build(networkTopologyIdentifierBuilder()
84                     .setNetworkName("test-network-name")
85                     .setNetworkType("test-network-type")))))
86         );
87
88         PreloadNetworkTopologyOperationOutput output =
89             exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
90
91         assertEquals("500", output.getResponseCode());
92         assertEquals("test exception", output.getResponseMessage());
93         assertEquals("Y", output.getAckFinalIndicator());
94     }
95
96     @Test
97     public void should_fail_when_client_has_no_graph() throws Exception {
98
99         svcClient.mockHasGraph(false);
100
101         PreloadNetworkTopologyOperationInput input = build(preloadNetworkTopologyOperationInput()
102             .setNetworkTopologyInformation(build(networkTopologyInformationBuilder()
103                 .setNetworkTopologyIdentifier(build(networkTopologyIdentifierBuilder()
104                     .setNetworkName("test-network-name")
105                     .setNetworkType("test-network-type")))))
106         );
107
108         PreloadNetworkTopologyOperationOutput output =
109             exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
110
111         assertEquals("503", output.getResponseCode());
112         assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
113         assertEquals("Y", output.getAckFinalIndicator());
114     }
115
116     @Test
117     public void should_fail_when_failed_to_update_mdsal() throws Exception {
118
119         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
120         svcClient.mockExecuteWoServiceData(svcResultProp);
121         svcClient.mockHasGraph(true);
122         WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
123         when(mockWriteTransaction.submit()).thenThrow(new TransactionChainClosedException("test exception"));
124
125         DataBroker spyDataBroker = Mockito.spy(dataBroker);
126         when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
127         genericResourceApiProvider.setDataBroker(spyDataBroker);
128
129         PreloadNetworkTopologyOperationInput input = build(preloadNetworkTopologyOperationInput()
130             .setNetworkTopologyInformation(build(networkTopologyInformationBuilder()
131                 .setNetworkTopologyIdentifier(build(networkTopologyIdentifierBuilder()
132                     .setNetworkName("test-network-name")
133                     .setNetworkType("test-network-type")))))
134         );
135
136         PreloadNetworkTopologyOperationOutput output =
137             exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
138
139         assertEquals("500", output.getResponseCode());
140         assertEquals("test exception", output.getResponseMessage());
141         assertEquals("Y", output.getAckFinalIndicator());
142     }
143
144     @Test
145     public void should_complete_with_success_when_no_errors() throws Exception {
146
147         svcClient.mockHasGraph(true);
148         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
149         svcClient.mockExecute(svcResultProp);
150
151         PreloadNetworkTopologyOperationInput input = build(preloadNetworkTopologyOperationInput()
152             .setNetworkTopologyInformation(build(networkTopologyInformationBuilder()
153                 .setNetworkTopologyIdentifier(build(networkTopologyIdentifierBuilder()
154                     .setNetworkName("test-network-name")
155                     .setNetworkType("test-network-type")))))
156             .setSdncRequestHeader(build(sdncRequestHeader()
157                 .setSvcRequestId("test-svc-request-id")
158                 .setSvcAction(SvcAction.Assign)
159             ))
160             .setRequestInformation(build(requestInformation()
161                 .setRequestId("test-request-id")
162                 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
163             ))
164         );
165
166         PreloadNetworkTopologyOperationOutput output =
167             exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
168
169         assertEquals("200", output.getResponseCode());
170         assertEquals("Y", output.getAckFinalIndicator());
171
172         PreloadNetworkTopologyOperationOutput expectedOutput = createExpectedOutput(svcResultProp, input);
173         assertEquals(expectedOutput, output);
174     }
175
176     private PreloadNetworkTopologyOperationOutput createExpectedOutput(PropBuilder svcResultProp,
177         PreloadNetworkTopologyOperationInput input) {
178         return build(preloadNetworkTopologyOperationOutput()
179             .setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId())
180             .setResponseCode(svcResultProp.get(svcClient.errorCode))
181             .setAckFinalIndicator(svcResultProp.get(svcClient.ackFinal))
182         );
183     }
184
185 }