2 * Copyright (c) 2015 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.statistics;
11 import java.util.ArrayList;
12 import java.util.Collections;
14 import org.junit.Assert;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.mockito.Mockito;
18 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
19 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
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.controller.md.sal.common.api.data.ReadFailedException;
23 import org.opendaylight.groupbasedpolicy.util.IidFactory;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.rev151215.statistic.records.StatRecords;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.rev151215.statistic.records.StatRecordsBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.rev151215.statistic.records.stat.records.EpToEpStatisticBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.rev151215.statistic.records.stat.records.EpToEpStatisticKey;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.rev151215.statistic.records.stat.records.ep.to.ep.statistic.EpEpgToEpEpgStatisticBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.rev151215.statistic.records.stat.records.ep.to.ep.statistic.EpEpgToEpEpgStatisticKey;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.rev151215.statistic.records.stat.records.ep.to.ep.statistic.ep.epg.to.ep.epg.statistic.MatchedRuleStatisticBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.rev151215.statistic.records.stat.records.ep.to.ep.statistic.ep.epg.to.ep.epg.statistic.MatchedRuleStatisticKey;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.RecordId;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.StatisticsStore;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.StatisticsStoreBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.dst.ep.fields.DstEndpointBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.source.ep.fields.SrcEndpointBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.statistics.store.StatisticRecord;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.statistics.store.StatisticRecordBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.statistics.store.StatisticRecordKey;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.statistics.store.statistic.record.StatisticBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.statistics.store.statistic.record.StatisticKey;
51 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
53 import com.google.common.base.Optional;
54 import com.google.common.util.concurrent.CheckedFuture;
56 public class StatisticManagerImplTest {
58 private DataBroker dataBroker;
59 private StatisticsManagerImpl manager;
60 private WriteTransaction wtx;
61 private ReadOnlyTransaction rtx;
65 dataBroker = Mockito.mock(DataBroker.class);
66 wtx = Mockito.mock(WriteTransaction.class);
67 rtx = Mockito.mock(ReadOnlyTransaction.class);
68 Mockito.when(dataBroker.newWriteOnlyTransaction()).thenReturn(wtx);
69 Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(rtx);
70 manager = new StatisticsManagerImpl(dataBroker);
74 public void writeStatTest() {
75 MacAddress srcMac = new MacAddress("00:00:00:00:00:01");
76 MacAddress dstMac = new MacAddress("00:00:00:00:00:02");
77 L2BridgeDomainId srcL2C = new L2BridgeDomainId("srcL2C");
78 L2BridgeDomainId dstL2C = new L2BridgeDomainId("dstL2C");
79 EndpointGroupId srcEPG = new EndpointGroupId("srcEPG");
80 EndpointGroupId dstEPG = new EndpointGroupId("dstEPG");
81 TenantId srcTenant = new TenantId("srcTenant");
82 TenantId dstTenant = new TenantId("dstTenant");
83 ContractId contract = new ContractId("contract");
84 SubjectName subject = new SubjectName("subject");
85 RuleName rule = new RuleName("rule");
86 ActionName action = new ActionName("action");
87 ClassifierName classifier = new ClassifierName("classifier");
89 StatRecordsBuilder recordsBuilder = new StatRecordsBuilder();
90 EpToEpStatisticBuilder epBuilder = new EpToEpStatisticBuilder();
91 EpEpgToEpEpgStatisticBuilder epgBuilder = new EpEpgToEpEpgStatisticBuilder();
92 epgBuilder.setSrcEpg(srcEPG)
94 .setKey(new EpEpgToEpEpgStatisticKey(dstEPG, srcEPG))
95 .setMatchedRuleStatistic(Collections.singletonList(new MatchedRuleStatisticBuilder()
96 .setKey(new MatchedRuleStatisticKey(contract, rule, subject))
97 .setContract(contract)
100 .setAction(Collections.singletonList(action))
101 .setClassifier(Collections.singletonList(classifier))
105 epBuilder.setSrcMacAddress(srcMac)
106 .setDstMacAddress(dstMac)
109 .setSrcTenant(srcTenant)
110 .setDstTenant(dstTenant)
111 .setKey(new EpToEpStatisticKey(dstL2C, dstMac, srcL2C, srcMac))
112 .setEpEpgToEpEpgStatistic(Collections.singletonList(epgBuilder.build()));
113 recordsBuilder.setEpToEpStatistic(Collections.singletonList(epBuilder.build()));
115 SrcEndpointBuilder srcBuilder = new SrcEndpointBuilder();
116 DstEndpointBuilder dstBuilder = new DstEndpointBuilder();
117 srcBuilder.setMacAddress(srcMac).setL2Context(srcL2C).setTenant(srcTenant);
118 dstBuilder.setMacAddress(dstMac).setL2Context(dstL2C).setTenant(dstTenant);
119 srcBuilder.setEndpointGroup(srcEPG);
120 dstBuilder.setEndpointGroup(dstEPG);
121 StatisticBuilder statBuilder = new StatisticBuilder().setKey(new StatisticKey(contract, rule, subject))
122 .setContract(contract)
125 .setClassifier(Collections.singletonList(classifier))
126 .setAction(Collections.singletonList(action))
129 StatisticRecordKey key = new StatisticRecordKey(new RecordId(0l));
130 StatisticRecordBuilder statRecord = new StatisticRecordBuilder().setKey(key)
131 .setStatistic(Collections.singletonList(statBuilder.build()))
132 .setSrcEndpoint(srcBuilder.build())
133 .setDstEndpoint(dstBuilder.build());
135 manager.writeStat(recordsBuilder.build());
136 Mockito.verify(wtx).put(LogicalDatastoreType.OPERATIONAL,
137 IidFactory.statisticRecordIid(key),
142 public void readStatsTest() {
143 MacAddress srcMac = new MacAddress("00:00:00:00:00:01");
144 MacAddress dstMac = new MacAddress("00:00:00:00:00:02");
145 L2BridgeDomainId srcL2C = new L2BridgeDomainId("srcL2C");
146 L2BridgeDomainId dstL2C = new L2BridgeDomainId("dstL2C");
147 EndpointGroupId srcEPG = new EndpointGroupId("srcEPG");
148 EndpointGroupId dstEPG = new EndpointGroupId("dstEPG");
149 TenantId srcTenant = new TenantId("srcTenant");
150 TenantId dstTenant = new TenantId("dstTenant");
151 ContractId contract = new ContractId("contract");
152 SubjectName subject = new SubjectName("subject");
153 RuleName rule = new RuleName("rule");
154 ActionName action = new ActionName("action");
155 ClassifierName classifier = new ClassifierName("classifier");
157 SrcEndpointBuilder srcBuilder = new SrcEndpointBuilder();
158 DstEndpointBuilder dstBuilder = new DstEndpointBuilder();
159 srcBuilder.setMacAddress(srcMac).setL2Context(srcL2C).setTenant(srcTenant);
160 dstBuilder.setMacAddress(dstMac).setL2Context(dstL2C).setTenant(dstTenant);
161 srcBuilder.setEndpointGroup(srcEPG);
162 dstBuilder.setEndpointGroup(dstEPG);
163 StatisticBuilder statBuilder = new StatisticBuilder().setKey(new StatisticKey(contract, rule, subject))
164 .setContract(contract)
167 .setClassifier(Collections.singletonList(classifier))
168 .setAction(Collections.singletonList(action))
171 StatisticRecordKey key = new StatisticRecordKey(new RecordId(0l));
172 StatisticRecordBuilder statRecord = new StatisticRecordBuilder().setKey(key)
173 .setStatistic(Collections.singletonList(statBuilder.build()))
174 .setSrcEndpoint(srcBuilder.build())
175 .setDstEndpoint(dstBuilder.build());
176 ArrayList<StatisticRecord> stats = new ArrayList<>();
177 stats.add(statRecord.build());
178 statRecord.setKey(new StatisticRecordKey(new RecordId(1l)));
179 stats.add(statRecord.build());
181 StatRecordsBuilder recordsBuilder = new StatRecordsBuilder();
182 EpToEpStatisticBuilder epBuilder = new EpToEpStatisticBuilder();
183 EpEpgToEpEpgStatisticBuilder epgBuilder = new EpEpgToEpEpgStatisticBuilder();
184 epgBuilder.setSrcEpg(srcEPG)
186 .setKey(new EpEpgToEpEpgStatisticKey(dstEPG, srcEPG))
187 .setMatchedRuleStatistic(Collections.singletonList(new MatchedRuleStatisticBuilder()
188 .setKey(new MatchedRuleStatisticKey(contract, rule, subject))
189 .setContract(contract)
191 .setMatchedRule(rule)
192 .setAction(Collections.singletonList(action))
193 .setClassifier(Collections.singletonList(classifier))
197 epBuilder.setSrcMacAddress(srcMac)
198 .setDstMacAddress(dstMac)
201 .setSrcTenant(srcTenant)
202 .setDstTenant(dstTenant)
203 .setKey(new EpToEpStatisticKey(dstL2C, dstMac, srcL2C, srcMac))
204 .setEpEpgToEpEpgStatistic(Collections.singletonList(epgBuilder.build()));
205 recordsBuilder.setEpToEpStatistic(Collections.singletonList(epBuilder.build()));
207 CheckedFuture<Optional<StatisticsStore>, ReadFailedException> future = Mockito.mock(CheckedFuture.class);
209 Mockito.when(future.get())
210 .thenReturn(Optional.of(new StatisticsStoreBuilder().setStatisticRecord(stats).build()));
211 Mockito.when(rtx.read(LogicalDatastoreType.OPERATIONAL,
212 InstanceIdentifier.builder(StatisticsStore.class).build()))
214 StatRecords read = manager.readStats();
215 Assert.assertEquals(recordsBuilder.build(), read);
216 } catch (Exception e) {