package org.opendaylight.unimgr.mef.nrp.impl.connectivityservice;
import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
+import com.google.common.util.concurrent.CheckedFuture;
+
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutionException;
import org.junit.Test;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.unimgr.mef.nrp.api.ActivationDriver;
import org.opendaylight.unimgr.mef.nrp.api.ActivationDriverRepoService;
import org.opendaylight.unimgr.mef.nrp.api.RequestValidator;
import org.opendaylight.unimgr.mef.nrp.api.Subrequrest;
import org.opendaylight.unimgr.mef.nrp.common.ResourceActivatorException;
+import org.opendaylight.unimgr.mef.nrp.common.TapiUtils;
import org.opendaylight.unimgr.mef.nrp.impl.ConnectivityServiceIdResourcePool;
+import org.opendaylight.unimgr.mef.nrp.impl.DefaultValidator;
import org.opendaylight.unimgr.utils.ActivationDriverMocks;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.common.rev171113.PortRole;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.common.rev171113.Uuid;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.connectivity.rev171113.CreateConnectivityServiceInput;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.connectivity.rev171113.CreateConnectivityServiceInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.connectivity.rev171113.CreateConnectivityServiceOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.connectivity.rev171113.create.connectivity.service.input.EndPoint;
-import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.connectivity.rev171113.create.connectivity.service.input.EndPointBuilder;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.PortRole;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.Uuid;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.CreateConnectivityServiceInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.CreateConnectivityServiceInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.CreateConnectivityServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.UpdateConnectivityServiceInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.create.connectivity.service.input.EndPoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.create.connectivity.service.input.EndPointBuilder;
import org.opendaylight.yangtools.yang.common.RpcResult;
-import com.google.common.util.concurrent.CheckedFuture;
-/**
- * @author bartosz.michalik@amartus.com
- */
public class TapiConnectivityServiceImplTest {
private Uuid uuid1 = new Uuid("uuid1");
private Uuid uuid2 = new Uuid("uuid2");
- private Uuid uuid3 = new Uuid("uuid3");
+ private String activationDriverId1 = "d1";
+ private String activationDriverId2 = "d2";
private TapiConnectivityServiceImpl connectivityService;
private RequestDecomposer decomposer;
- private RequestValidator validator;
- private ReadWriteTransaction tx;
+ private DataBroker broker;
+ @SuppressWarnings("unchecked")
@Before
public void setUp() {
+ decomposer = mock(RequestDecomposer.class);
+ RequestValidator validator = mock(RequestValidator.class);
+ when(validator.checkValid(any(CreateConnectivityServiceInput.class)))
+ .thenReturn(new RequestValidator.ValidationResult());
+ when(validator.checkValid(any(UpdateConnectivityServiceInput.class)))
+ .thenReturn(new RequestValidator.ValidationResult());
+
ad1 = mock(ActivationDriver.class);
ad2 = mock(ActivationDriver.class);
ad3 = mock(ActivationDriver.class);
+ String activationDriverId3 = "d3";
ActivationDriverRepoService repo = ActivationDriverMocks.builder()
- .add(uuid1, ad1)
- .add(uuid2, ad2)
- .add(uuid3, ad3)
+ .add(activationDriverId1, ad1)
+ .add(activationDriverId2, ad2)
+ .add(activationDriverId3, ad3)
.build();
- decomposer = mock(RequestDecomposer.class);
- validator = mock(RequestValidator.class);
- when(validator.checkValid(any())).thenReturn(new RequestValidator.ValidationResult());
-
connectivityService = new TapiConnectivityServiceImpl();
connectivityService.setDriverRepo(repo);
connectivityService.setDecomposer(decomposer);
connectivityService.setValidator(validator);
- tx = mock(ReadWriteTransaction.class);
+ ReadWriteTransaction tx = mock(ReadWriteTransaction.class);
when(tx.submit()).thenReturn(mock(CheckedFuture.class));
- DataBroker broker = mock(DataBroker.class);
-
-
+ broker = mock(DataBroker.class);
+ when(broker.newReadWriteTransaction()).thenReturn(tx);
when(broker.newWriteOnlyTransaction()).thenReturn(tx);
connectivityService.setBroker(broker);
connectivityService.setServiceIdPool(new ConnectivityServiceIdResourcePool());
CreateConnectivityServiceInput empty = new CreateConnectivityServiceInputBuilder()
.build();
//when
- RpcResult<CreateConnectivityServiceOutput> result = this.connectivityService.createConnectivityService(empty).get();
+ RpcResult<CreateConnectivityServiceOutput> result =
+ this.connectivityService.createConnectivityService(empty).get();
//then
assertFalse(result.isSuccessful());
verifyZeroInteractions(ad1);
configureDecomposerAnswer(eps -> null);
//when
- RpcResult<CreateConnectivityServiceOutput> result = this.connectivityService.createConnectivityService(input).get();
+ RpcResult<CreateConnectivityServiceOutput> result =
+ this.connectivityService.createConnectivityService(input).get();
//then
assertFalse(result.isSuccessful());
verifyZeroInteractions(ad1);
}
@Test
- public void sucessfullTwoDrivers() throws ExecutionException, InterruptedException, ResourceActivatorException, TransactionCommitFailedException {
+ public void withLocalIds() throws Exception {
//having
- CreateConnectivityServiceInput input = input(5);
-
-
- configureDecomposerAnswer(eps -> {
- Subrequrest s1 = new Subrequrest(uuid1, Arrays.asList(eps.get(0), eps.get(1), eps.get(2)));
- Subrequrest s3 = new Subrequrest(uuid3, Arrays.asList(eps.get(3), eps.get(4)));
-
- return Arrays.asList(s1, s3);
- });
+ CreateConnectivityServiceInput input = input("a", "a", "b");
+ connectivityService.setValidator(new DefaultValidator(broker));
//when
- RpcResult<CreateConnectivityServiceOutput> result = this.connectivityService.createConnectivityService(input).get();
+ RpcResult<CreateConnectivityServiceOutput> result =
+ this.connectivityService.createConnectivityService(input).get();
//then
- assertTrue(result.isSuccessful());
- verify(ad1).activate();
- verify(ad3).activate();
- verify(ad1).commit();
- verify(ad3).commit();
+ assertFalse(result.isSuccessful());
+ verifyZeroInteractions(ad1);
verifyZeroInteractions(ad2);
- //3x Connection (2 x system + 1 external) + ConnectivityService
- verify(tx,times(4)).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), any());
-
-
+ verifyZeroInteractions(ad3);
}
@Test
- public void failTwoDriversOneFailing() throws ExecutionException, InterruptedException, ResourceActivatorException, TransactionCommitFailedException {
+ public void failTwoDriversOneFailing()
+ throws ExecutionException, InterruptedException, ResourceActivatorException,
+ TransactionCommitFailedException {
//having
CreateConnectivityServiceInput input = input(4);
configureDecomposerAnswer(eps -> {
- Subrequrest s1 = new Subrequrest(uuid1, Arrays.asList(eps.get(0), eps.get(1)));
- Subrequrest s2 = new Subrequrest(uuid2, Arrays.asList(eps.get(2), eps.get(3)));
+ Subrequrest s1 = new Subrequrest(uuid1, Arrays.asList(eps.get(0), eps.get(1)),activationDriverId1);
+ Subrequrest s2 = new Subrequrest(uuid2, Arrays.asList(eps.get(2), eps.get(3)),activationDriverId2);
return Arrays.asList(s1, s2);
});
doThrow(new ResourceActivatorException()).when(ad2).activate();
//when
- RpcResult<CreateConnectivityServiceOutput> result = this.connectivityService.createConnectivityService(input).get();
+ RpcResult<CreateConnectivityServiceOutput> result =
+ this.connectivityService.createConnectivityService(input).get();
//then
assertFalse(result.isSuccessful());
verify(ad1).activate();
verifyZeroInteractions(ad3);
}
-
- private void configureDecomposerAnswer(Function<List<org.opendaylight.unimgr.mef.nrp.api.EndPoint>, List<Subrequrest>> resp) {
+ @SuppressWarnings({"unchecked", "checkstyle:emptyblock"})
+ private void configureDecomposerAnswer(
+ Function<List<org.opendaylight.unimgr.mef.nrp.api.EndPoint>, List<Subrequrest>> resp) {
try {
when(decomposer.decompose(any(), any(Constraints.class)))
.thenAnswer(a -> {
List<org.opendaylight.unimgr.mef.nrp.api.EndPoint> eps = a.getArgumentAt(0, List.class);
+ eps.forEach(e -> e.setNepRef(TapiUtils.toSysNepRef(new Uuid("node-id"), new Uuid("nep-id"))));
return resp.apply(eps);
});
- } catch (FailureResult f) {
- }
+ } catch (FailureResult _f) { }
}
private CreateConnectivityServiceInput input(int count) {
.build();
}
- private org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.tapi.connectivity.rev171113.create.connectivity.service.input.EndPoint ep(String id) {
+ private CreateConnectivityServiceInput input(String... localIds) {
+
+ List<EndPoint> eps = Arrays.stream(localIds).map(this::ep).collect(Collectors.toList());
+
+ return new CreateConnectivityServiceInputBuilder()
+ .setEndPoint(eps)
+ .build();
+ }
+
+ private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307
+ .create.connectivity.service.input.EndPoint ep(String id) {
return new EndPointBuilder()
.setLocalId(id)
.setRole(PortRole.SYMMETRIC)