/* * Copyright (c) 2015 Cisco Systems, Inc. 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.groupbasedpolicy.renderer.ofoverlay.node; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import java.lang.reflect.Field; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchManager.SwitchState; import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchManager.SwitchStatus; 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.PortNumber; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayNodeConfig; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.ExternalInterfaces; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.Tunnel; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.TunnelBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlanGpe; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; public class SwitchManagerTest { private SwitchManager switchManager; private DataBroker dataProvider; private NodeId nodeId; private SwitchState switchState; private FlowCapableNode fcNode; private TunnelBuilder tunnelBuilder; private IpAddress ipAddress; private NodeConnectorId nodeConnectorId; private OfOverlayNodeConfig ofOverlayNodeConfig; private InstanceIdentifier<NodeConnector> ncIid; private FlowCapableNodeConnector fcnc; private FlowCapableNodeConnector fcncOld; private SwitchListener listener; @Before public void initialise() { dataProvider = mock(DataBroker.class); nodeId = mock(NodeId.class); switchState = new SwitchState(nodeId); SwitchManager.switches.put(nodeId, switchState); fcNode = mock(FlowCapableNode.class); tunnelBuilder = mock(TunnelBuilder.class); ipAddress = mock(IpAddress.class); nodeConnectorId = mock(NodeConnectorId.class); when(tunnelBuilder.getIp()).thenReturn(ipAddress); when(tunnelBuilder.getNodeConnectorId()).thenReturn(nodeConnectorId); switchState.tunnelBuilderByType.put(TunnelTypeVxlan.class, tunnelBuilder); ofOverlayNodeConfig = mock(OfOverlayNodeConfig.class); ncIid = InstanceIdentifier.builder(Nodes.class) .child(Node.class, new NodeKey(nodeId)) .child(NodeConnector.class, new NodeConnectorKey(new NodeConnectorId("value"))) .build(); fcnc = mock(FlowCapableNodeConnector.class); fcncOld = mock(FlowCapableNodeConnector.class); switchManager = spy(new SwitchManager(dataProvider)); listener = mock(SwitchListener.class); switchManager.registerListener(listener); } @Test public void constructorTest() throws Exception { Field fNodeListener = SwitchManager.class.getDeclaredField("nodeListener"); Field fOfOverlayNodeListener = SwitchManager.class.getDeclaredField("ofOverlayNodeListener"); Field fNodeConnectorListener = SwitchManager.class.getDeclaredField("nodeConnectorListener"); fNodeListener.setAccessible(true); fOfOverlayNodeListener.setAccessible(true); fNodeConnectorListener.setAccessible(true); Assert.assertNotNull(fNodeListener.get(switchManager)); Assert.assertNotNull(fOfOverlayNodeListener.get(switchManager)); Assert.assertNotNull(fNodeConnectorListener.get(switchManager)); switchManager.close(); switchManager = new SwitchManager(null); Assert.assertNull(fNodeListener.get(switchManager)); Assert.assertNull(fOfOverlayNodeListener.get(switchManager)); Assert.assertNull(fNodeConnectorListener.get(switchManager)); // switchManager.close(); } @Test public void activatingSwitchTest() { NodeId nodeId = mock(NodeId.class); SwitchState switchState; switchState = SwitchManager.switches.get(nodeId); Assert.assertNull(switchState); SwitchManager.activatingSwitch(nodeId); switchState = SwitchManager.switches.get(nodeId); Assert.assertNotNull(switchState); Assert.assertTrue(switchState.isHasEndpoints()); SwitchManager.activatingSwitch(nodeId); Assert.assertEquals(switchState, SwitchManager.switches.get(nodeId)); Assert.assertTrue(switchState.isHasEndpoints()); SwitchManager.deactivatingSwitch(nodeId); Assert.assertFalse(switchState.isHasEndpoints()); } @Test public void deactivatingSwitchTest() { NodeId nodeId = mock(NodeId.class); SwitchManager.switches.put(nodeId, null); SwitchManager.deactivatingSwitch(nodeId); Assert.assertNull(SwitchManager.switches.get(nodeId)); } @Test public void getReadySwitchesTest() { NodeId nIdDisconected = mock(NodeId.class); NodeId nIdReady = mock(NodeId.class); SwitchState sDisconected = new SwitchState(nIdDisconected); sDisconected.status = SwitchStatus.DISCONNECTED; SwitchState sReady = new SwitchState(nIdReady); sReady.status = SwitchStatus.READY; SwitchManager.switches.put(nIdDisconected, sDisconected); SwitchManager.switches.put(nIdReady, sReady); Collection<NodeId> readySwitches = switchManager.getReadySwitches(); Assert.assertFalse(readySwitches.contains(nIdDisconected)); Assert.assertTrue(readySwitches.contains(nIdReady)); } @Test public void getExternalPortsTest() { NodeId nodeId = mock(NodeId.class); SwitchState switchState = new SwitchState(nodeId); Set<NodeConnectorId> externalPorts = Collections.emptySet(); switchState.externalPorts = externalPorts; SwitchManager.switches.put(nodeId, null); Assert.assertTrue(switchManager.getExternalPorts(nodeId).isEmpty()); SwitchManager.switches.put(nodeId, switchState); Assert.assertEquals(externalPorts, switchManager.getExternalPorts(nodeId)); } @Test public void getTunnelPortsTest1arg() { NodeId nodeId = mock(NodeId.class); Assert.assertTrue(switchManager.getTunnelPorts(nodeId).isEmpty()); SwitchManager.switches.put(nodeId, switchState); Assert.assertFalse(switchManager.getTunnelPorts(nodeId).isEmpty()); } @Test public void getTunnelPortTest() { NodeId nodeId = mock(NodeId.class); Assert.assertNull(switchManager.getTunnelPort(nodeId, TunnelTypeVxlan.class)); SwitchState switchState = new SwitchState(nodeId); SwitchManager.switches.put(nodeId, switchState); Assert.assertNull(switchManager.getTunnelPort(nodeId, TunnelTypeVxlan.class)); NodeConnectorId nodeConnectorId = mock(NodeConnectorId.class); TunnelBuilder tunnelBuilder = mock(TunnelBuilder.class); when(tunnelBuilder.getNodeConnectorId()).thenReturn(nodeConnectorId); switchState.tunnelBuilderByType.put(TunnelTypeVxlan.class, tunnelBuilder); Assert.assertEquals(nodeConnectorId, switchManager.getTunnelPort(nodeId, TunnelTypeVxlan.class)); } @Test public void getTunnelIPTest() { NodeId nodeId = mock(NodeId.class); Assert.assertNull(switchManager.getTunnelIP(nodeId, TunnelTypeVxlan.class)); SwitchState switchState = new SwitchState(nodeId); SwitchManager.switches.put(nodeId, switchState); Assert.assertNull(switchManager.getTunnelIP(nodeId, TunnelTypeVxlan.class)); IpAddress ipAddress = mock(IpAddress.class); TunnelBuilder tunnelBuilder = mock(TunnelBuilder.class); when(tunnelBuilder.getIp()).thenReturn(ipAddress); switchState.tunnelBuilderByType.put(TunnelTypeVxlan.class, tunnelBuilder); Assert.assertEquals(ipAddress, switchManager.getTunnelIP(nodeId, TunnelTypeVxlan.class)); } @Test public void updateSwitchTestStateNull() { NodeId nodeId = mock(NodeId.class); FlowCapableNode fcNode = mock(FlowCapableNode.class); switchManager.updateSwitch(nodeId, fcNode); verifyZeroInteractions(listener); } @Test public void updateSwitchTestReadyReady() { switchState.status = SwitchStatus.READY; switchState.setHasEndpoints(true); switchManager.updateSwitch(nodeId, fcNode); verify(listener).switchUpdated(nodeId); } @Test public void updateSwitchTestReadyDisconnected() { switchState.status = SwitchStatus.DISCONNECTED; switchState.setHasEndpoints(true); switchManager.updateSwitch(nodeId, fcNode); verify(listener).switchReady(nodeId); } @Test public void updateSwitchTestPreparingReady() { switchState.status = SwitchStatus.READY; switchState.setHasEndpoints(false); switchManager.updateSwitch(nodeId, fcNode); verify(listener).switchRemoved(nodeId); } @Test public void updateSwitchTestDisconnectedReady() { switchState.status = SwitchStatus.READY; switchState.setHasEndpoints(true); switchManager.updateSwitch(nodeId, null); Assert.assertFalse(SwitchManager.switches.containsKey(nodeId)); } @SuppressWarnings("unchecked") @Test public void updateSwitchNodeConnectorConfigTestPutDisconectedNull() throws Exception { Field field = SwitchState.class.getDeclaredField("fcncByNcIid"); field.setAccessible(true); Map<InstanceIdentifier<NodeConnector>, FlowCapableNodeConnector> fcncByNcIid = (Map<InstanceIdentifier<NodeConnector>, FlowCapableNodeConnector>) field.get(switchState); fcncByNcIid.put(ncIid, fcncOld); switchManager.updateSwitchNodeConnectorConfig(ncIid, fcnc); Assert.assertTrue(fcncByNcIid.containsKey(ncIid)); Assert.assertEquals(fcnc, fcncByNcIid.get(ncIid)); verifyZeroInteractions(listener); } @SuppressWarnings("unchecked") @Test public void updateSwitchNodeConnectorConfigTestPutSwitchRemoved() throws Exception { Field field = SwitchState.class.getDeclaredField("fcncByNcIid"); field.setAccessible(true); Map<InstanceIdentifier<NodeConnector>, FlowCapableNodeConnector> fcncByNcIid = (Map<InstanceIdentifier<NodeConnector>, FlowCapableNodeConnector>) field.get(switchState); fcncByNcIid.put(ncIid, fcncOld); switchState.setHasEndpoints(true); switchState.setFlowCapableNode(fcNode); switchManager.updateSwitchNodeConnectorConfig(ncIid, fcnc); Assert.assertTrue(fcncByNcIid.containsKey(ncIid)); Assert.assertEquals(fcnc, fcncByNcIid.get(ncIid)); verify(listener).switchRemoved(any(NodeId.class)); } @SuppressWarnings("unchecked") @Test public void updateSwitchNodeConnectorConfigTestRemoveDisconectedNull() throws Exception { Field field = SwitchState.class.getDeclaredField("fcncByNcIid"); field.setAccessible(true); Map<InstanceIdentifier<NodeConnector>, FlowCapableNodeConnector> fcncByNcIid = (Map<InstanceIdentifier<NodeConnector>, FlowCapableNodeConnector>) field.get(switchState); fcncByNcIid.put(ncIid, fcncOld); switchManager.updateSwitchNodeConnectorConfig(ncIid, null); Assert.assertFalse(fcncByNcIid.containsKey(ncIid)); verifyZeroInteractions(listener); } @SuppressWarnings("unchecked") @Test public void updateSwitchNodeConnectorConfigTestRemoveSwitchRemoved() throws Exception { Field field = SwitchState.class.getDeclaredField("fcncByNcIid"); field.setAccessible(true); Map<InstanceIdentifier<NodeConnector>, FlowCapableNodeConnector> fcncByNcIid = (Map<InstanceIdentifier<NodeConnector>, FlowCapableNodeConnector>) field.get(switchState); fcncByNcIid.put(ncIid, fcncOld); switchState.setHasEndpoints(true); switchState.setFlowCapableNode(fcNode); switchManager.updateSwitchNodeConnectorConfig(ncIid, null); Assert.assertFalse(fcncByNcIid.containsKey(ncIid)); verify(listener).switchRemoved(any(NodeId.class)); } @Test public void updateSwitchConfigTestStateNull() { NodeId nodeId = mock(NodeId.class); switchManager.updateSwitchConfig(nodeId, ofOverlayNodeConfig); verifyZeroInteractions(listener); } @Test public void updateSwitchConfigTestRemoved() { switchState.status = SwitchStatus.READY; switchManager.updateSwitchConfig(nodeId, ofOverlayNodeConfig); } @Test @SuppressWarnings({"unchecked", "rawtypes"}) public void updateSwitchConfigTestReady() { FlowCapableNode fcNode = mock(FlowCapableNode.class); switchState.setFlowCapableNode(fcNode); switchState.status = SwitchStatus.DISCONNECTED; switchState.setHasEndpoints(true); Tunnel tunnel = mock(Tunnel.class); List<Tunnel> tunnels = Arrays.asList(tunnel); when(ofOverlayNodeConfig.getTunnel()).thenReturn(tunnels); when(tunnel.getTunnelType()).thenReturn((Class) TunnelTypeVxlan.class); IpAddress tAddress = mock(IpAddress.class); when(tunnel.getIp()).thenReturn(tAddress); NodeConnectorId tConnector = mock(NodeConnectorId.class); when(tunnel.getNodeConnectorId()).thenReturn(tConnector); PortNumber tPort = mock(PortNumber.class); when(tunnel.getPort()).thenReturn(tPort); switchManager.updateSwitchConfig(nodeId, ofOverlayNodeConfig); } @Test @SuppressWarnings({"unchecked", "rawtypes"}) public void updateSwitchConfigTestUpdated() { FlowCapableNode fcNode = mock(FlowCapableNode.class); switchState.setFlowCapableNode(fcNode); switchState.status = SwitchStatus.READY; switchState.setHasEndpoints(true); Tunnel tunnel = mock(Tunnel.class); List<Tunnel> tunnels = Arrays.asList(tunnel); when(ofOverlayNodeConfig.getTunnel()).thenReturn(tunnels); when(tunnel.getTunnelType()).thenReturn((Class) TunnelTypeVxlan.class); IpAddress tAddress = mock(IpAddress.class); when(tunnel.getIp()).thenReturn(tAddress); NodeConnectorId tConnector = mock(NodeConnectorId.class); when(tunnel.getNodeConnectorId()).thenReturn(tConnector); PortNumber tPort = mock(PortNumber.class); when(tunnel.getPort()).thenReturn(tPort); switchManager.updateSwitchConfig(nodeId, ofOverlayNodeConfig); } @Test public void updateSwitchConfigTestDisconnected() { switchState.status = SwitchStatus.DISCONNECTED; switchState.setHasEndpoints(true); switchState.setConfig(mock(OfOverlayNodeConfig.class)); switchManager.updateSwitchConfig(nodeId, null); } @SuppressWarnings({"unchecked", "rawtypes"}) @Test public void SwitchStateUpdateTest() throws Exception { NodeConnectorId externalPort = mock(NodeConnectorId.class); Set<NodeConnectorId> externalPorts = new HashSet(Arrays.asList(externalPort)); ExternalInterfaces nc = mock(ExternalInterfaces.class); List<ExternalInterfaces> externalInterfaces = Arrays.asList(nc); when(ofOverlayNodeConfig.getExternalInterfaces()).thenReturn(externalInterfaces); when(nc.getNodeConnectorId()).thenReturn(externalPort); Tunnel tunnel = mock(Tunnel.class); List<Tunnel> tunnels = Arrays.asList(tunnel); when(ofOverlayNodeConfig.getTunnel()).thenReturn(tunnels); when(tunnel.getTunnelType()).thenReturn((Class) TunnelTypeVxlan.class); IpAddress tAddress = mock(IpAddress.class); when(tunnel.getIp()).thenReturn(tAddress); NodeConnectorId tConnector = mock(NodeConnectorId.class); when(tunnel.getNodeConnectorId()).thenReturn(tConnector); PortNumber tPort = mock(PortNumber.class); when(tunnel.getPort()).thenReturn(tPort); SwitchState switchState = new SwitchState(nodeId, nodeConnectorId, externalPorts, ofOverlayNodeConfig); Field field; field = SwitchState.class.getDeclaredField("externalPorts"); field.setAccessible(true); externalPorts = (Set<NodeConnectorId>) field.get(switchState); Assert.assertTrue(externalPorts.contains(externalPort)); field = SwitchState.class.getDeclaredField("tunnelBuilderByType"); field.setAccessible(true); Map<Class<? extends TunnelTypeBase>, TunnelBuilder> tunnelBuilderByType = (Map<Class<? extends TunnelTypeBase>, TunnelBuilder>) field.get(switchState); Assert.assertNotNull(tunnelBuilderByType.get(TunnelTypeVxlan.class)); } @SuppressWarnings("unchecked") @Test public void isConfigurationEmptyTest() throws Exception { Assert.assertTrue(switchState.isConfigurationEmpty()); FlowCapableNode fcNode = mock(FlowCapableNode.class); switchState.setFlowCapableNode(fcNode); Assert.assertFalse(switchState.isConfigurationEmpty()); switchState.setFlowCapableNode(null); switchState.setConfig(mock(OfOverlayNodeConfig.class)); Assert.assertFalse(switchState.isConfigurationEmpty()); switchState.setConfig(null); Field field = SwitchState.class.getDeclaredField("fcncByNcIid"); field.setAccessible(true); Map<InstanceIdentifier<NodeConnector>, FlowCapableNodeConnector> fcncByNcIid = (Map<InstanceIdentifier<NodeConnector>, FlowCapableNodeConnector>) field.get(switchState); fcncByNcIid.put(ncIid, fcnc); Assert.assertFalse(switchState.isConfigurationEmpty()); } @SuppressWarnings({"unchecked", "rawtypes"}) @Test public void setNodeConfigTest() throws Exception { Field field = SwitchState.class.getDeclaredField("fcncByNcIid"); field.setAccessible(true); Map<InstanceIdentifier<NodeConnector>, FlowCapableNodeConnector> fcncByNcIid = (Map<InstanceIdentifier<NodeConnector>, FlowCapableNodeConnector>) field.get(switchState); field = SwitchState.class.getDeclaredField("nodeConfig"); field.setAccessible(true); field.set(switchState, ofOverlayNodeConfig); ExternalInterfaces nc = mock(ExternalInterfaces.class); List<ExternalInterfaces> externalInterfaces = Arrays.asList(nc); when(ofOverlayNodeConfig.getExternalInterfaces()).thenReturn(externalInterfaces); Tunnel tunnel = mock(Tunnel.class); List<Tunnel> tunnels = Arrays.asList(tunnel); when(ofOverlayNodeConfig.getTunnel()).thenReturn(tunnels); when(tunnel.getTunnelType()).thenReturn((Class) TunnelTypeVxlan.class); IpAddress tAddress = mock(IpAddress.class); when(tunnel.getIp()).thenReturn(tAddress); NodeConnectorId tConnector = mock(NodeConnectorId.class); when(tunnel.getNodeConnectorId()).thenReturn(tConnector); PortNumber tPort = mock(PortNumber.class); when(tunnel.getPort()).thenReturn(tPort); switchState.setNodeConnectorConfig(ncIid, fcnc); Assert.assertTrue(fcncByNcIid.containsKey(ncIid)); Assert.assertEquals(fcnc, fcncByNcIid.get(ncIid)); TunnelBuilder tunnelBuilder = switchState.tunnelBuilderByType.get(TunnelTypeVxlan.class); Assert.assertNotNull(tunnelBuilder); Assert.assertEquals(tAddress, tunnelBuilder.getIp()); Assert.assertEquals(tConnector, tunnelBuilder.getNodeConnectorId()); Assert.assertEquals(tPort, tunnelBuilder.getPort()); switchState.setNodeConnectorConfig(ncIid, null); Assert.assertFalse(fcncByNcIid.containsKey(ncIid)); } @SuppressWarnings("unchecked") @Test public void setNodeConfigTestPutVxlan() throws Exception { Field field = SwitchState.class.getDeclaredField("fcncByNcIid"); field.setAccessible(true); Map<InstanceIdentifier<NodeConnector>, FlowCapableNodeConnector> fcncByNcIid = (Map<InstanceIdentifier<NodeConnector>, FlowCapableNodeConnector>) field.get(switchState); field = SwitchState.class.getDeclaredField("nodeConfig"); field.setAccessible(true); field.set(switchState, ofOverlayNodeConfig); ExternalInterfaces nc = mock(ExternalInterfaces.class); List<ExternalInterfaces> externalInterfaces = Arrays.asList(nc); when(ofOverlayNodeConfig.getExternalInterfaces()).thenReturn(externalInterfaces); when(fcnc.getName()).thenReturn("vxlan-fcncName"); switchState.setNodeConnectorConfig(ncIid, fcnc); Assert.assertTrue(fcncByNcIid.containsKey(ncIid)); Assert.assertEquals(fcnc, fcncByNcIid.get(ncIid)); Assert.assertNotNull(switchState.tunnelBuilderByType.get(TunnelTypeVxlan.class)); switchState.setNodeConnectorConfig(ncIid, null); Assert.assertFalse(fcncByNcIid.containsKey(ncIid)); } @SuppressWarnings("unchecked") @Test public void setNodeConfigTestPutVxlangpe() throws Exception { Field field = SwitchState.class.getDeclaredField("fcncByNcIid"); field.setAccessible(true); Map<InstanceIdentifier<NodeConnector>, FlowCapableNodeConnector> fcncByNcIid = (Map<InstanceIdentifier<NodeConnector>, FlowCapableNodeConnector>) field.get(switchState); field = SwitchState.class.getDeclaredField("nodeConfig"); field.setAccessible(true); field.set(switchState, ofOverlayNodeConfig); ExternalInterfaces nc = mock(ExternalInterfaces.class); List<ExternalInterfaces> externalInterfaces = Arrays.asList(nc); when(ofOverlayNodeConfig.getExternalInterfaces()).thenReturn(externalInterfaces); when(fcnc.getName()).thenReturn("vxlangpe-fcncName"); switchState.setNodeConnectorConfig(ncIid, fcnc); Assert.assertTrue(fcncByNcIid.containsKey(ncIid)); Assert.assertEquals(fcnc, fcncByNcIid.get(ncIid)); Assert.assertNotNull(switchState.tunnelBuilderByType.get(TunnelTypeVxlanGpe.class)); switchState.setNodeConnectorConfig(ncIid, null); Assert.assertFalse(fcncByNcIid.containsKey(ncIid)); } }