GenericResourceApiProvider unit tests part 6.
[sdnc/northbound.git] / generic-resource-api / provider / src / test / java / org / onap / sdnc / northbound / VnfTopologyOperationRPCTest.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.GenericResourceApiProvider.NULL_OR_EMPTY_ERROR_PARAM;
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.requestInformation;
12 import static org.onap.sdnc.northbound.util.MDSALUtil.sdncRequestHeader;
13 import static org.onap.sdnc.northbound.util.MDSALUtil.serviceInformationBuilder;
14 import static org.onap.sdnc.northbound.util.MDSALUtil.serviceResponseInformation;
15 import static org.onap.sdnc.northbound.util.MDSALUtil.vnfInformationBuilder;
16 import static org.onap.sdnc.northbound.util.MDSALUtil.vnfResponseInformation;
17 import static org.onap.sdnc.northbound.util.MDSALUtil.vnfTopologyOperationInput;
18 import static org.onap.sdnc.northbound.util.MDSALUtil.vnfTopologyOperationOutput;
19
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.mockito.Mockito;
24 import org.mockito.runners.MockitoJUnitRunner;
25 import org.onap.sdnc.northbound.util.PropBuilder;
26 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
27 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
28 import org.opendaylight.controller.md.sal.common.api.data.TransactionChainClosedException;
29 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VnfTopologyOperationInput;
30 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VnfTopologyOperationOutput;
31 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.request.information.RequestInformation;
32 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.sdnc.request.header.SdncRequestHeader.SvcAction;
33 import org.opendaylight.yangtools.yang.common.RpcResult;
34
35 @RunWith(MockitoJUnitRunner.class)
36 public class VnfTopologyOperationRPCTest extends GenericResourceApiProviderTest {
37
38     private static final String SVC_OPERATION = "vnf-topology-operation";
39
40     @Before
41     public void setUp() throws Exception {
42         super.setUp();
43         svcClient.setScvOperation(SVC_OPERATION);
44     }
45
46     @Test
47     public void should_fail_when_service_info_not_present() throws Exception {
48
49         VnfTopologyOperationInput input = build(vnfTopologyOperationInput());
50
51         VnfTopologyOperationOutput output =
52             exec(genericResourceApiProvider::vnfTopologyOperation, input, RpcResult::getResult);
53
54         assertEquals("404", output.getResponseCode());
55         assertEquals(NULL_OR_EMPTY_ERROR_PARAM, output.getResponseMessage());
56         assertEquals("Y", output.getAckFinalIndicator());
57     }
58
59
60     @Test
61     public void should_fail_when_invalid_vnf_id() throws Exception {
62
63         VnfTopologyOperationInput input = build(vnfTopologyOperationInput()
64             .setServiceInformation(build(serviceInformationBuilder().
65                 setServiceInstanceId("test-service-instance-id")
66             ))
67         );
68
69         VnfTopologyOperationOutput output =
70             exec(genericResourceApiProvider::vnfTopologyOperation, input, RpcResult::getResult);
71
72         assertEquals("404", output.getResponseCode());
73         assertEquals("invalid input, null or empty vnf-id", output.getResponseMessage());
74         assertEquals("Y", output.getAckFinalIndicator());
75     }
76
77
78     @Test
79     public void should_fail_when_client_execution_failed() throws Exception {
80
81         svcClient.mockHasGraph(true);
82         svcClient.mockExecute(new RuntimeException("test exception"));
83
84         VnfTopologyOperationInput input = build(vnfTopologyOperationInput()
85             .setServiceInformation(build(serviceInformationBuilder()
86                 .setServiceInstanceId("test-service-instance-id")
87             ))
88             .setVnfInformation(build(vnfInformationBuilder()
89                 .setVnfId("test-vnf-id")
90             ))
91         );
92
93         VnfTopologyOperationOutput output =
94             exec(genericResourceApiProvider::vnfTopologyOperation, input, RpcResult::getResult);
95
96         assertEquals("500", output.getResponseCode());
97         assertEquals("test exception", output.getResponseMessage());
98         assertEquals("Y", output.getAckFinalIndicator());
99     }
100
101     @Test
102     public void should_fail_when_client_has_no_graph() throws Exception {
103
104         svcClient.mockHasGraph(false);
105
106         VnfTopologyOperationInput input = build(vnfTopologyOperationInput()
107             .setServiceInformation(build(serviceInformationBuilder()
108                 .setServiceInstanceId("test-service-instance-id")
109             ))
110             .setVnfInformation(build(vnfInformationBuilder()
111                 .setVnfId("test-vnf-id")
112             ))
113         );
114
115         VnfTopologyOperationOutput output =
116             exec(genericResourceApiProvider::vnfTopologyOperation, input, RpcResult::getResult);
117
118         assertEquals("503", output.getResponseCode());
119         assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
120         assertEquals("Y", output.getAckFinalIndicator());
121     }
122
123     @Test
124     public void should_fail_when_failed_to_update_mdsal() throws Exception {
125
126         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
127         svcClient.mockExecute(svcResultProp);
128         svcClient.mockHasGraph(true);
129         WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
130         when(mockWriteTransaction.submit()).thenThrow(new TransactionChainClosedException("test exception"));
131
132         DataBroker spyDataBroker = Mockito.spy(dataBroker);
133         when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
134         genericResourceApiProvider.setDataBroker(spyDataBroker);
135
136         VnfTopologyOperationInput input = build(vnfTopologyOperationInput()
137             .setServiceInformation(build(serviceInformationBuilder()
138                 .setServiceInstanceId("test-service-instance-id")
139             ))
140             .setVnfInformation(build(vnfInformationBuilder()
141                 .setVnfId("test-vnf-id")
142             ))
143         );
144
145         VnfTopologyOperationOutput output =
146             exec(genericResourceApiProvider::vnfTopologyOperation, input, RpcResult::getResult);
147
148         assertEquals("500", output.getResponseCode());
149         assertEquals("test exception", output.getResponseMessage());
150         assertEquals("Y", output.getAckFinalIndicator());
151     }
152
153     @Test
154     public void should_complete_with_success_when_no_errors() throws Exception {
155
156         svcClient.mockHasGraph(true);
157         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
158         svcClient.mockExecute(svcResultProp);
159
160         VnfTopologyOperationInput input = build(vnfTopologyOperationInput()
161             .setSdncRequestHeader(build(sdncRequestHeader()
162                 .setSvcRequestId("test-svc-request-id")
163                 .setSvcAction(SvcAction.Assign)
164             ))
165             .setRequestInformation(build(requestInformation()
166                 .setRequestId("test-request-id")
167                 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
168             ))
169             .setServiceInformation(build(serviceInformationBuilder()
170                 .setServiceInstanceId("test-service-instance-id")
171             ))
172             .setVnfInformation(build(vnfInformationBuilder()
173                 .setVnfId("test-vnf-id")
174             ))
175         );
176
177         VnfTopologyOperationOutput output =
178             exec(genericResourceApiProvider::vnfTopologyOperation, input, RpcResult::getResult);
179
180         assertEquals("200", output.getResponseCode());
181         assertEquals("OK", output.getResponseMessage());
182         assertEquals("Y", output.getAckFinalIndicator());
183
184         VnfTopologyOperationOutput expectedVnfTopologyOperationOutput = createExpectedOutput(svcResultProp,
185             input);
186         assertEquals(expectedVnfTopologyOperationOutput, output);
187     }
188
189     private VnfTopologyOperationOutput createExpectedOutput(PropBuilder svcResultProp,
190         VnfTopologyOperationInput vnfTopologyOperationInput) {
191         return build(
192             vnfTopologyOperationOutput()
193                 .setSvcRequestId(vnfTopologyOperationInput.getSdncRequestHeader().getSvcRequestId())
194                 .setResponseCode(svcResultProp.get(svcClient.errorCode))
195                 .setAckFinalIndicator(svcResultProp.get(svcClient.ackFinal))
196                 .setResponseMessage(svcResultProp.get(svcClient.errorMessage))
197                 .setServiceResponseInformation(build(serviceResponseInformation()
198                     .setInstanceId(vnfTopologyOperationInput.getServiceInformation().getServiceInstanceId())
199                     .setObjectPath(svcResultProp.get(svcClient.serviceObjectPath))
200                 ))
201         );
202     }
203 }