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.controller.md.sal.common.api.data.TransactionCommitFailedException;
24 import org.opendaylight.groupbasedpolicy.util.IidFactory;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierName;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.rev151215.statistic.records.StatRecords;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.rev151215.statistic.records.StatRecordsBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.rev151215.statistic.records.stat.records.EpToEpStatisticBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.rev151215.statistic.records.stat.records.EpToEpStatisticKey;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.rev151215.statistic.records.stat.records.ep.to.ep.statistic.EpEpgToEpEpgStatisticBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.rev151215.statistic.records.stat.records.ep.to.ep.statistic.EpEpgToEpEpgStatisticKey;
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.MatchedRuleStatisticBuilder;
41 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;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.RecordId;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.StatisticsStore;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.StatisticsStoreBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.dst.ep.fields.DstEndpointBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.source.ep.fields.SrcEndpointBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.statistics.store.StatisticRecord;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.statistics.store.StatisticRecordBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.statistics.store.StatisticRecordKey;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.statistics.store.statistic.record.StatisticBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.statistics.store.rev151215.statistics.store.statistic.record.StatisticKey;
52 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
54 import com.google.common.base.Optional;
55 import com.google.common.util.concurrent.CheckedFuture;
57 public class StatisticManagerImplTest {
59 private DataBroker dataBroker;
60 private StatisticsManagerImpl manager;
61 private WriteTransaction wtx;
62 private ReadOnlyTransaction rtx;
66 dataBroker = Mockito.mock(DataBroker.class);
67 wtx = Mockito.mock(WriteTransaction.class);
68 rtx = Mockito.mock(ReadOnlyTransaction.class);
69 Mockito.when(dataBroker.newWriteOnlyTransaction()).thenReturn(wtx);
70 Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(rtx);
71 manager = new StatisticsManagerImpl(dataBroker);
75 public void writeStatTest() {
76 MacAddress srcMac = new MacAddress("00:00:00:00:00:01");
77 MacAddress dstMac = new MacAddress("00:00:00:00:00:02");
78 L2BridgeDomainId srcL2C = new L2BridgeDomainId("srcL2C");
79 L2BridgeDomainId dstL2C = new L2BridgeDomainId("dstL2C");
80 EndpointGroupId srcEPG = new EndpointGroupId("srcEPG");
81 EndpointGroupId dstEPG = new EndpointGroupId("dstEPG");
82 TenantId srcTenant = new TenantId("srcTenant");
83 TenantId dstTenant = new TenantId("dstTenant");
84 ContractId contract = new ContractId("contract");
85 SubjectName subject = new SubjectName("subject");
86 RuleName rule = new RuleName("rule");
87 ActionName action = new ActionName("action");
88 ClassifierName classifier = new ClassifierName("classifier");
90 StatRecordsBuilder recordsBuilder = new StatRecordsBuilder();
91 EpToEpStatisticBuilder epBuilder = new EpToEpStatisticBuilder();
92 EpEpgToEpEpgStatisticBuilder epgBuilder = new EpEpgToEpEpgStatisticBuilder();
93 epgBuilder.setSrcEpg(srcEPG)
95 .setKey(new EpEpgToEpEpgStatisticKey(dstEPG, srcEPG))
96 .setMatchedRuleStatistic(Collections.singletonList(new MatchedRuleStatisticBuilder()
97 .setKey(new MatchedRuleStatisticKey(contract, rule, subject))
98 .setContract(contract)
100 .setMatchedRule(rule)
101 .setAction(Collections.singletonList(action))
102 .setClassifier(Collections.singletonList(classifier))
106 epBuilder.setSrcMacAddress(srcMac)
107 .setDstMacAddress(dstMac)
110 .setSrcTenant(srcTenant)
111 .setDstTenant(dstTenant)
112 .setKey(new EpToEpStatisticKey(dstL2C, dstMac, srcL2C, srcMac))
113 .setEpEpgToEpEpgStatistic(Collections.singletonList(epgBuilder.build()));
114 recordsBuilder.setEpToEpStatistic(Collections.singletonList(epBuilder.build()));
116 SrcEndpointBuilder srcBuilder = new SrcEndpointBuilder();
117 DstEndpointBuilder dstBuilder = new DstEndpointBuilder();
118 srcBuilder.setMacAddress(srcMac).setL2Context(srcL2C).setTenant(srcTenant);
119 dstBuilder.setMacAddress(dstMac).setL2Context(dstL2C).setTenant(dstTenant);
120 srcBuilder.setEndpointGroup(srcEPG);
121 dstBuilder.setEndpointGroup(dstEPG);
122 StatisticBuilder statBuilder = new StatisticBuilder().setKey(new StatisticKey(contract, rule, subject))
123 .setContract(contract)
126 .setClassifier(Collections.singletonList(classifier))
127 .setAction(Collections.singletonList(action))
130 StatisticRecordKey key = new StatisticRecordKey(new RecordId(0l));
131 StatisticRecordBuilder statRecord = new StatisticRecordBuilder().setKey(key)
132 .setStatistic(Collections.singletonList(statBuilder.build()))
133 .setSrcEndpoint(srcBuilder.build())
134 .setDstEndpoint(dstBuilder.build());
136 // manager.writeStat(recordsBuilder.build());
137 // Mockito.verify(wtx).put(LogicalDatastoreType.OPERATIONAL,
138 // IidFactory.statisticRecordIid(key),
139 // statRecord.build());
140 CheckedFuture<Void,TransactionCommitFailedException> future = Mockito.mock(CheckedFuture.class);
141 Mockito.when(wtx.submit()).thenReturn(future);
142 Mockito.when(dataBroker.newWriteOnlyTransaction()).thenReturn(wtx);
144 manager.writeStat(recordsBuilder.build());
145 Mockito.verify(wtx).put(LogicalDatastoreType.OPERATIONAL,
146 IidFactory.statisticRecordIid(key),
147 statRecord.build(), true);
151 public void readStatsTest() {
152 MacAddress srcMac = new MacAddress("00:00:00:00:00:01");
153 MacAddress dstMac = new MacAddress("00:00:00:00:00:02");
154 L2BridgeDomainId srcL2C = new L2BridgeDomainId("srcL2C");
155 L2BridgeDomainId dstL2C = new L2BridgeDomainId("dstL2C");
156 EndpointGroupId srcEPG = new EndpointGroupId("srcEPG");
157 EndpointGroupId dstEPG = new EndpointGroupId("dstEPG");
158 TenantId srcTenant = new TenantId("srcTenant");
159 TenantId dstTenant = new TenantId("dstTenant");
160 ContractId contract = new ContractId("contract");
161 SubjectName subject = new SubjectName("subject");
162 RuleName rule = new RuleName("rule");
163 ActionName action = new ActionName("action");
164 ClassifierName classifier = new ClassifierName("classifier");
166 SrcEndpointBuilder srcBuilder = new SrcEndpointBuilder();
167 DstEndpointBuilder dstBuilder = new DstEndpointBuilder();
168 srcBuilder.setMacAddress(srcMac).setL2Context(srcL2C).setTenant(srcTenant);
169 dstBuilder.setMacAddress(dstMac).setL2Context(dstL2C).setTenant(dstTenant);
170 srcBuilder.setEndpointGroup(srcEPG);
171 dstBuilder.setEndpointGroup(dstEPG);
172 StatisticBuilder statBuilder = new StatisticBuilder().setKey(new StatisticKey(contract, rule, subject))
173 .setContract(contract)
176 .setClassifier(Collections.singletonList(classifier))
177 .setAction(Collections.singletonList(action))
180 StatisticRecordKey key = new StatisticRecordKey(new RecordId(0l));
181 StatisticRecordBuilder statRecord = new StatisticRecordBuilder().setKey(key)
182 .setStatistic(Collections.singletonList(statBuilder.build()))
183 .setSrcEndpoint(srcBuilder.build())
184 .setDstEndpoint(dstBuilder.build());
185 ArrayList<StatisticRecord> stats = new ArrayList<>();
186 stats.add(statRecord.build());
187 statRecord.setKey(new StatisticRecordKey(new RecordId(1l)));
188 stats.add(statRecord.build());
190 StatRecordsBuilder recordsBuilder = new StatRecordsBuilder();
191 EpToEpStatisticBuilder epBuilder = new EpToEpStatisticBuilder();
192 EpEpgToEpEpgStatisticBuilder epgBuilder = new EpEpgToEpEpgStatisticBuilder();
193 epgBuilder.setSrcEpg(srcEPG)
195 .setKey(new EpEpgToEpEpgStatisticKey(dstEPG, srcEPG))
196 .setMatchedRuleStatistic(Collections.singletonList(new MatchedRuleStatisticBuilder()
197 .setKey(new MatchedRuleStatisticKey(contract, rule, subject))
198 .setContract(contract)
200 .setMatchedRule(rule)
201 .setAction(Collections.singletonList(action))
202 .setClassifier(Collections.singletonList(classifier))
206 epBuilder.setSrcMacAddress(srcMac)
207 .setDstMacAddress(dstMac)
210 .setSrcTenant(srcTenant)
211 .setDstTenant(dstTenant)
212 .setKey(new EpToEpStatisticKey(dstL2C, dstMac, srcL2C, srcMac))
213 .setEpEpgToEpEpgStatistic(Collections.singletonList(epgBuilder.build()));
214 recordsBuilder.setEpToEpStatistic(Collections.singletonList(epBuilder.build()));
216 CheckedFuture<Optional<StatisticsStore>, ReadFailedException> future = Mockito.mock(CheckedFuture.class);
218 Mockito.when(future.get())
219 .thenReturn(Optional.of(new StatisticsStoreBuilder().setStatisticRecord(stats).build()));
220 Mockito.when(rtx.read(LogicalDatastoreType.OPERATIONAL,
221 InstanceIdentifier.builder(StatisticsStore.class).build()))
223 StatRecords read = manager.readStats();
224 Assert.assertEquals(recordsBuilder.build(), read);
225 } catch (Exception e) {