Callhome to VES PNF Registration 76/120176/2
authorRavi Pendurty <ravi.pendurty@highstreet-technologies.com>
Mon, 5 Apr 2021 09:04:55 +0000 (11:04 +0200)
committerRavi Pendurty <ravi.pendurty@highstreet-technologies.com>
Tue, 6 Apr 2021 05:16:24 +0000 (07:16 +0200)
Callhome to VES PNF Registration

Issue-ID: CCSDK-3160
Signed-off-by: Ravi Pendurty <ravi.pendurty@highstreet-technologies.com>
Change-Id: Ic5503ff7bb5bb77af3d5b4ad3ba6b09ccd10d87e
Signed-off-by: Ravi Pendurty <ravi.pendurty@highstreet-technologies.com>
15 files changed:
sdnr/wt/devicemanager-adapter-manager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/adaptermanager/test/TestAdapterManagerNetworkElement.java
sdnr/wt/devicemanager-adapter-manager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/adaptermanager/test/TestAdapterManagerNetworkElementFactory.java
sdnr/wt/devicemanager-adapter-manager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/adaptermanager/test/mock/NetconfAccessorMock.java [deleted file]
sdnr/wt/devicemanager-adapter-manager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/adaptermanager/test/mock/TransactionUtilsMock.java [deleted file]
sdnr/wt/devicemanager-oran/provider/pom.xml
sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java
sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanRegistrationToVESpnfRegistrationMapper.java [new file with mode: 0644]
sdnr/wt/devicemanager-oran/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/test/TestORanNetworkElementFactory.java
sdnr/wt/devicemanager-oran/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/test/TestORanRegistrationToVESpnfRegistration.java [new file with mode: 0644]
sdnr/wt/netconfnode-state-service/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/netconfnodestateservice/NetconfAccessor.java
sdnr/wt/netconfnode-state-service/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/netconfnodestateservice/impl/NetconfNodeStateServiceImpl.java
sdnr/wt/netconfnode-state-service/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/netconfnodestateservice/impl/access/NetconfAccessorImpl.java
sdnr/wt/netconfnode-state-service/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/netconfnodestateservice/impl/access/NetconfAccessorManager.java
sdnr/wt/netconfnode-state-service/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/netconfnodestateservice/test/TestNetconfAccessorImpl.java
sdnr/wt/netconfnode-state-service/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/netconfnodestateservice/test/example/TestNetconfHelper.java

index 0fa83c0..203c061 100644 (file)
@@ -20,7 +20,6 @@ package org.onap.ccsdk.features.sdnr.wt.devicemanager.adaptermanager.test;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 import java.io.IOException;
 import java.util.Optional;
@@ -29,18 +28,18 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.adaptermanager.impl.AdapterManagerNetworkElementFactory;
-import org.onap.ccsdk.features.sdnr.wt.devicemanager.adaptermanager.test.mock.NetconfAccessorMock;
-import org.onap.ccsdk.features.sdnr.wt.devicemanager.adaptermanager.test.mock.TransactionUtilsMock;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.Capabilities;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfBindingAccessor;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.TransactionUtils;
 import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.network.topology.simulator.rev191025.SimulatorStatus;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 import org.opendaylight.yangtools.yang.common.QName;
 
 public class TestAdapterManagerNetworkElement {
 
-    static NetconfAccessorMock accessor;
+    static NetconfBindingAccessor accessor;
     static DeviceManagerServiceProvider serviceProvider;
     static Capabilities capabilities;
     QName qCapability;
@@ -49,13 +48,13 @@ public class TestAdapterManagerNetworkElement {
     public static void init() throws InterruptedException, IOException {
         capabilities = mock(Capabilities.class);
         //accessor = mock(NetconfAccessorMock.class);
-        accessor = spy(new NetconfAccessorMock(null, null, null, null));
+        accessor = mock(NetconfBindingAccessor.class); //accessor = spy(new NetconfAccessorMock(null, null, null, null));
         serviceProvider = mock(DeviceManagerServiceProvider.class);
 
         NodeId nNodeId = new NodeId("nSky");
         when(accessor.getCapabilites()).thenReturn(capabilities);
         when(accessor.getNodeId()).thenReturn(nNodeId);
-        when(accessor.getTransactionUtils()).thenReturn(new TransactionUtilsMock());
+        when(accessor.getTransactionUtils()).thenReturn(mock(TransactionUtils.class));
 
         DataProvider dataProvider = mock(DataProvider.class);
         when(serviceProvider.getDataProvider()).thenReturn(dataProvider);
index 228401d..ad024e1 100644 (file)
@@ -25,7 +25,6 @@ import org.junit.After;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.adaptermanager.impl.AdapterManagerNetworkElementFactory;
-import org.onap.ccsdk.features.sdnr.wt.devicemanager.adaptermanager.test.mock.NetconfAccessorMock;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.Capabilities;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
@@ -42,7 +41,7 @@ public class TestAdapterManagerNetworkElementFactory {
     @BeforeClass
     public static void init() throws InterruptedException, IOException {
         capabilities = mock(Capabilities.class);
-        accessor = mock(NetconfAccessorMock.class);
+        accessor = mock(NetconfAccessor.class);
         serviceProvider = mock(DeviceManagerServiceProvider.class);
 
         when(accessor.getCapabilites()).thenReturn(capabilities);
diff --git a/sdnr/wt/devicemanager-adapter-manager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/adaptermanager/test/mock/NetconfAccessorMock.java b/sdnr/wt/devicemanager-adapter-manager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/adaptermanager/test/mock/NetconfAccessorMock.java
deleted file mode 100644 (file)
index 8a06940..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * ============LICENSE_START========================================================================
- * ONAP : ccsdk feature sdnr wt
- * =================================================================================================
- * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
- * =================================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- * ============LICENSE_END==========================================================================
- */
-package org.onap.ccsdk.features.sdnr.wt.devicemanager.adaptermanager.test.mock;
-
-import com.google.common.util.concurrent.ListenableFuture;
-import java.util.List;
-import java.util.Optional;
-
-import org.eclipse.jdt.annotation.NonNull;
-import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.Capabilities;
-import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
-import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfBindingAccessor;
-import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfDomAccessor;
-import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfNotifications;
-import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.TransactionUtils;
-import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.MountPoint;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionOutput;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.netconf.streams.Stream;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.binding.NotificationListener;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-
-/**
- */
-public class NetconfAccessorMock implements NetconfBindingAccessor, NetconfNotifications {
-
-    private final NodeId nNodeId;
-    private final NetconfNode netconfNode;
-    private final MountPoint mountpoint;
-    private final DataBroker netconfNodeDataBroker;
-
-    public NetconfAccessorMock(NodeId nNodeId, NetconfNode netconfNode, MountPoint mountpoint,
-            DataBroker netconfNodeDataBroker) {
-        this.nNodeId = nNodeId;
-        this.netconfNode = netconfNode;
-        this.mountpoint = mountpoint;
-        this.netconfNodeDataBroker = netconfNodeDataBroker;
-    }
-
-    @Override
-    public NodeId getNodeId() {
-        return nNodeId;
-    }
-
-    @Override
-    public NetconfNode getNetconfNode() {
-        return netconfNode;
-    }
-
-    @Override
-    public Capabilities getCapabilites() {
-        return null;
-    }
-
-    @Override
-    public DataBroker getDataBroker() {
-        return netconfNodeDataBroker;
-    }
-
-    @Override
-    public MountPoint getMountpoint() {
-        return mountpoint;
-    }
-
-    @Override
-    public TransactionUtils getTransactionUtils() {
-        return null;
-    }
-
-    @Override
-    public <T extends NotificationListener> ListenerRegistration<NotificationListener> doRegisterNotificationListener(
-            @NonNull T listener) {
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<CreateSubscriptionOutput>> registerNotificationsStream(String streamName) {
-        return null;
-    }
-
-    @Override
-    public void registerNotificationsStream(List<Stream> streamList) {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public boolean isNCNotificationsSupported() {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public List<Stream> getNotificationStreams() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-       @Override
-       public Optional<NetconfBindingAccessor> getNetconfBindingAccessor() {
-               // TODO Auto-generated method stub
-               return null;
-       }
-
-       @Override
-       public Optional<NetconfDomAccessor> getNetconfDomAccessor() {
-               // TODO Auto-generated method stub
-               return null;
-       }
-
-       @Override
-       public Optional<NetconfNotifications> getNotificationAccessor() {
-               // TODO Auto-generated method stub
-               return null;
-       }
-
-       @Override
-       public boolean isNotificationsSupported() {
-               // TODO Auto-generated method stub
-               return false;
-       }
-
-}
diff --git a/sdnr/wt/devicemanager-adapter-manager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/adaptermanager/test/mock/TransactionUtilsMock.java b/sdnr/wt/devicemanager-adapter-manager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/adaptermanager/test/mock/TransactionUtilsMock.java
deleted file mode 100644 (file)
index e3aa0ae..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * ============LICENSE_START========================================================================
- * ONAP : ccsdk feature sdnr wt
- * =================================================================================================
- * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
- * =================================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- * ============LICENSE_END==========================================================================
- */
-package org.onap.ccsdk.features.sdnr.wt.devicemanager.adaptermanager.test.mock;
-
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.eclipse.jdt.annotation.Nullable;
-import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.TransactionUtils;
-import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-
-public class TransactionUtilsMock implements TransactionUtils {
-
-    @Override
-    public <T extends DataObject> @Nullable T readData(DataBroker dataBroker, LogicalDatastoreType dataStoreType,
-            InstanceIdentifier<T> iid) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public <T extends DataObject> @Nullable T readDataOptionalWithStatus(DataBroker dataBroker,
-            LogicalDatastoreType dataStoreType, InstanceIdentifier<T> iid, AtomicBoolean noErrorIndication,
-            AtomicReference<String> statusIndicator) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-}
index 3b8583d..e6ae4bf 100644 (file)
             <artifactId>sal-netconf-connector</artifactId>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.netconf</groupId>
+            <artifactId>callhome-model</artifactId>
+            <!-- <scope>provided</scope> -->
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
             <artifactId>mdsal-singleton-common-api</artifactId>
index 47ea3ea..df81f60 100644 (file)
@@ -41,6 +41,9 @@ import org.opendaylight.yang.gen.v1.urn.onap.system.rev201026.System1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Guicutthrough;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Inventory;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementDeviceType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netconf.callhome.server.rev161109.NetconfCallhomeServer;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netconf.callhome.server.rev161109.netconf.callhome.server.AllowedDevices;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netconf.callhome.server.rev161109.netconf.callhome.server.allowed.devices.Device;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -64,7 +67,9 @@ public class ORanNetworkElement implements NetworkElement {
     private ListenerRegistration<NotificationListener> oRanFaultListenerRegistrationResult;
     private @NonNull final ORanFaultNotificationListener oRanFaultListener;
     private final NotificationProxyParser notificationProxyParser;
+    private @NonNull ORanRegistrationToVESpnfRegistrationMapper mapper;
     private Collection<Component> componentList;
+    private static int sequenceNo = 0;
 
     ORanNetworkElement(NetconfBindingAccessor netconfAccess, DataProvider databaseService,
             VESCollectorService vesCollectorService) {
@@ -89,7 +94,7 @@ public class ORanNetworkElement implements NetworkElement {
             componentList = YangHelper.getCollection(hardware.nonnullComponent());
             List<Inventory> inventoryList =
                     ORanToInternalDataModel.getInventoryList(netconfAccessor.getNodeId(), componentList);
-            inventoryList.forEach(databaseService::writeInventory);
+           inventoryList.forEach(databaseService::writeInventory);
         }
 
         Optional<Guicutthrough> oGuicutthrough = ORanToInternalDataModel.getGuicutthrough(getOnapSystemData());
@@ -106,6 +111,8 @@ public class ORanNetworkElement implements NetworkElement {
     @Override
     public void register() {
         initialReadFromNetworkElement();
+        // Publish the mountpoint to VES if enabled
+        publishMountpointToVES();
         // Register call back class for receiving notifications
         Optional<NetconfNotifications> oNotifications = netconfAccessor.getNotificationAccessor();
         if (oNotifications.isPresent()) {
@@ -176,5 +183,60 @@ public class ORanNetworkElement implements NetworkElement {
         log.debug("Result of Hardware = {}", res);
         return res;
     }
+
+    private void publishMountpointToVES() {
+        log.debug("In publishMountpointToVES()");
+
+        /**
+         * 1. Check if this device is in the list of allowed-devices.
+         * 2. If device exists in allowed-devices, then create VES pnfRegistration event and publish to VES
+         */
+        if (inAllowedDevices(netconfAccessor.getNodeId().getValue())) {
+            if (vesCollectorService.getConfig().isVESCollectorEnabled()) {
+
+                for (Component component : ORanToInternalDataModel.getRootComponents(componentList)) {
+                    //Just get one component. At the moment we don't care which one. Also since there is only one management address, we assume there will be only one chassis.
+                    //If the device supports subtended configuration then it is assumed that the Chassis containing the management interface will be the root component and there will be only one root.
+                    this.mapper = new ORanRegistrationToVESpnfRegistrationMapper(netconfAccessor,
+                            vesCollectorService, component);
+                    VESCommonEventHeaderPOJO header =
+                            mapper.mapCommonEventHeader(sequenceNo++);
+                    VESPNFRegistrationFieldsPOJO body = mapper.mapPNFRegistrationFields();
+                    try {
+                        vesCollectorService.publishVESMessage(vesCollectorService.generateVESEvent(header, body));
+                    } catch (JsonProcessingException e) {
+                        log.warn("Error while serializing VES Event to String ", e);
+                        e.printStackTrace();
+                    }
+
+                }
+            }
+
+        }
+
+    }
+
+    private boolean inAllowedDevices(String mountpointName) {
+        final InstanceIdentifier<AllowedDevices> ALL_DEVICES =
+                InstanceIdentifier.create(NetconfCallhomeServer.class).child(AllowedDevices.class);
+
+        AllowedDevices allowedDevices;
+        allowedDevices = netconfAccessor.getTransactionUtils().readData(
+                netconfAccessor.getControllerBindingDataBroker(), LogicalDatastoreType.CONFIGURATION, ALL_DEVICES);
+
+        if (allowedDevices != null) {
+            Collection<Device> deviceList = YangHelper.getCollection(allowedDevices.nonnullDevice());
+            for (Device device : deviceList) {
+                log.info("Device in allowed-devices is - {}", device.getUniqueId());
+                if (device.getUniqueId().equals(netconfAccessor.getNodeId().getValue())) {
+                    log.info("Mountpoint is part of allowed-devices list");
+                    return true;
+                }
+            }
+        }
+
+        log.info("Mountpoint {} is not part of allowed-devices list", mountpointName);
+        return false;
+    }
+
 }
diff --git a/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanRegistrationToVESpnfRegistrationMapper.java b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanRegistrationToVESpnfRegistrationMapper.java
new file mode 100644 (file)
index 0000000..81605e4
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2021 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.impl;
+
+import java.time.Instant;
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.VESCollectorService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.VESCommonEventHeaderPOJO;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.VESPNFRegistrationFieldsPOJO;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.hardware.Component;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ORanRegistrationToVESpnfRegistrationMapper {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ORanFaultToVESFaultMapper.class);
+    //CommonEventHeader fields
+    private static final String VES_EVENT_DOMAIN = "pnfRegistration";
+    private static final String VES_EVENTTYPE = "NetConf Callhome Registration";
+    private static final String VES_EVENT_PRIORITY = "Normal";
+
+    private final VESCollectorService vesProvider;
+    private final @NonNull Component component;
+    private final NetconfAccessor netconfAccessor;
+
+    public ORanRegistrationToVESpnfRegistrationMapper(NetconfAccessor netconfAccessor,
+            VESCollectorService vesCollectorService, Component component) {
+        this.netconfAccessor = netconfAccessor;
+        this.vesProvider = vesCollectorService;
+        this.component = component;
+    }
+
+    public VESCommonEventHeaderPOJO mapCommonEventHeader(int sequenceNo) {
+        VESCommonEventHeaderPOJO vesCEH = new VESCommonEventHeaderPOJO();
+        vesCEH.setDomain(VES_EVENT_DOMAIN);
+        vesCEH.setEventId(netconfAccessor.getNodeId().getValue());
+        vesCEH.setEventName(netconfAccessor.getNodeId().getValue());
+        vesCEH.setEventType(VES_EVENTTYPE);
+        vesCEH.setPriority(VES_EVENT_PRIORITY);
+
+        vesCEH.setStartEpochMicrosec(Instant.now().toEpochMilli() * 1000);
+        vesCEH.setLastEpochMicrosec(Instant.now().toEpochMilli() * 1000);
+        vesCEH.setNfVendorName(component.getMfgName());
+        vesCEH.setReportingEntityName(vesProvider.getConfig().getReportingEntityName());
+        vesCEH.setSequence(sequenceNo);
+        vesCEH.setSourceId(component.getUuid().toString());
+        vesCEH.setSourceName(netconfAccessor.getNodeId().getValue());
+
+        return vesCEH;
+    }
+
+    public VESPNFRegistrationFieldsPOJO mapPNFRegistrationFields() {
+        VESPNFRegistrationFieldsPOJO vesPnfFields = new VESPNFRegistrationFieldsPOJO();
+        vesPnfFields.setModelNumber(component.getModelName());
+        vesPnfFields.setOamV4IpAddress(netconfAccessor.getNetconfNode().getHost().getIpAddress().toString());
+        //vesPnfFields.setOamV6IpAddress(oamV6IpAddress); // Check if IP address in V6 format and then include it. Same with v4 address also
+        vesPnfFields.setSerialNumber(component.getSerialNum());
+        vesPnfFields.setVendorName(component.getMfgName());
+        vesPnfFields.setSoftwareVersion(component.getSoftwareRev());
+        vesPnfFields.setUnitType(component.getAlias());
+        vesPnfFields.setUnitFamily(component.getXmlClass().toString());
+        vesPnfFields.setManufactureDate(component.getMfgDate().toString());
+        //vesPnfFields.setLastServiceDate(component.getLastChange());
+
+        return vesPnfFields;
+    }
+}
index 05a2f93..0da5ec1 100644 (file)
@@ -22,7 +22,6 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 import java.io.IOException;
 import java.util.Optional;
-
 import org.junit.After;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -43,27 +42,23 @@ public class TestORanNetworkElementFactory {
     private static DeviceManagerServiceProvider serviceProvider;
     private static Capabilities capabilities;
     private static VESCollectorService vesCollectorService;
-    private static NetconfBindingAccessor bindingCommunicator;
 
     @BeforeClass
     public static void init() throws InterruptedException, IOException {
-        bindingCommunicator = mock(NetconfBindingAccessor.class);
-        vesCollectorService = mock(VESCollectorService.class);
+        NetconfBindingAccessor bindingCommunicator = mock(NetconfBindingAccessor.class);
         NodeId nodeId = new NodeId(NODEIDSTRING);
         when(bindingCommunicator.getTransactionUtils()).thenReturn(mock(TransactionUtils.class));
         when(bindingCommunicator.getNodeId()).thenReturn(nodeId);
-        
 
         capabilities = mock(Capabilities.class);
         accessor = mock(NetconfBindingAccessor.class);
         serviceProvider = mock(DeviceManagerServiceProvider.class);
+        vesCollectorService = mock(VESCollectorService.class);
 
         when(accessor.getCapabilites()).thenReturn(capabilities);
         when(accessor.getNetconfBindingAccessor()).thenReturn(Optional.of(bindingCommunicator));
         when(serviceProvider.getDataProvider()).thenReturn(null);
         when(serviceProvider.getVESCollectorService()).thenReturn(vesCollectorService);
-
-
     }
 
     @Test
diff --git a/sdnr/wt/devicemanager-oran/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/test/TestORanRegistrationToVESpnfRegistration.java b/sdnr/wt/devicemanager-oran/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/test/TestORanRegistrationToVESpnfRegistration.java
new file mode 100644 (file)
index 0000000..781d333
--- /dev/null
@@ -0,0 +1,248 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk features
+ * ================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.test;
+
+import static org.mockito.Mockito.when;
+import java.math.BigDecimal;
+import org.eclipse.jdt.annotation.Nullable;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.impl.ORanRegistrationToVESpnfRegistrationMapper;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.VESCollectorCfgService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.VESCollectorService;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.hardware.Component;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Host;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.optional.rev190614.netconf.node.augmented.optional.fields.IgnoreMissingSchemaSources;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.parameters.NonModuleCapabilities;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.parameters.OdlHelloMessageCapabilities;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.parameters.Protocol;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.parameters.YangModuleCapabilities;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilities;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.ClusteredConnectionStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.PassThrough;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.UnavailableCapabilities;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.Credentials;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.schema.storage.YangLibrary;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yangtools.yang.common.Uint16;
+import org.opendaylight.yangtools.yang.common.Uint32;
+
+@RunWith(MockitoJUnitRunner.class)
+public class TestORanRegistrationToVESpnfRegistration {
+
+    @Mock
+    NetconfAccessor netconfAccessor;
+    @Mock
+    VESCollectorService vesCollectorService;
+    @Mock
+    VESCollectorCfgService vesCfgService;
+
+    private final int SEQUENCE_NO = 10;
+
+    @Test
+    public void test() {
+        String dateTimeString = "2020-02-05T12:30:45.283Z";
+        String name = "Slot-0";
+
+        when(netconfAccessor.getNodeId()).thenReturn(new NodeId("nSky"));
+        when(netconfAccessor.getNetconfNode()).thenReturn(new TestNetconfNode());
+        when(vesCollectorService.getConfig()).thenReturn(vesCfgService);
+        when(vesCfgService.getReportingEntityName()).thenReturn("SDN-R");
+        Component testComponent = ComponentHelper.get(name, dateTimeString);
+
+        ORanRegistrationToVESpnfRegistrationMapper mapper = new ORanRegistrationToVESpnfRegistrationMapper(netconfAccessor, vesCollectorService, testComponent);
+        mapper.mapCommonEventHeader(SEQUENCE_NO);
+        mapper.mapPNFRegistrationFields();
+    }
+
+    public class TestNetconfNode implements NetconfNode {
+
+        @Override
+        public @Nullable Credentials getCredentials() {
+            return null;
+        }
+
+        @Override
+        public @Nullable Host getHost() {
+            return new Host(new IpAddress(new Ipv4Address("10.10.10.10")));
+        }
+
+        @Override
+        public @Nullable PortNumber getPort() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable Boolean isTcpOnly() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable Protocol getProtocol() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable Boolean isSchemaless() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable YangModuleCapabilities getYangModuleCapabilities() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable NonModuleCapabilities getNonModuleCapabilities() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable Boolean isReconnectOnChangedSchema() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable Uint32 getConnectionTimeoutMillis() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable Uint32 getDefaultRequestTimeoutMillis() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable Uint32 getMaxConnectionAttempts() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable Uint16 getBetweenAttemptsTimeoutMillis() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable BigDecimal getSleepFactor() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable Uint32 getKeepaliveDelay() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable Uint16 getConcurrentRpcLimit() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable Uint16 getActorResponseWaitTime() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable OdlHelloMessageCapabilities getOdlHelloMessageCapabilities() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable ConnectionStatus getConnectionStatus() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable ClusteredConnectionStatus getClusteredConnectionStatus() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable String getConnectedMessage() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable AvailableCapabilities getAvailableCapabilities() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable UnavailableCapabilities getUnavailableCapabilities() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable PassThrough getPassThrough() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable String getSchemaCacheDirectory() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable YangLibrary getYangLibrary() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public @Nullable IgnoreMissingSchemaSources getIgnoreMissingSchemaSources() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+    }
+
+}
index f245039..fa544e1 100644 (file)
@@ -18,6 +18,7 @@
 package org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice;
 
 import java.util.Optional;
+import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 
@@ -28,6 +29,11 @@ public interface NetconfAccessor {
 
     static String DefaultNotificationsStream = "NETCONF";
 
+    /**
+     * @return the Controller DataBroker
+     */
+    DataBroker getControllerBindingDataBroker();
+
     /**
      * @return the nodeId
      */
index 92ce34b..d3752cd 100644 (file)
@@ -221,7 +221,7 @@ public class NetconfNodeStateServiceImpl
         LOG.info("Session Initiated start {}", APPLICATION_NAME);
         this.domContext = new DomContext(this.yangParserFactory, this.bindingNormalizedNodeSerializer);
         this.netconfCommunicatorManager = new NetconfCommunicatorManager(mountPointService, domMountPointService, domContext);
-        this.accessorManager = new NetconfAccessorManager(netconfCommunicatorManager, domContext);
+        this.accessorManager = new NetconfAccessorManager(netconfCommunicatorManager, domContext, this);
         // Start RPC Service
         this.rpcApiService = new NetconfnodeStateServiceRpcApiImpl(rpcProviderRegistry, vesNotificationListenerList);
         // Get configuration
@@ -266,6 +266,10 @@ public class NetconfNodeStateServiceImpl
         return Objects.requireNonNull(domContext, "Initialization not completed for domContext" );
     }
 
+    public DataBroker getDataBroker() {
+        return dataBroker;
+    }
+
     public NetconfnodeStateServiceRpcApiImpl getNetconfnodeStateServiceRpcApiImpl() {
         return Objects.requireNonNull(rpcApiService, "Initialization not completed for rpcApiService" );
     }
index 1898458..8eba4e7 100644 (file)
@@ -23,7 +23,9 @@ import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.Capabilities;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfBindingAccessor;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfDomAccessor;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.impl.NetconfNodeStateServiceImpl;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.impl.access.dom.DomContext;
+import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
@@ -40,7 +42,7 @@ public class NetconfAccessorImpl implements NetconfAccessor {
     private final Capabilities capabilities;
     private final NetconfCommunicatorManager netconfCommunicatorManager;
     private final DomContext domContext;
-
+    private final NetconfNodeStateServiceImpl netconfNodeStateService;
     /**
      * Contains all data to access and manage netconf device
      *
@@ -52,13 +54,14 @@ public class NetconfAccessorImpl implements NetconfAccessor {
      * @param dataBroker to access node
      * @param mountpoint of netconfNode
      */
-    public NetconfAccessorImpl(NodeId nodeId, NetconfNode netconfNode,
-            NetconfCommunicatorManager netconfCommunicatorManager, DomContext domContext) {
+     public NetconfAccessorImpl(NodeId nodeId, NetconfNode netconfNode,
+            NetconfCommunicatorManager netconfCommunicatorManager, DomContext domContext, NetconfNodeStateServiceImpl netconfNodeStateService) {
         super();
         this.nodeId = Objects.requireNonNull(nodeId);
         this.netconfNode = Objects.requireNonNull(netconfNode);
         this.netconfCommunicatorManager = Objects.requireNonNull(netconfCommunicatorManager);
         this.domContext = Objects.requireNonNull(domContext);
+        this.netconfNodeStateService = Objects.requireNonNull(netconfNodeStateService);
 
         ConnectionStatus csts = netconfNode != null ? netconfNode.getConnectionStatus() : null;
         if (csts == null) {
@@ -71,21 +74,13 @@ public class NetconfAccessorImpl implements NetconfAccessor {
         this.capabilities = tmp;
     }
 
-    /**
-     * @param nodeId with uuid of managed netconf node
-     * @param dataBroker to access node
-     */
-    public NetconfAccessorImpl(String nodeId, NetconfNode netconfNode,
-            NetconfCommunicatorManager netconfCommunicatorManager, DomContext domContext) {
-        this(new NodeId(nodeId), netconfNode, netconfCommunicatorManager, domContext);
-    }
-
     public NetconfAccessorImpl(NetconfAccessorImpl accessor) {
         this.nodeId = accessor.getNodeId();
         this.netconfNode = accessor.getNetconfNode();
         this.capabilities = accessor.getCapabilites();
         this.netconfCommunicatorManager = accessor.netconfCommunicatorManager;
         this.domContext = accessor.domContext;
+        this.netconfNodeStateService = accessor.netconfNodeStateService;
     }
 
     @Override
@@ -113,4 +108,9 @@ public class NetconfAccessorImpl implements NetconfAccessor {
         return netconfCommunicatorManager.getNetconfDomAccessor(this);
     }
 
+    @Override
+    public DataBroker getControllerBindingDataBroker() {
+        return netconfNodeStateService.getDataBroker();
+    }
+
 }
index 2801934..6c37044 100644 (file)
@@ -45,15 +45,17 @@ public class NetconfAccessorManager {
     private final ConcurrentHashMap<NodeId, NetconfAccessor> accessorList;
     private final NetconfCommunicatorManager netconfCommunicatorManager;
     private final DomContext domContext;
+    private final NetconfNodeStateServiceImpl netconfNodeStateService;
 
-    public NetconfAccessorManager(NetconfCommunicatorManager netconfCommunicatorManager, DomContext domContext) {
+    public NetconfAccessorManager(NetconfCommunicatorManager netconfCommunicatorManager, DomContext domContext, NetconfNodeStateServiceImpl netconfNodeStateService) {
         this.netconfCommunicatorManager = Objects.requireNonNull(netconfCommunicatorManager);
         this.domContext = Objects.requireNonNull(domContext);
         this.accessorList = new ConcurrentHashMap<>();
+        this.netconfNodeStateService = Objects.requireNonNull(netconfNodeStateService);
     }
 
     public NetconfAccessor getAccessor(NodeId nNodeId, NetconfNode netconfNode) {
-        NetconfAccessor res = new NetconfAccessorImpl(nNodeId, netconfNode, netconfCommunicatorManager, domContext);
+        NetconfAccessor res = new NetconfAccessorImpl(nNodeId, netconfNode, netconfCommunicatorManager, domContext, netconfNodeStateService);
         NetconfAccessor previouse = accessorList.put(nNodeId, res);
         if (Objects.nonNull(previouse)) {
             LOG.warn("Accessor with name already available. Replaced with new one.");
index 1ec9cde..dd61db0 100644 (file)
@@ -23,37 +23,28 @@ package org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.test;
 
 import static org.junit.Assert.assertEquals;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Optional;
 import org.junit.Assert;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mockito;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfNotifications;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.impl.NetconfNodeStateServiceImpl;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.impl.access.NetconfAccessorImpl;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.impl.access.NetconfCommunicatorManager;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.impl.access.binding.NetconfBindingNotificationsImpl;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.impl.access.dom.DomContext;
-import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.impl.access.dom.NetconfDomAccessorImpl;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.test.example.TestNetconfHelper;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.MountPoint;
 import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
-import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.dom.api.DOMMountPoint;
-import org.opendaylight.mdsal.dom.api.DOMNotificationListener;
-import org.opendaylight.mdsal.dom.api.DOMNotificationService;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionInput;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.NotificationsService;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.StreamNameType;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.netconf.streams.Stream;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.netconf.streams.StreamBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 
 public class TestNetconfAccessorImpl extends Mockito {
 
@@ -67,8 +58,9 @@ public class TestNetconfAccessorImpl extends Mockito {
         NetconfNode testNode = TestNetconfHelper.getTestNode(nodeId, capabilityStringForNetworkElement)
                 .augmentation(NetconfNode.class);
 
-        NetconfAccessorImpl netconfAccessor =
-                new NetconfAccessorImpl(nodeId, testNode, netconfCommunicatorManager, domContext);
+        NetconfNodeStateServiceImpl netconfNodeStateService = mock(NetconfNodeStateServiceImpl.class);
+        NetconfAccessorImpl netconfAccessor = new NetconfAccessorImpl(nodeId, testNode, netconfCommunicatorManager,
+                domContext, netconfNodeStateService);
 
         Assert.assertNotNull(netconfAccessor);
 
@@ -138,39 +130,4 @@ public class TestNetconfAccessorImpl extends Mockito {
 
     }
 
-    @Test
-    public void testNetconfDomNotification() {
-
-        NetconfAccessorImpl netconfAccessor = TestNetconfHelper.getNetconfAcessorImpl();
-        DOMDataBroker domDataBroker = mock(DOMDataBroker.class);
-        DOMMountPoint domMountPoint = mock(DOMMountPoint.class);
-        DOMNotificationService domNotificationService = mock(DOMNotificationService.class);
-
-        YangInstanceIdentifier mountpointPath = YangInstanceIdentifier.builder()
-                .node(NetworkTopology.QNAME)
-                .build();
-        when(domMountPoint.getIdentifier()).thenReturn(mountpointPath);
-        when(domMountPoint.getService(DOMNotificationService.class)).thenReturn(Optional.of(domNotificationService));
-
-        DomContext domContext = mock(DomContext.class);
-
-        NetconfDomAccessorImpl netconfDomAccessor =
-                new NetconfDomAccessorImpl(netconfAccessor, domDataBroker, domMountPoint, domContext);
-
-        Collection<SchemaPath> types = Arrays.asList(SchemaPath.create(false, NetworkTopology.QNAME));
-
-        DOMNotificationListener listener = (notification) -> System.out.println("Notification: "+notification);
-        ListenerRegistration<DOMNotificationListener> res =
-                netconfDomAccessor.doRegisterNotificationListener(listener, types);
-
-        //Capture parameters and assert them
-        ArgumentCaptor<DOMNotificationListener> captor1 = ArgumentCaptor.forClass(DOMNotificationListener.class);
-        @SuppressWarnings("unchecked")
-        ArgumentCaptor<Collection<SchemaPath>> captor2 = ArgumentCaptor.forClass(Collection.class);
-        verify(domNotificationService).registerNotificationListener(captor1.capture(), captor2.capture());
-
-        assertEquals("Listener", listener, captor1.getValue());
-        assertEquals("SchemaPath", types, captor2.getValue());
-    }
-
 }
index ac46657..2b6c77c 100644 (file)
@@ -23,6 +23,7 @@ package org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.test.example;
 
 import java.util.Arrays;
 import org.mockito.Mockito;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.impl.NetconfNodeStateServiceImpl;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.impl.access.NetconfAccessorImpl;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.impl.access.NetconfCommunicatorManager;
 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.impl.access.dom.DomContext;
@@ -71,8 +72,9 @@ public class TestNetconfHelper extends Mockito {
         NetconfNode testNode = TestNetconfHelper.getTestNode(nodeId, capabilityStringForNetworkElement)
                 .augmentation(NetconfNode.class);
 
+        NetconfNodeStateServiceImpl netconfNodeStateService = mock(NetconfNodeStateServiceImpl.class);
         NetconfAccessorImpl netconfAccessor =
-                new NetconfAccessorImpl(nodeId, testNode, netconfCommunicatorManager, domContext);
+                new NetconfAccessorImpl(nodeId, testNode, netconfCommunicatorManager, domContext, netconfNodeStateService);
         return netconfAccessor;
     }
 }