From 72a2da9f59cae86d7468bcb1b4dc61939a7b1552 Mon Sep 17 00:00:00 2001 From: Ravi Pendurty Date: Tue, 23 Feb 2021 08:08:21 +0100 Subject: ORAN Devicemanager null exception optional field uuid should not be used as key Issue-ID: CCSDK-3159 Signed-off-by: Ravi Pendurty Change-Id: I55d561dacb5892b3539eb06681bde820d0e83973 Signed-off-by: Ravi Pendurty --- .../oran/impl/ORanNetworkElement.java | 31 ++++++++++++++++++++-- .../oran/impl/ORanToInternalDataModel.java | 24 ++++++++++------- .../oran/test/TestORanToInternalDataModel.java | 5 ++-- 3 files changed, 46 insertions(+), 14 deletions(-) (limited to 'sdnr/wt/devicemanager-oran') diff --git a/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java index 59d51e199..757768573 100644 --- a/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java +++ b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java @@ -85,12 +85,22 @@ public class ORanNetworkElement implements NetworkElement { if (hardware != null) { Collection componentList = YangHelper.getCollection(hardware.getComponent()); if (componentList != null) { + int componentListSize = componentList.size(); + int writeCount = 0; + for (Component component : componentList) { - databaseService - .writeInventory(oRanMapper.getInternalEquipment(netconfAccessor.getNodeId(), component)); + if (component.getParent() == null) { + writeCount += writeInventory(component, componentList, 0); + } + } + if (componentListSize != writeCount) { + log.warn("Not all data were written to the Inventory. Potential entries with missing " + + "contained-child. Node Id = {}, Components Found = {}, Entries written to Database = {}", + netconfAccessor.getNodeId().getValue(), componentListSize, writeCount); } } } + System1 sys = getOnapSystemData(netconfAccessor); if (sys != null) { GuicutthroughBuilder gcBuilder = new GuicutthroughBuilder(); @@ -99,6 +109,23 @@ public class ORanNetworkElement implements NetworkElement { } } + private int writeInventory(Component component, Collection componentList, int treeLevel) { + databaseService + .writeInventory(oRanMapper.getInternalEquipment(netconfAccessor.getNodeId(), component, treeLevel)); + int count = 1; + if (component.getContainsChild() != null) { + List containerHolderList = component.getContainsChild(); + for (String containerHolder : containerHolderList) { + for (Component c : componentList) { + if (containerHolder.equals(c.getName())) { + count += writeInventory(c, componentList, treeLevel + 1); + } + } + } + } + return count; + } + @Override public NetworkElementDeviceType getDeviceType() { return NetworkElementDeviceType.ORAN; diff --git a/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanToInternalDataModel.java b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanToInternalDataModel.java index c563cc491..ca44e63f2 100644 --- a/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanToInternalDataModel.java +++ b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanToInternalDataModel.java @@ -31,18 +31,16 @@ import org.opendaylight.yangtools.yang.common.Uint32; */ public class ORanToInternalDataModel { - - public Inventory getInternalEquipment(NodeId nodeId, Component component) { + public Inventory getInternalEquipment(NodeId nodeId, Component component, int treeLevel) { InventoryBuilder inventoryBuilder = new InventoryBuilder(); // General inventoryBuilder.setNodeId(nodeId.getValue()); - inventoryBuilder.setParentUuid(component.getParent()); - inventoryBuilder.setTreeLevel(new Long(component.getParentRelPos())); - inventoryBuilder.setTreeLevel(Uint32.valueOf(component.getParentRelPos().intValue())); + inventoryBuilder.setParentUuid(component.getParent()!=null?component.getParent():component.getName()); + inventoryBuilder.setTreeLevel(Uint32.valueOf(treeLevel)); - inventoryBuilder.setUuid(component.getUuid().getValue()); + inventoryBuilder.setUuid(component.getName()); // -- String list with ids of holders List containerHolderKeyList = new ArrayList<>(); List containerHolderList = component.getContainsChild(); @@ -53,19 +51,25 @@ public class ORanToInternalDataModel { } inventoryBuilder.setContainedHolder(containerHolderKeyList); // -- Manufacturer related things - inventoryBuilder.setManufacturerName(component.getName()); + inventoryBuilder.setManufacturerName(component.getMfgName()); + inventoryBuilder.setManufacturerIdentifier(component.getMfgName()); + // Equipment type inventoryBuilder.setDescription(component.getDescription()); inventoryBuilder.setModelIdentifier(component.getModelName()); - inventoryBuilder.setPartTypeId(component.getXmlClass().getName()); + if (component.getXmlClass() != null) { + inventoryBuilder.setPartTypeId(component.getXmlClass().getName()); + } inventoryBuilder.setTypeName(component.getName()); inventoryBuilder.setVersion(component.getHardwareRev()); + // Equipment instance - inventoryBuilder.setDate(component.getMfgDate().getValue()); + if (component.getMfgDate() != null) { + inventoryBuilder.setDate(component.getMfgDate().getValue()); + } inventoryBuilder.setSerial(component.getSerialNum()); - return inventoryBuilder.build(); } diff --git a/sdnr/wt/devicemanager-oran/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/test/TestORanToInternalDataModel.java b/sdnr/wt/devicemanager-oran/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/test/TestORanToInternalDataModel.java index c33926bd8..76b2f32ce 100644 --- a/sdnr/wt/devicemanager-oran/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/test/TestORanToInternalDataModel.java +++ b/sdnr/wt/devicemanager-oran/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/test/TestORanToInternalDataModel.java @@ -39,13 +39,14 @@ public class TestORanToInternalDataModel { NodeId nodeId; Component component; - @Before + @Before public void init() throws InterruptedException, IOException { nodeId = mock(NodeId.class); component = mock(Component.class); when(nodeId.getValue()).thenReturn("ORan-1000"); when(component.getParent()).thenReturn("Shelf"); + when(component.getName()).thenReturn("Slot-0"); when(component.getParentRelPos()).thenReturn(0); when(component.getUuid()).thenReturn(new Uuid("0Aabcdef-0abc-0cfD-0abC-0123456789AB")); @@ -67,7 +68,7 @@ public class TestORanToInternalDataModel { @Test public void test() throws Exception { ORanToInternalDataModel model = new ORanToInternalDataModel(); - model.getInternalEquipment(nodeId, component); + model.getInternalEquipment(nodeId, component,0); assertEquals(component.getUuid().getValue(), "0Aabcdef-0abc-0cfD-0abC-0123456789AB"); assertEquals(component.getMfgDate().getValue(), "2020-02-05T12:30:45.283Z"); -- cgit 1.2.3-korg