Dublin yang model update
[sdnc/northbound.git] / generic-resource-api / provider / src / test / java / org / onap / sdnc / northbound / PnfTopologyOperationRPCTest.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.pnfDetailsBuilder;
16 import static org.onap.sdnc.northbound.util.MDSALUtil.pnfResponseInformation;
17 import static org.onap.sdnc.northbound.util.MDSALUtil.pnfTopologyOperationInput;
18 import static org.onap.sdnc.northbound.util.MDSALUtil.pnfTopologyOperationOutput;
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.PnfTopologyOperationInput;
30 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PnfTopologyOperationOutput;
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 PnfTopologyOperationRPCTest extends GenericResourceApiProviderTest {
37
38     private static final String SVC_OPERATION = "pnf-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         PnfTopologyOperationInput input = build(pnfTopologyOperationInput());
50
51         PnfTopologyOperationOutput output =
52             exec(genericResourceApiProvider::pnfTopologyOperation, 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     /*
61     @Test
62     public void should_fail_when_invalid_pnf_id() throws Exception {
63
64         PnfTopologyOperationInput input = build(pnfTopologyOperationInput()
65             .setServiceInformation(build(serviceInformationBuilder().
66                 setServiceInstanceId("test-service-instance-id")
67             ))
68         );
69
70         PnfTopologyOperationOutput output =
71             exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
72
73         assertEquals("404", output.getResponseCode());
74         assertEquals("invalid input, null or empty pnf-id", output.getResponseMessage());
75         assertEquals("Y", output.getAckFinalIndicator());
76     }*/
77
78
79     @Test
80     public void should_fail_when_client_execution_failed() throws Exception {
81
82         svcClient.mockHasGraph(true);
83         svcClient.mockExecute(new RuntimeException("test exception"));
84
85         PnfTopologyOperationInput input = build(pnfTopologyOperationInput()
86             .setServiceInformation(build(serviceInformationBuilder()
87                 .setServiceInstanceId("test-service-instance-id")
88             ))
89             .setPnfDetails(build(pnfDetailsBuilder()
90                 .setPnfId("test-pnf-id")
91             ))
92         );
93
94         PnfTopologyOperationOutput output =
95             exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
96
97         assertEquals("500", output.getResponseCode());
98         assertEquals("test exception", output.getResponseMessage());
99         assertEquals("Y", output.getAckFinalIndicator());
100     }
101
102     @Test
103     public void should_fail_when_client_has_no_graph() throws Exception {
104
105         svcClient.mockHasGraph(false);
106
107         PnfTopologyOperationInput input = build(pnfTopologyOperationInput()
108             .setServiceInformation(build(serviceInformationBuilder()
109                 .setServiceInstanceId("test-service-instance-id")
110             ))
111             .setPnfDetails(build(pnfDetailsBuilder()
112                 .setPnfId("test-pnf-id")
113             ))
114         );
115
116         PnfTopologyOperationOutput output =
117             exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
118
119         assertEquals("503", output.getResponseCode());
120         assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
121         assertEquals("Y", output.getAckFinalIndicator());
122     }
123
124     @Test
125     public void should_fail_when_failed_to_update_mdsal() throws Exception {
126
127         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
128         svcClient.mockExecute(svcResultProp);
129         svcClient.mockHasGraph(true);
130         WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
131         when(mockWriteTransaction.submit()).thenThrow(new TransactionChainClosedException("test exception"));
132
133         DataBroker spyDataBroker = Mockito.spy(dataBroker);
134         when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
135         genericResourceApiProvider.setDataBroker(spyDataBroker);
136
137         PnfTopologyOperationInput input = build(pnfTopologyOperationInput()
138             .setServiceInformation(build(serviceInformationBuilder()
139                 .setServiceInstanceId("test-service-instance-id")
140             ))
141             .setPnfDetails(build(pnfDetailsBuilder()
142                 .setPnfId("test-pnf-id")
143             ))
144         );
145
146         PnfTopologyOperationOutput output =
147             exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
148
149         assertEquals("500", output.getResponseCode());
150         assertEquals("test exception", output.getResponseMessage());
151         assertEquals("Y", output.getAckFinalIndicator());
152     }
153
154     @Test
155     public void should_complete_with_success_when_no_errors() throws Exception {
156
157         svcClient.mockHasGraph(true);
158         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
159         svcClient.mockExecute(svcResultProp);
160
161         PnfTopologyOperationInput input = build(pnfTopologyOperationInput()
162             .setSdncRequestHeader(build(sdncRequestHeader()
163                 .setSvcRequestId("test-svc-request-id")
164                 .setSvcAction(SvcAction.Assign)
165             ))
166             .setRequestInformation(build(requestInformation()
167                 .setRequestId("test-request-id")
168                 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
169             ))
170             .setServiceInformation(build(serviceInformationBuilder()
171                 .setServiceInstanceId("test-service-instance-id")
172             ))
173             .setPnfDetails(build(pnfDetailsBuilder()
174                 .setPnfId("test-pnf-id")
175             ))
176         );
177
178         PnfTopologyOperationOutput output =
179             exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
180
181         assertEquals("200", output.getResponseCode());
182         assertEquals("OK", output.getResponseMessage());
183         assertEquals("Y", output.getAckFinalIndicator());
184
185         PnfTopologyOperationOutput expectedPnfTopologyOperationOutput = createExpectedOutput(svcResultProp,
186             input);
187         assertEquals(expectedPnfTopologyOperationOutput, output);
188     }
189
190     private PnfTopologyOperationOutput createExpectedOutput(PropBuilder svcResultProp,
191         PnfTopologyOperationInput pnfTopologyOperationInput) {
192         return build(
193             pnfTopologyOperationOutput()
194                 .setSvcRequestId(pnfTopologyOperationInput.getSdncRequestHeader().getSvcRequestId())
195                 .setResponseCode(svcResultProp.get(svcClient.errorCode))
196                 .setAckFinalIndicator(svcResultProp.get(svcClient.ackFinal))
197                 .setResponseMessage(svcResultProp.get(svcClient.errorMessage))
198                 .setServiceResponseInformation(build(serviceResponseInformation()
199                     .setInstanceId(pnfTopologyOperationInput.getServiceInformation().getServiceInstanceId())
200                     .setObjectPath(svcResultProp.get(svcClient.serviceObjectPath))
201                 ))
202                 .setPnfResponseInformation(build(pnfResponseInformation()
203                     .setInstanceId(pnfTopologyOperationInput.getPnfDetails().getPnfId())
204                     .setObjectPath(svcResultProp.get(svcClient.pnfObjectPath))
205                 ))
206         );
207     }
208 }