4d2f69437aef0c8cf1d9de4f522ac00f8897ae76
[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.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;
53
54 import com.google.common.base.Optional;
55 import com.google.common.util.concurrent.CheckedFuture;
56
57 public class StatisticManagerImplTest {
58
59     private DataBroker dataBroker;
60     private StatisticsManagerImpl manager;
61     private WriteTransaction wtx;
62     private ReadOnlyTransaction rtx;
63
64     @Before
65     public void init() {
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);
72     }
73
74     @Test
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");
89         // input
90         StatRecordsBuilder recordsBuilder = new StatRecordsBuilder();
91         EpToEpStatisticBuilder epBuilder = new EpToEpStatisticBuilder();
92         EpEpgToEpEpgStatisticBuilder epgBuilder = new EpEpgToEpEpgStatisticBuilder();
93         epgBuilder.setSrcEpg(srcEPG)
94             .setDstEpg(dstEPG)
95             .setKey(new EpEpgToEpEpgStatisticKey(dstEPG, srcEPG))
96             .setMatchedRuleStatistic(Collections.singletonList(new MatchedRuleStatisticBuilder()
97                 .setKey(new MatchedRuleStatisticKey(contract, rule, subject))
98                 .setContract(contract)
99                 .setSubject(subject)
100                 .setMatchedRule(rule)
101                 .setAction(Collections.singletonList(action))
102                 .setClassifier(Collections.singletonList(classifier))
103                 .setByteCount(25l)
104                 .setPacketCount(5l)
105                 .build()));
106         epBuilder.setSrcMacAddress(srcMac)
107             .setDstMacAddress(dstMac)
108             .setSrcL2c(srcL2C)
109             .setDstL2c(dstL2C)
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()));
115         // output
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)
124             .setRule(rule)
125             .setSubject(subject)
126             .setClassifier(Collections.singletonList(classifier))
127             .setAction(Collections.singletonList(action))
128             .setByteCount(25l)
129             .setPacketCount(5l);
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());
135
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);
143
144         manager.writeStat(recordsBuilder.build());
145         Mockito.verify(wtx).put(LogicalDatastoreType.OPERATIONAL,
146                 IidFactory.statisticRecordIid(key),
147                 statRecord.build(), true);
148     }
149
150     @Test
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");
165         // input
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)
174             .setRule(rule)
175             .setSubject(subject)
176             .setClassifier(Collections.singletonList(classifier))
177             .setAction(Collections.singletonList(action))
178             .setByteCount(25l)
179             .setPacketCount(5l);
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());
189         // output
190         StatRecordsBuilder recordsBuilder = new StatRecordsBuilder();
191         EpToEpStatisticBuilder epBuilder = new EpToEpStatisticBuilder();
192         EpEpgToEpEpgStatisticBuilder epgBuilder = new EpEpgToEpEpgStatisticBuilder();
193         epgBuilder.setSrcEpg(srcEPG)
194             .setDstEpg(dstEPG)
195             .setKey(new EpEpgToEpEpgStatisticKey(dstEPG, srcEPG))
196             .setMatchedRuleStatistic(Collections.singletonList(new MatchedRuleStatisticBuilder()
197                 .setKey(new MatchedRuleStatisticKey(contract, rule, subject))
198                 .setContract(contract)
199                 .setSubject(subject)
200                 .setMatchedRule(rule)
201                 .setAction(Collections.singletonList(action))
202                 .setClassifier(Collections.singletonList(classifier))
203                 .setByteCount(50l)
204                 .setPacketCount(10l)
205                 .build()));
206         epBuilder.setSrcMacAddress(srcMac)
207             .setDstMacAddress(dstMac)
208             .setSrcL2c(srcL2C)
209             .setDstL2c(dstL2C)
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()));
215
216         CheckedFuture<Optional<StatisticsStore>, ReadFailedException> future = Mockito.mock(CheckedFuture.class);
217         try {
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()))
222                 .thenReturn(future);
223             StatRecords read = manager.readStats();
224             Assert.assertEquals(recordsBuilder.build(), read);
225         } catch (Exception e) {
226         }
227
228     }
229 }