1330fc02467bbf6209cbd3f1ad29c48363287890
[groupbasedpolicy.git] / groupbasedpolicy / src / test / java / org / opendaylight / groupbasedpolicy / statistics / StatisticManagerImplTest.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.groupbasedpolicy.statistics;
10
11 import java.util.ArrayList;
12 import java.util.Collections;
13
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;
52
53 import com.google.common.base.Optional;
54 import com.google.common.util.concurrent.CheckedFuture;
55
56 public class StatisticManagerImplTest {
57
58     private DataBroker dataBroker;
59     private StatisticsManagerImpl manager;
60     private WriteTransaction wtx;
61     private ReadOnlyTransaction rtx;
62
63     @Before
64     public void init() {
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);
71     }
72
73     @Test
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");
88         // input
89         StatRecordsBuilder recordsBuilder = new StatRecordsBuilder();
90         EpToEpStatisticBuilder epBuilder = new EpToEpStatisticBuilder();
91         EpEpgToEpEpgStatisticBuilder epgBuilder = new EpEpgToEpEpgStatisticBuilder();
92         epgBuilder.setSrcEpg(srcEPG)
93             .setDstEpg(dstEPG)
94             .setKey(new EpEpgToEpEpgStatisticKey(dstEPG, srcEPG))
95             .setMatchedRuleStatistic(Collections.singletonList(new MatchedRuleStatisticBuilder()
96                 .setKey(new MatchedRuleStatisticKey(contract, rule, subject))
97                 .setContract(contract)
98                 .setSubject(subject)
99                 .setMatchedRule(rule)
100                 .setAction(Collections.singletonList(action))
101                 .setClassifier(Collections.singletonList(classifier))
102                 .setByteCount(25l)
103                 .setPacketCount(5l)
104                 .build()));
105         epBuilder.setSrcMacAddress(srcMac)
106             .setDstMacAddress(dstMac)
107             .setSrcL2c(srcL2C)
108             .setDstL2c(dstL2C)
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()));
114         // output
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)
123             .setRule(rule)
124             .setSubject(subject)
125             .setClassifier(Collections.singletonList(classifier))
126             .setAction(Collections.singletonList(action))
127             .setByteCount(25l)
128             .setPacketCount(5l);
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());
134
135         manager.writeStat(recordsBuilder.build());
136         Mockito.verify(wtx).put(LogicalDatastoreType.OPERATIONAL,
137                 IidFactory.statisticRecordIid(key),
138                 statRecord.build());
139     }
140
141     @Test
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");
156         // input
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)
165             .setRule(rule)
166             .setSubject(subject)
167             .setClassifier(Collections.singletonList(classifier))
168             .setAction(Collections.singletonList(action))
169             .setByteCount(25l)
170             .setPacketCount(5l);
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());
180         // output
181         StatRecordsBuilder recordsBuilder = new StatRecordsBuilder();
182         EpToEpStatisticBuilder epBuilder = new EpToEpStatisticBuilder();
183         EpEpgToEpEpgStatisticBuilder epgBuilder = new EpEpgToEpEpgStatisticBuilder();
184         epgBuilder.setSrcEpg(srcEPG)
185             .setDstEpg(dstEPG)
186             .setKey(new EpEpgToEpEpgStatisticKey(dstEPG, srcEPG))
187             .setMatchedRuleStatistic(Collections.singletonList(new MatchedRuleStatisticBuilder()
188                 .setKey(new MatchedRuleStatisticKey(contract, rule, subject))
189                 .setContract(contract)
190                 .setSubject(subject)
191                 .setMatchedRule(rule)
192                 .setAction(Collections.singletonList(action))
193                 .setClassifier(Collections.singletonList(classifier))
194                 .setByteCount(50l)
195                 .setPacketCount(10l)
196                 .build()));
197         epBuilder.setSrcMacAddress(srcMac)
198             .setDstMacAddress(dstMac)
199             .setSrcL2c(srcL2C)
200             .setDstL2c(dstL2C)
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()));
206
207         CheckedFuture<Optional<StatisticsStore>, ReadFailedException> future = Mockito.mock(CheckedFuture.class);
208         try {
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()))
213                 .thenReturn(future);
214             StatRecords read = manager.readStats();
215             Assert.assertEquals(recordsBuilder.build(), read);
216         } catch (Exception e) {
217         }
218
219     }
220 }