2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.groupbasedpolicy.renderer.vpp.listener;
11 import java.util.Arrays;
12 import java.util.Collection;
14 import org.junit.Assert;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.mockito.ArgumentCaptor;
18 import org.mockito.Mockito;
19 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
20 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
21 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
22 import org.opendaylight.groupbasedpolicy.renderer.vpp.event.VppEndpointConfEvent;
23 import org.opendaylight.groupbasedpolicy.test.CustomDataBrokerTest;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint_location_provider.rev160419.LocationProviders;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.AddressType;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.ContextType;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.Forwarding;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.Config;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.VppEndpoint;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.VppEndpointBuilder;
32 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
33 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
35 import com.google.common.base.Optional;
36 import com.google.common.eventbus.EventBus;
38 public class VppEndpointListenerTest extends CustomDataBrokerTest {
40 private final static String ADDRESS = "1.1.1.1/32";
41 private final static ContextId CONTEXT_ID = new ContextId("ctx1");
42 private final static String IFACE_NAME = "ifaceName";
44 private DataBroker dataBroker;
45 private VppEndpointListener listener;
46 private EventBus eventBusMock;
49 public Collection<Class<?>> getClassesFromModules() {
50 return Arrays.asList(Node.class, VppEndpoint.class, Forwarding.class, LocationProviders.class);
55 dataBroker = getDataBroker();
56 eventBusMock = Mockito.mock(EventBus.class);
57 listener = new VppEndpointListener(dataBroker, eventBusMock);
61 public void testOnWrite() throws Exception {
62 ArgumentCaptor<VppEndpointConfEvent> argVppEpEvent = ArgumentCaptor.forClass(VppEndpointConfEvent.class);
63 VppEndpoint vppEndpoint = new VppEndpointBuilder().setAddress(ADDRESS)
64 .setAddressType(AddressType.class)
65 .setContextId(CONTEXT_ID)
66 .setContextType(ContextType.class)
68 InstanceIdentifier<VppEndpoint> vppEpIid =
69 InstanceIdentifier.builder(Config.class).child(VppEndpoint.class, vppEndpoint.getKey()).build();
70 WriteTransaction wTx = getDataBroker().newWriteOnlyTransaction();
71 wTx.put(LogicalDatastoreType.CONFIGURATION, vppEpIid, vppEndpoint);
74 Mockito.verify(eventBusMock).post(argVppEpEvent.capture());
75 VppEndpointConfEvent capturedVppEpEvent = argVppEpEvent.getValue();
76 Assert.assertEquals(vppEpIid, capturedVppEpEvent.getIid());
77 assertEqualsOptional(null, capturedVppEpEvent.getBefore());
78 assertEqualsOptional(vppEndpoint, capturedVppEpEvent.getAfter());
82 public void testOnDelete() throws Exception {
83 ArgumentCaptor<VppEndpointConfEvent> argVppEpEvent = ArgumentCaptor.forClass(VppEndpointConfEvent.class);
84 VppEndpoint vppEndpoint = new VppEndpointBuilder().setAddress(ADDRESS)
85 .setAddressType(AddressType.class)
86 .setContextId(CONTEXT_ID)
87 .setContextType(ContextType.class)
89 InstanceIdentifier<VppEndpoint> vppEpIid =
90 InstanceIdentifier.builder(Config.class).child(VppEndpoint.class, vppEndpoint.getKey()).build();
91 WriteTransaction wTx = getDataBroker().newWriteOnlyTransaction();
92 wTx.put(LogicalDatastoreType.CONFIGURATION, vppEpIid, vppEndpoint);
94 wTx = getDataBroker().newWriteOnlyTransaction();
95 wTx.delete(LogicalDatastoreType.CONFIGURATION, vppEpIid);
98 Mockito.verify(eventBusMock, Mockito.times(2)).post(argVppEpEvent.capture());
99 VppEndpointConfEvent capturedVppEpEvent = argVppEpEvent.getAllValues().get(1);
100 Assert.assertEquals(vppEpIid, capturedVppEpEvent.getIid());
101 assertEqualsOptional(vppEndpoint, capturedVppEpEvent.getBefore());
102 assertEqualsOptional(null, capturedVppEpEvent.getAfter());
106 public void testOnSubtreeModified() throws Exception {
107 ArgumentCaptor<VppEndpointConfEvent> argVppEpEvent = ArgumentCaptor.forClass(VppEndpointConfEvent.class);
108 VppEndpointBuilder vppEndpointBuilder = new VppEndpointBuilder().setAddress(ADDRESS)
109 .setAddressType(AddressType.class)
110 .setContextId(CONTEXT_ID)
111 .setContextType(ContextType.class);
112 VppEndpoint vppEndpoint = vppEndpointBuilder.build();
113 InstanceIdentifier<VppEndpoint> vppEpIid =
114 InstanceIdentifier.builder(Config.class).child(VppEndpoint.class, vppEndpoint.getKey()).build();
115 WriteTransaction wTx = getDataBroker().newWriteOnlyTransaction();
116 wTx.put(LogicalDatastoreType.CONFIGURATION, vppEpIid, vppEndpoint);
118 VppEndpoint modifiedVppEndpoint = vppEndpointBuilder.setVppInterfaceName(IFACE_NAME).build();
119 wTx = getDataBroker().newWriteOnlyTransaction();
120 wTx.put(LogicalDatastoreType.CONFIGURATION, vppEpIid, modifiedVppEndpoint);
123 Mockito.verify(eventBusMock, Mockito.times(2)).post(argVppEpEvent.capture());
124 VppEndpointConfEvent capturedFirstVppEpEvent = argVppEpEvent.getAllValues().get(0);
125 Assert.assertEquals(vppEpIid, capturedFirstVppEpEvent.getIid());
126 assertEqualsOptional(null, capturedFirstVppEpEvent.getBefore());
127 assertEqualsOptional(vppEndpoint, capturedFirstVppEpEvent.getAfter());
128 VppEndpointConfEvent capturedSecondVppEpEvent = argVppEpEvent.getAllValues().get(1);
129 Assert.assertEquals(vppEpIid, capturedSecondVppEpEvent.getIid());
130 assertEqualsOptional(vppEndpoint, capturedSecondVppEpEvent.getBefore());
131 assertEqualsOptional(modifiedVppEndpoint, capturedSecondVppEpEvent.getAfter());
134 private <T> void assertEqualsOptional(T expected, Optional<T> actual) {
135 if (expected == null) {
136 Assert.assertFalse(actual.isPresent());
138 Assert.assertTrue(actual.isPresent());
139 Assert.assertEquals(expected, actual.get());