Merge dev/fluorine work across to master
[unimgr.git] / legato-api / src / test / java / org / opendaylight / unimgr / mef / legato / evc / EvcUnitTest.java
diff --git a/legato-api/src/test/java/org/opendaylight/unimgr/mef/legato/evc/EvcUnitTest.java b/legato-api/src/test/java/org/opendaylight/unimgr/mef/legato/evc/EvcUnitTest.java
new file mode 100644 (file)
index 0000000..029a049
--- /dev/null
@@ -0,0 +1,302 @@
+/*
+ * Copyright (c) 2018 Xoriant Corporation and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.unimgr.mef.legato.evc;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.argThat;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import ch.qos.logback.classic.spi.LoggingEvent;
+import ch.qos.logback.core.Appender;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentMatcher;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+import org.opendaylight.unimgr.mef.legato.LegatoServiceController;
+import org.opendaylight.unimgr.mef.legato.dao.EVCDao;
+import org.opendaylight.unimgr.mef.legato.util.LegatoUtils;
+import org.opendaylight.unimgr.mef.legato.utils.Constants;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.MefServices;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.mef.services.CarrierEthernet;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.mef.services.carrier.ethernet.SubscriberServices;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.mef.services.carrier.ethernet.subscriber.services.Evc;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.mef.services.carrier.ethernet.subscriber.services.EvcBuilder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.mef.services.carrier.ethernet.subscriber.services.EvcKey;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.mef.services.carrier.ethernet.subscriber.services.evc.CosNamesBuilder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.mef.services.carrier.ethernet.subscriber.services.evc.EndPointsBuilder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.mef.services.carrier.ethernet.subscriber.services.evc.cos.names.CosName;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.mef.services.carrier.ethernet.subscriber.services.evc.cos.names.CosNameBuilder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.mef.services.carrier.ethernet.subscriber.services.evc.cos.names.CosNameKey;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.mef.services.carrier.ethernet.subscriber.services.evc.end.points.EndPoint;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.mef.services.carrier.ethernet.subscriber.services.evc.end.points.EndPointBuilder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.mef.services.carrier.ethernet.subscriber.services.evc.end.points.end.point.CeVlansBuilder;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.types.rev171215.ConnectionType;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.types.rev171215.EvcIdType;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.types.rev171215.Identifier1024;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.types.rev171215.Identifier45;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.types.rev171215.MaxFrameSizeType;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.types.rev171215.MefServiceType;
+import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.types.rev171215.VlanIdType;
+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.DeleteConnectivityServiceInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.TapiConnectivityService;
+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.UpdateConnectivityServiceInputBuilder;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.api.support.membermodification.MemberMatcher;
+import org.powermock.api.support.membermodification.MemberModifier;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @author Arif.Hussain@Xoriant.Com
+ *
+ */
+
+@SuppressWarnings("deprecation")
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({InstanceIdentifier.class, LogicalDatastoreType.class, LegatoUtils.class})
+public class EvcUnitTest {
+
+    @Mock  private LegatoServiceController legatoServiceController;
+    @Mock  private TapiConnectivityService prestoConnectivityService;
+    @Mock  private DataBroker dataBroker;
+    @SuppressWarnings("rawtypes")
+    @Mock  private CheckedFuture checkedFuture;
+    @SuppressWarnings("rawtypes")
+    @Mock  private Appender mockAppender;
+    @Mock  private WriteTransaction transaction;
+    @Mock  private ReadOnlyTransaction readTxn ;
+    private EndPointBuilder endPointBuilder1;
+    private EndPointBuilder endPointBuilder2;
+    private Evc evc;
+    private ch.qos.logback.classic.Logger root;
+
+    @SuppressWarnings("unchecked")
+    @Before
+    public void setUp() throws Exception {
+        legatoServiceController = PowerMockito.mock(LegatoServiceController.class, Mockito.CALLS_REAL_METHODS);
+        PowerMockito.mockStatic(LegatoUtils.class, Mockito.CALLS_REAL_METHODS);
+
+        MemberModifier.field(LegatoServiceController.class, "dataBroker").set(legatoServiceController, dataBroker);
+
+        CosNameBuilder builder = new CosNameBuilder();
+        builder.setName(new Identifier1024(Constants.COSNAME));
+        builder.withKey(new CosNameKey(new Identifier1024(Constants.COSNAME)));
+
+        final List<CosName> cosNameList = new ArrayList<CosName>();
+        cosNameList.add(builder.build());
+
+        CosNamesBuilder cosNamesBuilder = new CosNamesBuilder();
+        cosNamesBuilder.setCosName(cosNameList);
+
+        final List<VlanIdType> vlanIdTypes = new ArrayList<>();
+        vlanIdTypes.add(new VlanIdType(Constants.VLAN_ID_TYPE));
+
+        CeVlansBuilder ceVlansBuilder = new CeVlansBuilder();
+        ceVlansBuilder.setCeVlan(vlanIdTypes);
+
+        endPointBuilder1 = new EndPointBuilder();
+        endPointBuilder1.setCeVlans(ceVlansBuilder.build());
+        endPointBuilder1.setUniId(new Identifier45(Constants.UNI_ID1));
+
+        endPointBuilder2 = new EndPointBuilder();
+        endPointBuilder2.setCeVlans(ceVlansBuilder.build());
+        endPointBuilder2.setUniId(new Identifier45(Constants.UNI_ID2));
+
+        final List<EndPoint> endPointList = new ArrayList<EndPoint>();
+        endPointList.add(endPointBuilder1.build());
+        endPointList.add(endPointBuilder2.build());
+
+        evc = (Evc) new EvcBuilder().withKey(new EvcKey(new EvcIdType(Constants.EVC_ID_TYPE)))
+                .setMaxFrameSize(new MaxFrameSizeType(Constants.MAXFRAME_SIZE_TYPE))
+                .setEvcId(new EvcIdType(Constants.EVC_ID_TYPE)).setSvcType(MefServiceType.Epl)
+                .setConnectionType(ConnectionType.PointToPoint).setCosNames(cosNamesBuilder.build())
+                .setEndPoints(new EndPointsBuilder().setEndPoint(endPointList).build()).build();
+
+        root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
+        when(mockAppender.getName()).thenReturn("MOCK");
+        root.addAppender(mockAppender);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void createEvc() throws ReadFailedException {
+
+        try {
+            assertNotNull(evc);
+            final EVCDao evcDao = mock(EVCDao.class);
+            MemberModifier.suppress(MemberMatcher.method(LegatoUtils.class, Constants.PARSE_NODES));
+            when(LegatoUtils.parseNodes(evc)).thenReturn(evcDao);
+
+            CreateConnectivityServiceInputBuilder objInputBuilder =
+                    mock(CreateConnectivityServiceInputBuilder.class);
+            MemberModifier.suppress(MemberMatcher.method(LegatoUtils.class,
+                    Constants.CREATE_CONNECTIVITY_INPUT, DataBroker.class,
+                    LogicalDatastoreType.class, InstanceIdentifier.class));
+            when(LegatoUtils.buildCreateConnectivityServiceInput(evcDao))
+                            .thenReturn((CreateConnectivityServiceInput) objInputBuilder);
+
+            final InstanceIdentifier<?> evcKey = InstanceIdentifier.create(MefServices.class)
+                    .child(CarrierEthernet.class).child(SubscriberServices.class)
+                    .child(Evc.class, new EvcKey(new EvcIdType(evc.getEvcId())));
+
+            final Optional<Evc> optEvc = mock(Optional.class);
+            when(optEvc.isPresent()).thenReturn(true);
+            when(optEvc.get()).thenReturn(evc);
+
+            when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction);
+            doNothing().when(transaction).put(any(LogicalDatastoreType.class),
+                    any(InstanceIdentifier.class), any(Evc.class));
+
+            MemberModifier.suppress(MemberMatcher.method(LegatoUtils.class, Constants.READ_EVC,
+                    DataBroker.class, LogicalDatastoreType.class, InstanceIdentifier.class));
+            when(LegatoUtils.readEvc(any(DataBroker.class), any(LogicalDatastoreType.class),
+                    evcKey)).thenReturn(optEvc);
+
+            final InstanceIdentifier<SubscriberServices> instanceIdentifier =
+                    InstanceIdentifier.builder(MefServices.class).child(CarrierEthernet.class)
+                            .child(SubscriberServices.class).build();
+
+            doNothing().when(transaction).put(any(LogicalDatastoreType.class),
+                    any(InstanceIdentifier.class), any(Evc.class));
+            when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction);
+            assertEquals(true,
+                    LegatoUtils.updateEvcInOperationalDB(evc, instanceIdentifier, dataBroker));
+            verify(transaction).put(any(LogicalDatastoreType.class), any(InstanceIdentifier.class),
+                    any(Evc.class));
+            verify(transaction).submit();
+
+        } catch (Exception ex) {
+        }
+
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void updateEvc() {
+        try {
+            assertNotNull(evc);
+            final EVCDao evcDao = mock(EVCDao.class);
+            MemberModifier.suppress(MemberMatcher.method(LegatoUtils.class, Constants.PARSE_NODES));
+            when(LegatoUtils.parseNodes(evc)).thenReturn(evcDao);
+
+            final UpdateConnectivityServiceInputBuilder objBuilder =
+                    mock(UpdateConnectivityServiceInputBuilder.class);
+            MemberModifier.suppress(MemberMatcher.method(LegatoUtils.class,
+                    Constants.UPDATE_CONNECTIVITY_INPUT, DataBroker.class,
+                    LogicalDatastoreType.class, InstanceIdentifier.class));
+            when(LegatoUtils.buildUpdateConnectivityServiceInput(evcDao, evcDao.getUniList().get(0), Constants.UUID))
+                            .thenReturn((UpdateConnectivityServiceInput) objBuilder);
+
+            final InstanceIdentifier<?> evcKey = InstanceIdentifier.create(MefServices.class)
+                    .child(CarrierEthernet.class).child(SubscriberServices.class)
+                    .child(Evc.class, new EvcKey(new EvcIdType(Constants.EVC_ID_TYPE)));
+
+            final Optional<Evc> optEvc = mock(Optional.class);
+            when(optEvc.isPresent()).thenReturn(true);
+            when(optEvc.get()).thenReturn(evc);
+            MemberModifier.suppress(MemberMatcher.method(LegatoUtils.class, Constants.READ_EVC,
+                    DataBroker.class, LogicalDatastoreType.class, InstanceIdentifier.class));
+            when(LegatoUtils.readEvc(any(DataBroker.class), any(LogicalDatastoreType.class),
+                    evcKey)).thenReturn(optEvc);
+            when(optEvc.isPresent()).thenReturn(true);
+            doNothing().when(transaction).delete(any(LogicalDatastoreType.class),
+                    any(InstanceIdentifier.class));
+
+            MemberModifier.suppress(MemberMatcher.method(LegatoUtils.class,
+                    Constants.DELETE_NODES_FROM_OPERATIONAL, DataBroker.class,
+                    LogicalDatastoreType.class, InstanceIdentifier.class));
+            LegatoUtils.deleteFromOperationalDB(evcKey, any(DataBroker.class));
+            verify(transaction).delete(LogicalDatastoreType.OPERATIONAL, evcKey);
+            verify(transaction).submit();
+            when(optEvc.isPresent()).thenReturn(true);
+            doNothing().when(transaction).put(any(LogicalDatastoreType.class),
+                    any(InstanceIdentifier.class), any(Evc.class));
+
+            final InstanceIdentifier<SubscriberServices> instanceIdentifier =
+                    InstanceIdentifier.builder(MefServices.class).child(CarrierEthernet.class)
+                            .child(SubscriberServices.class).build();
+
+            WriteTransaction transaction2 = Mockito.mock(WriteTransaction.class);
+            when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction2);
+            doNothing().when(transaction2).put(any(LogicalDatastoreType.class),
+                    any(InstanceIdentifier.class), any(Evc.class));
+            when(transaction2.submit()).thenReturn(checkedFuture);
+            assertEquals(true,
+                    LegatoUtils.updateEvcInOperationalDB(evc, instanceIdentifier, dataBroker));
+            verify(transaction2).put(any(LogicalDatastoreType.class), any(InstanceIdentifier.class),
+                    any(Evc.class));
+            verify(transaction2).submit();
+        } catch (Exception e) {
+        }
+    }
+
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    @Test
+    public void deleteEvc() throws Exception {
+        DeleteConnectivityServiceInput input = mock(DeleteConnectivityServiceInput.class);
+        assertEquals(true, callDeleteConnectionService(input));
+
+        final InstanceIdentifier<?> evcKey = InstanceIdentifier.create(MefServices.class)
+                .child(CarrierEthernet.class).child(SubscriberServices.class)
+                .child(Evc.class, new EvcKey(new EvcIdType(Constants.EVC_ID_TYPE)));
+
+        when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction);
+        doNothing().when(transaction).delete(any(LogicalDatastoreType.class),
+                any(InstanceIdentifier.class));
+        when(transaction.submit()).thenReturn(checkedFuture);
+        assertEquals(true, LegatoUtils.deleteFromOperationalDB(evcKey, dataBroker));
+        verify(transaction).delete(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
+        verify(transaction).submit();
+        verify(mockAppender).doAppend(argThat(new ArgumentMatcher() {
+            @Override
+            public boolean matches(final Object argument) {
+                return ((LoggingEvent) argument).getFormattedMessage()
+                        .contains("Received a request to delete node");
+            }
+        }));
+
+    }
+
+    private boolean callDeleteConnectionService(
+            DeleteConnectivityServiceInput deleteConnectivityServiceInput) {
+        try {
+            this.prestoConnectivityService
+                    .deleteConnectivityService(deleteConnectivityServiceInput);
+            return true;
+
+        } catch (Exception ex) {
+            return false;
+        }
+    }
+}