2  * ============LICENSE_START=======================================================
 
   3  * ONAP : ccsdk features
 
   4  * ================================================================================
 
   5  * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
 
   7  * ================================================================================
 
   8  * Licensed under the Apache License, Version 2.0 (the "License");
 
   9  * you may not use this file except in compliance with the License.
 
  10  * You may obtain a copy of the License at
 
  12  *     http://www.apache.org/licenses/LICENSE-2.0
 
  14  * Unless required by applicable law or agreed to in writing, software
 
  15  * distributed under the License is distributed on an "AS IS" BASIS,
 
  16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  17  * See the License for the specific language governing permissions and
 
  18  * limitations under the License.
 
  19  * ============LICENSE_END=========================================================
 
  22 package org.onap.ccsdk.features.sdnr.wt.devicemanager.openroadm71.test;
 
  24 import static org.mockito.Mockito.mock;
 
  25 import static org.mockito.Mockito.verify;
 
  26 import static org.mockito.Mockito.when;
 
  27 import java.util.Arrays;
 
  28 import java.util.HashMap;
 
  30 import org.eclipse.jdt.annotation.Nullable;
 
  31 import org.junit.Before;
 
  32 import org.junit.Test;
 
  33 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
 
  34 import org.onap.ccsdk.features.sdnr.wt.devicemanager.openroadm71.impl.OpenroadmInventoryInput;
 
  35 import org.onap.ccsdk.features.sdnr.wt.devicemanager.openroadm71.impl.OpenroadmNetworkElement;
 
  36 import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
 
  37 import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.FaultService;
 
  38 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.Capabilities;
 
  39 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfBindingAccessor;
 
  40 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.TransactionUtils;
 
  41 import org.opendaylight.mdsal.binding.api.DataBroker;
 
  42 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 
  43 import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev200529.ActiveAlarmList;
 
  44 import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev200529.Severity;
 
  45 import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev200529.active.alarm.list.ActiveAlarms;
 
  46 import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev200529.active.alarm.list.ActiveAlarmsKey;
 
  47 import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev200529.alarm.ProbableCauseBuilder;
 
  48 import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev200529.alarm.ResourceBuilder;
 
  49 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev191129.NodeIdType;
 
  50 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.LifecycleState;
 
  51 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 
  52 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev200529.OpenroadmVersionType;
 
  53 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.circuit.pack.ParentCircuitPack;
 
  54 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.circuit.packs.CircuitPacks;
 
  55 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.circuit.packs.CircuitPacksKey;
 
  56 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.interfaces.grp.Interface;
 
  57 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.interfaces.grp.InterfaceKey;
 
  58 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.OrgOpenroadmDevice;
 
  59 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.Info;
 
  60 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.InfoBuilder;
 
  61 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.Xponder;
 
  62 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.XponderKey;
 
  63 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.shelf.Slots;
 
  64 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.shelf.SlotsKey;
 
  65 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.shelves.Shelves;
 
  66 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.shelves.ShelvesKey;
 
  67 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
 
  68 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.XpdrNodeTypes;
 
  69 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev200529.HistoricalPmList;
 
  70 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev200529.historical.pm.group.HistoricalPm;
 
  71 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev200529.historical.pm.group.HistoricalPmKey;
 
  72 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev200529.historical.pm.list.HistoricalPmEntry;
 
  73 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev200529.historical.pm.list.HistoricalPmEntryKey;
 
  74 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev200529.historical.pm.val.group.Measurement;
 
  75 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev200529.historical.pm.val.group.MeasurementKey;
 
  76 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev200327.PmDataType;
 
  77 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev200327.PmGranularity;
 
  78 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev200327.PmNamesEnum;
 
  79 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev200327.Validity;
 
  80 import org.opendaylight.yang.gen.v1.http.org.openroadm.probablecause.rev200529.ProbableCauseEnum;
 
  81 import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev200529.resource.DeviceBuilder;
 
  82 import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev191129.ResourceTypeEnum;
 
  83 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 
  84 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 
  85 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
 
  86 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 
  87 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
  88 import org.opendaylight.yangtools.yang.common.Uint16;
 
  89 import org.opendaylight.yangtools.yang.common.Uint32;
 
  90 import org.opendaylight.yangtools.yang.common.Uint64;
 
  91 import org.opendaylight.yangtools.yang.common.Uint8;
 
  93 public class TestOpenRoadmNetworkElement {
 
  95     NetconfBindingAccessor accessor = mock(NetconfBindingAccessor.class);
 
  96     DeviceManagerServiceProvider serviceProvider = mock(DeviceManagerServiceProvider.class);
 
  97     DataProvider dataprovider = mock(DataProvider.class);
 
  98     Capabilities capabilities = mock(Capabilities.class);
 
  99     TransactionUtils transactionUtils = mock(TransactionUtils.class);
 
 100     DataBroker dataBroker = mock(DataBroker.class);
 
 101     FaultService faultService = mock(FaultService.class);
 
 102     OrgOpenroadmDevice device;
 
 103     OpenroadmInventoryInput inventoryData;
 
 105     private Shelves shelf = mock(Shelves.class);
 
 106     private @Nullable Map<ShelvesKey, Shelves> shelfList;
 
 107     private CircuitPacks cp, cp1, cp2, cp3;
 
 108     private Interface interfaces = mock(Interface.class);
 
 109     private Xponder xpdr = mock(Xponder.class);
 
 110     private IpAddress ipAddress = new IpAddress(new Ipv4Address("127.0.0.11"));
 
 111     private Info info = new InfoBuilder().setNodeId(NodeIdType.getDefaultInstance("zNhe2i5")).setClli("NodeB")
 
 112             .setSerialId("0002").setModel("model2").setVendor("VendorA").setCurrentIpAddress(ipAddress)
 
 113             .setCurrentIpAddress(ipAddress).setCurrentDefaultGateway(new IpAddress(new Ipv4Address("127.0.0.20")))
 
 114             .setCurrentDefaultGateway(new IpAddress(new Ipv4Address("127.0.0.20"))).setNodeType(NodeTypes.Rdm)
 
 115             .setCurrentDatetime(new DateAndTime("2017-10-22T15:23:43Z")).setSoftwareVersion("swversion1234")
 
 116             .setCurrentPrefixLength(Uint8.valueOf(45)).setMaxDegrees(Uint16.valueOf(56)).setMaxSrgs(Uint16.valueOf(251))
 
 117             .setMaxNumBin15minHistoricalPm(Uint16.valueOf(324)).setMaxNumBin24hourHistoricalPm(Uint16.valueOf(142))
 
 118             .setOpenroadmVersion(OpenroadmVersionType._20).build();
 
 119     private ActiveAlarmList alarmList = mock(ActiveAlarmList.class);
 
 120     private ActiveAlarms activeAlarms = mock(ActiveAlarms.class);
 
 121     private HistoricalPmList pmDataList = mock(HistoricalPmList.class);
 
 122     private HistoricalPm historicalPm = mock(HistoricalPm.class);
 
 126         when(accessor.getCapabilites()).thenReturn(capabilities);
 
 127         when(serviceProvider.getFaultService()).thenReturn(faultService);
 
 128         when(serviceProvider.getDataProvider()).thenReturn(dataprovider);
 
 129         NodeId nNodeId = new NodeId("RoadmA");
 
 130         when(accessor.getNodeId()).thenReturn(nNodeId);
 
 131         when(accessor.getDataBroker()).thenReturn(dataBroker);
 
 132         when(accessor.getTransactionUtils()).thenReturn(transactionUtils);
 
 133         when(accessor.getCapabilites().isSupportingNamespaceAndRevision(OrgOpenroadmDevice.QNAME)).thenReturn(true);
 
 134         final Class<OrgOpenroadmDevice> openRoadmDev = OrgOpenroadmDevice.class;
 
 135         // Reading data from device
 
 136         InstanceIdentifier<OrgOpenroadmDevice> deviceId = InstanceIdentifier.create(openRoadmDev);
 
 137         device = mock(OrgOpenroadmDevice.class);
 
 138         when(accessor.getTransactionUtils().readData(accessor.getDataBroker(), LogicalDatastoreType.OPERATIONAL,
 
 139                 deviceId)).thenReturn(device);
 
 141         when(device.getInfo()).thenReturn(info);
 
 142         inventoryData = new OpenroadmInventoryInput(accessor, device);
 
 143         // Reading the shelfs data;
 
 144         when(shelf.getShelfPosition()).thenReturn("10");
 
 145         when(shelf.getOperationalState()).thenReturn(State.InService);
 
 146         when(shelf.getSerialId()).thenReturn("nodeid-1");
 
 147         when(shelf.getShelfName()).thenReturn("Shelf1");
 
 148         when(shelf.getShelfType()).thenReturn("Shelf");
 
 149         when(shelf.getClei()).thenReturn("1234567890");
 
 150         when(shelf.getVendor()).thenReturn("vendorA");
 
 151         when(shelf.getModel()).thenReturn("1");
 
 152         when(shelf.getHardwareVersion()).thenReturn("0.1");
 
 153         when(shelf.getManufactureDate()).thenReturn(new DateAndTime("2017-10-22T15:23:43Z"));
 
 155         Map<SlotsKey, Slots> slotList = null;
 
 156         Slots slots = mock(Slots.class);
 
 157         when(slots.getLabel()).thenReturn("Slot56746");
 
 158         when(slots.getSlotName()).thenReturn("slotofRoadmA");
 
 159         when(slots.getProvisionedCircuitPack()).thenReturn("1/0");
 
 160         slotList = new HashMap<>();
 
 161         slotList.put(slots.key(), slots);
 
 162         when(shelf.getSlots()).thenReturn(slotList);
 
 163         shelfList = new HashMap<>();
 
 164         shelfList.put(shelf.key(), shelf);
 
 165         when(device.getShelves()).thenReturn(shelfList);
 
 167         // Reading data from CircuitPacks
 
 168         cp = mock(CircuitPacks.class);
 
 169         when(cp.getCircuitPackName()).thenReturn("1/0");
 
 170         when(cp.getVendor()).thenReturn("VendorA");
 
 171         when(cp.getModel()).thenReturn("Model1");
 
 172         when(cp.getSerialId()).thenReturn("46277sgh6");
 
 173         when(cp.getClei()).thenReturn("136268785");
 
 174         when(cp.getHardwareVersion()).thenReturn("0.1");
 
 175         when(cp.getType()).thenReturn("WSS");
 
 176         when(cp.getProductCode()).thenReturn("oooooo");
 
 177         when(cp.getCircuitPackMode()).thenReturn("inServiceMode");
 
 179         ParentCircuitPack parentCp = mock(ParentCircuitPack.class);
 
 180         when(parentCp.getCircuitPackName()).thenReturn("1/0");
 
 181         when(parentCp.getCpSlotName()).thenReturn("Slot1");
 
 182         cp1 = mock(CircuitPacks.class);
 
 183         when(cp1.getCircuitPackName()).thenReturn("1/0 EThernet");
 
 184         when(cp1.getVendor()).thenReturn("VendorA");
 
 185         when(cp1.getModel()).thenReturn("Model1678");
 
 186         when(cp1.getSerialId()).thenReturn("4627dgs7sgh6");
 
 187         when(cp1.getClei()).thenReturn("1362d68785");
 
 188         when(cp1.getHardwareVersion()).thenReturn("0.1");
 
 189         when(cp1.getType()).thenReturn("EthPlug");
 
 190         when(cp1.getProductCode()).thenReturn("oooooo");
 
 191         when(cp1.getCircuitPackMode()).thenReturn("inServiceMode");
 
 192         when(cp1.getParentCircuitPack()).thenReturn(parentCp);
 
 194         cp2 = mock(CircuitPacks.class);
 
 195         when(cp2.getCircuitPackName()).thenReturn("2/0");
 
 196         when(cp2.getVendor()).thenReturn("VendorA");
 
 197         when(cp2.getModel()).thenReturn("Model1678");
 
 198         when(cp2.getSerialId()).thenReturn("4sads7sgh6");
 
 199         when(cp2.getClei()).thenReturn("1wew362d68785");
 
 200         when(cp2.getHardwareVersion()).thenReturn("0.1");
 
 201         when(cp2.getType()).thenReturn("WSS");
 
 202         when(cp2.getProductCode()).thenReturn("osooooo");
 
 203         when(cp2.getCircuitPackMode()).thenReturn("inServiceMode");
 
 205         cp3 = mock(CircuitPacks.class);
 
 206         when(parentCp.getCircuitPackName()).thenReturn("2/0");
 
 207         when(parentCp.getCpSlotName()).thenReturn("Slot1");
 
 208         when(cp3.getCircuitPackName()).thenReturn("2/0  OCS");
 
 209         when(cp3.getVendor()).thenReturn("VendorA");
 
 210         when(cp3.getModel()).thenReturn("Model1678");
 
 211         when(cp3.getSerialId()).thenReturn("dswsads7sgh6");
 
 212         when(cp3.getClei()).thenReturn("1ew62d68785");
 
 213         when(cp3.getHardwareVersion()).thenReturn("0.1");
 
 214         when(cp3.getType()).thenReturn("OCS Plug");
 
 215         when(cp3.getProductCode()).thenReturn("osooooo");
 
 216         when(cp3.getCircuitPackMode()).thenReturn("inServiceMode");
 
 217         when(cp3.getParentCircuitPack()).thenReturn(parentCp);
 
 219         Map<CircuitPacksKey, CircuitPacks> cpList = new HashMap<>();
 
 220         cpList.put(cp.key(), cp);
 
 221         cpList.put(cp1.key(), cp1);
 
 222         cpList.put(cp2.key(), cp2);
 
 223         cpList.put(cp3.key(), cp3);
 
 224         when(device.getCircuitPacks()).thenReturn(cpList);
 
 226         // Reading Interface Data
 
 227         when(interfaces.getName()).thenReturn("1GE-interface-1");
 
 228         when(interfaces.getDescription()).thenReturn("Ethernet Interface");
 
 229         when(interfaces.getSupportingCircuitPackName()).thenReturn("1/0 EThernet");
 
 231         Map<InterfaceKey, Interface> interfacesList = new HashMap<>();
 
 232         interfacesList.put(interfaces.key(), interfaces);
 
 233         when(device.getInterface()).thenReturn(interfacesList);
 
 235         // Reading Xponder Data
 
 236         when(xpdr.getXpdrNumber()).thenReturn(Uint16.valueOf(1));
 
 237         when(xpdr.getXpdrType()).thenReturn(XpdrNodeTypes.Mpdr);
 
 238         when(xpdr.getLifecycleState()).thenReturn(LifecycleState.Deployed);
 
 240         Map<XponderKey, Xponder> xpnderList = new HashMap<>();
 
 241         xpnderList.put(xpdr.key(), xpdr);
 
 242         when(device.getXponder()).thenReturn(xpnderList);
 
 244         // Read initial Alarm data
 
 245         final Class<ActiveAlarmList> classAlarm = ActiveAlarmList.class;
 
 246         InstanceIdentifier<ActiveAlarmList> alarmDataIid = InstanceIdentifier.builder(classAlarm).build();
 
 247         when(accessor.getTransactionUtils().readData(accessor.getDataBroker(), LogicalDatastoreType.OPERATIONAL,
 
 248                 alarmDataIid)).thenReturn(alarmList);
 
 249         when(activeAlarms.getId()).thenReturn("Alarm1");
 
 250         when(activeAlarms.getCircuitId()).thenReturn("1/0");
 
 251         when(activeAlarms.getRaiseTime()).thenReturn(new DateAndTime("2017-10-22T15:23:43Z"));
 
 252         when(activeAlarms.getSeverity()).thenReturn(Severity.Critical);
 
 253         when(activeAlarms.getProbableCause())
 
 254                 .thenReturn(new ProbableCauseBuilder().setCause(ProbableCauseEnum.AutomaticLaserShutdown).build());
 
 255         when(activeAlarms.getAdditionalDetail()).thenReturn("LaserShutdown");
 
 256         when(activeAlarms.getResource()).thenReturn(new ResourceBuilder()
 
 257                 .setDevice(new DeviceBuilder().setNodeId(NodeIdType.getDefaultInstance("zNhe2i5")).build()).build());
 
 259         Map<ActiveAlarmsKey, ActiveAlarms> activeAlarmlist = new HashMap<>();
 
 260         activeAlarmlist.put(activeAlarms.key(), activeAlarms);
 
 261         when(alarmList.getActiveAlarms()).thenReturn(activeAlarmlist);
 
 264         final Class<HistoricalPmList> pmDataClass = HistoricalPmList.class;
 
 265         InstanceIdentifier<HistoricalPmList> pmDataIid = InstanceIdentifier.builder(pmDataClass).build();
 
 266         when(accessor.getTransactionUtils().readData(accessor.getDataBroker(), LogicalDatastoreType.OPERATIONAL,
 
 267                 pmDataIid)).thenReturn(pmDataList);
 
 269         Measurement measurement = mock(Measurement.class);
 
 270         PmDataType pmDataType = mock(PmDataType.class);
 
 271         when(pmDataType.getUint64()).thenReturn(Uint64.valueOf(2425425));
 
 272         when(measurement.getBinNumber()).thenReturn(Uint16.valueOf(1452));
 
 273         when(measurement.getCompletionTime()).thenReturn(new DateAndTime("2018-10-22T15:23:43Z"));
 
 274         when(measurement.getGranularity()).thenReturn(PmGranularity._24Hour);
 
 275         when(measurement.getPmParameterUnit()).thenReturn("6824545199534863756");
 
 276         when(measurement.getPmParameterValue()).thenReturn(pmDataType);
 
 277         when(measurement.getValidity()).thenReturn(Validity.Partial);
 
 280         Map<MeasurementKey, Measurement> measurementList = new HashMap<>();
 
 281         measurementList.put(measurement.key(), measurement);
 
 282         when(historicalPm.getMeasurement()).thenReturn(measurementList);
 
 283         when(historicalPm.getType()).thenReturn(PmNamesEnum.ErroredSeconds);
 
 284         when(historicalPm.getExtension()).thenReturn("OpticalPowerOutput");
 
 286         Map<HistoricalPmKey, HistoricalPm> historicalPmList = new HashMap<>();
 
 287         historicalPmList.put(historicalPm.key(), historicalPm);
 
 288         HistoricalPmEntry histPmEntry = mock(HistoricalPmEntry.class);
 
 289         when(histPmEntry.getHistoricalPm()).thenReturn(historicalPmList);
 
 290         when(histPmEntry.getPmResourceType()).thenReturn(ResourceTypeEnum.CircuitPack);
 
 292         Map<HistoricalPmEntryKey, HistoricalPmEntry> histPmList = new HashMap<>();
 
 293         histPmList.put(histPmEntry.key(), histPmEntry);
 
 294         when(pmDataList.getHistoricalPmEntry()).thenReturn(histPmList);
 
 302         OpenroadmNetworkElement optionalNe = new OpenroadmNetworkElement(accessor, serviceProvider);
 
 303         optionalNe.initialReadFromNetworkElement();
 
 304         verify(dataprovider).writeInventory(accessor.getNodeId().getValue(),
 
 305                 Arrays.asList(inventoryData.getInventoryData(Uint32.valueOf(0)),
 
 306                         inventoryData.getShelvesInventory(shelf, Uint32.valueOf(1)),
 
 307                         inventoryData.getXponderInventory(xpdr, Uint32.valueOf(1)),
 
 308                         inventoryData.getCircuitPackInventory(cp3, Uint32.valueOf(2))));