2 * Copyright (c) 2014 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
10 import org.junit.Test;
11 import org.opendaylight.controller.frm.impl.ForwardingRulesManagerImpl;
12 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
13 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
14 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.Meter;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.MeterBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.MeterKey;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInput;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInput;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInput;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
27 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
28 import test.mock.util.FRMTest;
29 import test.mock.util.RpcProviderRegistryMock;
30 import test.mock.util.SalMeterServiceMock;
32 import java.util.List;
34 import static org.junit.Assert.assertEquals;
36 public class MeterListenerTest extends FRMTest {
37 RpcProviderRegistry rpcProviderRegistryMock = new RpcProviderRegistryMock();
38 NodeKey s1Key = new NodeKey(new NodeId("S1"));
41 public void addTwoMetersTest() throws Exception {
42 ForwardingRulesManagerImpl forwardingRulesManager = new ForwardingRulesManagerImpl(getDataBroker(), rpcProviderRegistryMock);
43 forwardingRulesManager.start();
45 addFlowCapableNode(s1Key);
47 MeterKey meterKey = new MeterKey(new MeterId((long) 2000));
48 InstanceIdentifier<Meter> meterII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key)
49 .augmentation(FlowCapableNode.class).child(Meter.class, meterKey);
50 Meter meter = new MeterBuilder().setKey(meterKey).setMeterName("meter_one").build();
52 WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
53 writeTx.put(LogicalDatastoreType.CONFIGURATION, meterII, meter);
54 assertCommit(writeTx.submit());
55 SalMeterServiceMock salMeterService = (SalMeterServiceMock) forwardingRulesManager.getSalMeterService();
56 List<AddMeterInput> addMeterCalls = salMeterService.getAddMeterCalls();
57 assertEquals(1, addMeterCalls.size());
58 assertEquals("DOM-0", addMeterCalls.get(0).getTransactionUri().getValue());
60 meterKey = new MeterKey(new MeterId((long) 2001));
61 meterII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key)
62 .augmentation(FlowCapableNode.class).child(Meter.class, meterKey);
63 meter = new MeterBuilder().setKey(meterKey).setMeterName("meter_two").setBarrier(true).build();
64 writeTx = getDataBroker().newWriteOnlyTransaction();
65 writeTx.put(LogicalDatastoreType.CONFIGURATION, meterII, meter);
66 assertCommit(writeTx.submit());
67 salMeterService = (SalMeterServiceMock) forwardingRulesManager.getSalMeterService();
68 addMeterCalls = salMeterService.getAddMeterCalls();
69 assertEquals(2, addMeterCalls.size());
70 assertEquals("DOM-1", addMeterCalls.get(1).getTransactionUri().getValue());
71 assertEquals(meterII, addMeterCalls.get(1).getMeterRef().getValue());
73 forwardingRulesManager.close();
77 public void updateMeterTest() throws Exception {
78 ForwardingRulesManagerImpl forwardingRulesManager = new ForwardingRulesManagerImpl(getDataBroker(), rpcProviderRegistryMock);
79 forwardingRulesManager.start();
81 addFlowCapableNode(s1Key);
83 MeterKey meterKey = new MeterKey(new MeterId((long) 2000));
84 InstanceIdentifier<Meter> meterII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key)
85 .augmentation(FlowCapableNode.class).child(Meter.class, meterKey);
86 Meter meter = new MeterBuilder().setKey(meterKey).setMeterName("meter_one").setBarrier(false).build();
88 WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
89 writeTx.put(LogicalDatastoreType.CONFIGURATION, meterII, meter);
90 assertCommit(writeTx.submit());
91 SalMeterServiceMock salMeterService = (SalMeterServiceMock) forwardingRulesManager.getSalMeterService();
92 List<AddMeterInput> addMeterCalls = salMeterService.getAddMeterCalls();
93 assertEquals(1, addMeterCalls.size());
94 assertEquals("DOM-0", addMeterCalls.get(0).getTransactionUri().getValue());
96 meter = new MeterBuilder().setKey(meterKey).setMeterName("meter_two").setBarrier(true).build();
97 writeTx = getDataBroker().newWriteOnlyTransaction();
98 writeTx.put(LogicalDatastoreType.CONFIGURATION, meterII, meter);
99 assertCommit(writeTx.submit());
100 salMeterService = (SalMeterServiceMock) forwardingRulesManager.getSalMeterService();
101 List<UpdateMeterInput> updateMeterCalls = salMeterService.getUpdateMeterCalls();
102 assertEquals(1, updateMeterCalls.size());
103 assertEquals("DOM-1", updateMeterCalls.get(0).getTransactionUri().getValue());
104 assertEquals(meterII, updateMeterCalls.get(0).getMeterRef().getValue());
106 forwardingRulesManager.close();
110 public void removeMeterTest() throws Exception {
111 ForwardingRulesManagerImpl forwardingRulesManager = new ForwardingRulesManagerImpl(getDataBroker(), rpcProviderRegistryMock);
112 forwardingRulesManager.start();
114 addFlowCapableNode(s1Key);
116 MeterKey meterKey = new MeterKey(new MeterId((long) 2000));
117 InstanceIdentifier<Meter> meterII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key)
118 .augmentation(FlowCapableNode.class).child(Meter.class, meterKey);
119 Meter meter = new MeterBuilder().setKey(meterKey).setMeterName("meter_one").build();
121 WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
122 writeTx.put(LogicalDatastoreType.CONFIGURATION, meterII, meter);
123 assertCommit(writeTx.submit());
124 SalMeterServiceMock salMeterService = (SalMeterServiceMock) forwardingRulesManager.getSalMeterService();
125 List<AddMeterInput> addMeterCalls = salMeterService.getAddMeterCalls();
126 assertEquals(1, addMeterCalls.size());
127 assertEquals("DOM-0", addMeterCalls.get(0).getTransactionUri().getValue());
129 writeTx = getDataBroker().newWriteOnlyTransaction();
130 writeTx.delete(LogicalDatastoreType.CONFIGURATION, meterII);
131 assertCommit(writeTx.submit());
132 salMeterService = (SalMeterServiceMock) forwardingRulesManager.getSalMeterService();
133 List<RemoveMeterInput> removeMeterCalls = salMeterService.getRemoveMeterCalls();
134 assertEquals(1, removeMeterCalls.size());
135 assertEquals("DOM-1", removeMeterCalls.get(0).getTransactionUri().getValue());
136 assertEquals(meterII, removeMeterCalls.get(0).getMeterRef().getValue());
138 forwardingRulesManager.close();