package org.onap.sdnc.vnfapi;
+import com.google.common.util.concurrent.CheckedFuture;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec;
import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTestCustomizer;
import org.opendaylight.controller.md.sal.binding.test.ConcurrentDataBrokerTestCustomizer;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationInput;
import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationOutput;
+import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.request.information.RequestInformation;
+import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.request.information.RequestInformation.RequestAction;
+import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.request.information.RequestInformationBuilder;
import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationInputBuilder;
import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.request.information.VnfInstanceRequestInformation;
import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.request.information.VnfInstanceRequestInformationBuilder;
import java.util.Properties;
import java.util.concurrent.ExecutionException;
-class DataBrokerErrorMsgConfigurator {
+class VnfInstanceExceptionThrowerConfigurator {
+ private boolean shouldThrowExceptionDuringTransactionPut;
+
+ public VnfInstanceExceptionThrowerConfigurator() {
+ this.shouldThrowExceptionDuringTransactionPut = true;
+ }
+
+ public boolean shouldThrowExceptionDuringTransactionPut() {
+ return shouldThrowExceptionDuringTransactionPut;
+ }
+
+ public void setShouldThrowExceptionDuringTransactionPut(boolean shouldThrowExceptionDuringTransactionPut) {
+ this.shouldThrowExceptionDuringTransactionPut = shouldThrowExceptionDuringTransactionPut;
+ }
+}
+
+class VnfInstanceDataBrokerErrorMsgConfigurator {
static public String JAVA_LANG_RUNTIME_EXCEPTION = "java.lang.RuntimeException: ";
static public String TRANSACTION_WRITE_ERROR = "transaction-write-error";
}
-class DataBrokerStab extends BindingDOMDataBrokerAdapter {
- public DataBrokerStab(final DOMDataBroker domDataBroker, final BindingToNormalizedNodeCodec codec) {
+class VnfInstanceDataBrokerStab extends BindingDOMDataBrokerAdapter {
+ VnfInstanceExceptionThrowerConfigurator exceptionThrowerConfigurator;
+
+ public VnfInstanceDataBrokerStab(final DOMDataBroker domDataBroker,
+ final BindingToNormalizedNodeCodec codec, VnfInstanceExceptionThrowerConfigurator exceptionThrowerConfigurator) {
super(domDataBroker, codec);
+ this.exceptionThrowerConfigurator = exceptionThrowerConfigurator;
}
@Override
public WriteTransaction newWriteOnlyTransaction() {
+ if (exceptionThrowerConfigurator.shouldThrowExceptionDuringTransactionPut()) {
+ return newThrowingExceptionWriteOnlyTransaction();
+ }
+ return newNotThrowingExceptionWriteOnlyTransaction();
+ }
+
+ private WriteTransaction newThrowingExceptionWriteOnlyTransaction() {
WriteTransaction mockWriteTransaction = Mockito.mock(WriteTransaction.class);
- Mockito.doThrow(new RuntimeException(DataBrokerErrorMsgConfigurator.TRANSACTION_WRITE_ERROR))
+ Mockito.doThrow(new RuntimeException(VnfInstanceDataBrokerErrorMsgConfigurator.TRANSACTION_WRITE_ERROR))
.when(mockWriteTransaction).put(Mockito.any(), Mockito.any(), Mockito.any());
return mockWriteTransaction;
}
+
+ private WriteTransaction newNotThrowingExceptionWriteOnlyTransaction() {
+ WriteTransaction mockWriteTransaction = Mockito.mock(WriteTransaction.class);
+ CheckedFuture<Void, TransactionCommitFailedException> mockCheckedFuture =
+ Mockito.mock(CheckedFuture.class);
+ Mockito.doNothing().when(mockWriteTransaction).put(Mockito.any(), Mockito.any(), Mockito.any());
+ Mockito.doReturn(mockCheckedFuture).when(mockWriteTransaction).submit();
+ return mockWriteTransaction;
+ }
}
-class VnfApiProviderDataBrokerTestCustomizer extends ConcurrentDataBrokerTestCustomizer {
+class VnfInstanceProviderDataBrokerTestCustomizer extends ConcurrentDataBrokerTestCustomizer {
+ VnfInstanceExceptionThrowerConfigurator exceptionThrowerConfigurator;
+
+ public VnfInstanceProviderDataBrokerTestCustomizer(VnfInstanceExceptionThrowerConfigurator exceptionThrowerConfigurator) {
+ super(false);
+ this.exceptionThrowerConfigurator = exceptionThrowerConfigurator;
+ }
+
public DataBroker createDataBroker() {
- return new DataBrokerStab(createDOMDataBroker(), super.getBindingToNormalized());
+ return new VnfInstanceDataBrokerStab(createDOMDataBroker(),
+ super.getBindingToNormalized(), this.exceptionThrowerConfigurator);
}
}
private static final String ACK_FINAL = "ack-final";
private static final String SVC_OPERATION = "vnf-topology-operation";
+ private VnfInstanceExceptionThrowerConfigurator exceptionThrowerConfigurator;
+
@Override
protected AbstractDataBrokerTestCustomizer createDataBrokerTestCustomizer() {
- return new VnfApiProviderDataBrokerTestCustomizer();
+ this.exceptionThrowerConfigurator = new VnfInstanceExceptionThrowerConfigurator();
+ return new VnfInstanceProviderDataBrokerTestCustomizer(this.exceptionThrowerConfigurator);
}
@Before
@Test
public void vnfInstanceTopologyOperationInput_getVnfInstanceRequestInformationVnfInstanceIdIsNull() throws Exception {
- VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
- builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(null));
+ RequestInformation reqInfo = createRequestInformation(RequestAction.PreloadVnfInstanceRequest);
+ VnfInstanceRequestInformation vnfInstanceRequestInformation = createVnfInstanceRequestInformation(null);
+ VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(vnfInstanceRequestInformation, reqInfo);
VnfInstanceTopologyOperationInput input = builder.build();
checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
}
@Test
public void vnfInstanceTopologyOperationInput_VnfInstanceRequestInformationVnfInstanceIdIsZero() throws Exception {
- VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
- builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(""));
+ VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(""), createRequestInformation(RequestAction.PreloadVnfInstanceRequest));
VnfInstanceTopologyOperationInput input = builder.build();
checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
}
@Test
public void vnfInstanceTopologyOperationInput_svcLogicClientHasGrapheReturnFalse() throws Exception {
- VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
- builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
+ VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(VIID), createRequestInformation(RequestAction.PreloadVnfInstanceRequest));
VnfInstanceTopologyOperationInput input = builder.build();
setReturnForSvcLogicServiceClientHasGraph(false);
checkVnfInstanceTopologyOperation(input, "503", NO_SERVICE_LOGIC);
@Test
public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteThrowsSvcLogicException() throws Exception {
- VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
- builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
+ VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(VIID), createRequestInformation(RequestAction.PreloadVnfInstanceRequest));
VnfInstanceTopologyOperationInput input = builder.build();
setReturnForSvcLogicServiceClientHasGraph(true);
setMockVNFSDNSvcLogicServiceClientToThrowException(SvcLogicException.class);
@Test
public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteThrowsException() throws Exception {
- VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
- builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
+ VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(VIID), createRequestInformation(RequestAction.PreloadVnfInstanceRequest));
VnfInstanceTopologyOperationInput input = builder.build();
setReturnForSvcLogicServiceClientHasGraph(true);
@Test
public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteReturnsNotNull() throws Exception {
- VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
- builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
+ VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(VIID), createRequestInformation(RequestAction.PreloadVnfInstanceRequest));
VnfInstanceTopologyOperationInput input = builder.build();
Properties properties = prop().set(ERROR_CODE, "500")
@Test
public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteReturnsNull() throws Exception {
- VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
- builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
+ VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(VIID), createRequestInformation(RequestAction.PreloadVnfInstanceRequest));
VnfInstanceTopologyOperationInput input = builder.build();
setReturnForSvcLogicServiceClientHasGraph(true);
setReturnForSvcLogicServiceClientExecute(null);
- String expectedErrorMsg = DataBrokerErrorMsgConfigurator.JAVA_LANG_RUNTIME_EXCEPTION
- + DataBrokerErrorMsgConfigurator.TRANSACTION_WRITE_ERROR;
+ String expectedErrorMsg = VnfInstanceDataBrokerErrorMsgConfigurator.JAVA_LANG_RUNTIME_EXCEPTION
+ + VnfInstanceDataBrokerErrorMsgConfigurator.TRANSACTION_WRITE_ERROR;
checkVnfInstanceTopologyOperation(input, "500", expectedErrorMsg);
}
+ @Test
+ public void vnfInstanceTopologyOperationInput_ActivateNoErrorDuringTransactionWriting() throws Exception {
+ VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(VIID), createRequestInformation(RequestAction.VnfInstanceActivateRequest));
+ VnfInstanceTopologyOperationInput input = builder.build();
+
+ setReturnForSvcLogicServiceClientHasGraph(true);
+ setReturnForSvcLogicServiceClientExecute(null);
+ exceptionThrowerConfigurator.setShouldThrowExceptionDuringTransactionPut(false);
+ checkVnfInstanceTopologyOperation(input, "200", null);
+ }
+
+ @Test
+ public void vnfInstanceTopologyOperationInput_ChangeNoErrorDuringTransactionWriting() throws Exception {
+ VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(VIID), createRequestInformation(RequestAction.ChangeVnfInstanceActivateRequest));
+ VnfInstanceTopologyOperationInput input = builder.build();
+
+ setReturnForSvcLogicServiceClientHasGraph(true);
+ setReturnForSvcLogicServiceClientExecute(null);
+ exceptionThrowerConfigurator.setShouldThrowExceptionDuringTransactionPut(false);
+ checkVnfInstanceTopologyOperation(input, "200", null);
+ }
+
+ @Test
+ public void vnfInstanceTopologyOperationInput_DisconnectNoErrorDuringTransactionWriting() throws Exception {
+ VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(VIID), createRequestInformation(RequestAction.DisconnectVnfInstanceRequest));
+ VnfInstanceTopologyOperationInput input = builder.build();
+
+ setReturnForSvcLogicServiceClientHasGraph(true);
+ setReturnForSvcLogicServiceClientExecute(null);
+ exceptionThrowerConfigurator.setShouldThrowExceptionDuringTransactionPut(false);
+ checkVnfInstanceTopologyOperation(input, "200", null);
+ }
+
+ @Test
+ public void vnfInstanceTopologyOperationInput_PreloadNoErrorDuringTransactionWriting() throws Exception {
+ VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(VIID), createRequestInformation(RequestAction.PreloadVnfInstanceRequest));
+ VnfInstanceTopologyOperationInput input = builder.build();
+
+ setReturnForSvcLogicServiceClientHasGraph(true);
+ setReturnForSvcLogicServiceClientExecute(null);
+ exceptionThrowerConfigurator.setShouldThrowExceptionDuringTransactionPut(false);
+ checkVnfInstanceTopologyOperation(input, "200", null);
+ }
+
+ @Test
+ public void vnfInstanceTopologyOperationInput_DeletePreloadNoErrorDuringTransactionWriting() throws Exception {
+ VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(VIID), createRequestInformation(RequestAction.DeletePreloadVnfInstanceRequest));
+ VnfInstanceTopologyOperationInput input = builder.build();
+
+ setReturnForSvcLogicServiceClientHasGraph(true);
+ setReturnForSvcLogicServiceClientExecute(null);
+ exceptionThrowerConfigurator.setShouldThrowExceptionDuringTransactionPut(false);
+ checkVnfInstanceTopologyOperation(input, "200", null);
+ }
private void checkVnfInstanceTopologyOperation(VnfInstanceTopologyOperationInput input,
String expectedResponseCode, String expectedResponseMessage) throws ExecutionException, InterruptedException {
.thenThrow(exceptionClass.asSubclass(Throwable.class));
}
+ private VnfInstanceTopologyOperationInputBuilder createVnfInstanceTopologyOperationInputBuilder(VnfInstanceRequestInformation vnfInstanceRequestInformation, RequestInformation reqInfo) {
+ VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
+ builder.setVnfInstanceRequestInformation(vnfInstanceRequestInformation);
+ builder.setRequestInformation(reqInfo);
+ return builder;
+ }
+
+
+
private VnfInstanceRequestInformation createVnfInstanceRequestInformation(String vnfInstanceId) {
return new VnfInstanceRequestInformationBuilder()
.setVnfInstanceId(vnfInstanceId)
.setVnfModelId(PRELOAD_TYPE)
.build();
}
+
+ private RequestInformation createRequestInformation(RequestAction action) {
+ return new RequestInformationBuilder()
+ .setRequestAction(action)
+ .build();
+ }
+
+
}