import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.verify;
-import java.util.Date;
-import java.util.Map;
-import java.util.Timer;
+import java.util.Optional;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.Matchers;
import org.mockito.Mock;
+import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
+import org.opendaylight.mdsal.eos.binding.api.Entity;
+import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
+import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState;
+import org.opendaylight.openflowplugin.api.openflow.configuration.ConfigurationService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.topology.discovery.rev130819.LinkDiscovered;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.topology.discovery.rev130819.LinkRemoved;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
+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.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.topology.lldp.discovery.config.rev160511.NonZeroUint32Type;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.lldp.discovery.config.rev160511.TopologyLldpDiscoveryConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.lldp.discovery.config.rev160511.TopologyLldpDiscoveryConfigBuilder;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger LOG = LoggerFactory.getLogger(LLDPLinkAgerTest.class);
- private LLDPLinkAger lldpLinkAger;
- private final long LLDP_INTERVAL = 5L;
- private final long LINK_EXPIRATION_TIME = 10L;
+ private static final long LLDP_INTERVAL = 5L;
+ private static final long LINK_EXPIRATION_TIME = 10L;
+
/**
- * We need to w8 while other tasks are finished before we can check anything
- * in LLDPAgingTask
+ * We need to wait while other tasks are finished before we can check anything in LLDPAgingTask.
*/
- private final int SLEEP = 100;
+ private static final int SLEEP = 100;
+ private LLDPLinkAger lldpLinkAger;
@Mock
private LinkDiscovered link;
@Mock
- private Map<LinkDiscovered, Date> linkToDate;
- @Mock
- private Timer timer;
- @Mock
private NotificationProviderService notificationService;
@Mock
+ private EntityOwnershipService eos;
+ @Mock
private LinkRemoved linkRemoved;
@Before
public void setUp() throws Exception {
- lldpLinkAger = new LLDPLinkAger(LLDP_INTERVAL, LINK_EXPIRATION_TIME, notificationService);
+ lldpLinkAger = new LLDPLinkAger(getConfig(), notificationService, getConfigurationService(), eos);
+ Mockito.when(link.getDestination()).thenReturn(new NodeConnectorRef(
+ InstanceIdentifier.create(Nodes.class).child(Node.class, new NodeKey(new NodeId("openflow:1")))));
+ Mockito.when(eos.getOwnershipState(any(Entity.class))).thenReturn(
+ Optional.of(EntityOwnershipState.IS_OWNER));
}
@Test
}
@Test
- public void testClose() {
+ public void testClose() throws Exception {
lldpLinkAger.close();
assertTrue(lldpLinkAger.isLinkToDateEmpty());
}
/**
- * Inner class LLDPAgingTask removes all expired records from linkToDate if any (in constructor of LLDPLinkAger)
+ * Inner class LLDPAgingTask removes all expired records from linkToDate if any (in constructor of LLDPLinkAger).
*/
@Test
public void testLLDPAgingTask() throws InterruptedException {
lldpLinkAger.put(link);
Thread.sleep(SLEEP);
- verify(notificationService).publish(Matchers.any(LinkRemoved.class));
+ verify(notificationService).publish(any(LinkRemoved.class));
+ }
+
+ private TopologyLldpDiscoveryConfig getConfig() {
+ TopologyLldpDiscoveryConfigBuilder cfgBuilder = new TopologyLldpDiscoveryConfigBuilder();
+ cfgBuilder.setTopologyLldpInterval(new NonZeroUint32Type(LLDP_INTERVAL));
+ cfgBuilder.setTopologyLldpExpirationInterval(new NonZeroUint32Type(LINK_EXPIRATION_TIME));
+ return cfgBuilder.build();
+ }
+
+ private ConfigurationService getConfigurationService() {
+ final ConfigurationService configurationService = Mockito.mock(ConfigurationService.class);
+ final TopologyLldpDiscoveryConfig config = getConfig();
+
+ Mockito.when(configurationService.registerListener(any())).thenReturn(() -> {
+ });
+
+ Mockito.lenient().when(configurationService.getProperty(Mockito.eq("topology-lldp-interval"), any()))
+ .thenReturn(config.getTopologyLldpInterval());
+
+ Mockito.lenient().when(configurationService.getProperty(Mockito.eq("topology-lldp-expiration-interval"), any()))
+ .thenReturn(config.getTopologyLldpExpirationInterval());
+
+ return configurationService;
}
-}
\ No newline at end of file
+}