95a05070e33a4773cd2c22fc02c3b6f5589297c3
[netvirt.git] / vpnmanager / impl / src / test / java / org / opendaylight / netvirt / vpnmanager / intervpnlink / L3VpnTestCatalog.java
1 /*
2  * Copyright (c) 2017 Ericsson India Global Services Pvt Ltd. 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 package org.opendaylight.netvirt.vpnmanager.intervpnlink;
9
10 import java.util.ArrayList;
11 import java.util.Arrays;
12 import java.util.List;
13 import java.util.Objects;
14 import java.util.stream.Collectors;
15 import org.opendaylight.netvirt.vpnmanager.VpnOperDsUtils;
16 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.VpnTargets;
17 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.VpnTargetsBuilder;
18 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.vpntargets.VpnTarget;
19 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.vpntargets.VpnTargetBuilder;
20 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.vpntargets.VpnTargetKey;
21 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance;
22 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstanceBuilder;
23 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.vpn.instance.Ipv4Family;
24 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.vpn.instance.Ipv4FamilyBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntry;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntryBuilder;
27
28 /**
29  * Gathers a collections of 'fake' L3VPN objects that can be used in JUnits.
30  */
31 public final class L3VpnTestCatalog {
32
33     static class L3VpnComposite {
34         VpnInstance vpnCfgData;
35         VpnInstanceOpDataEntry vpnOpData;
36
37         L3VpnComposite(VpnInstance vpnInst, VpnInstanceOpDataEntry vpnOpData) {
38             this.vpnCfgData = vpnInst;
39             this.vpnOpData = vpnOpData;
40         }
41     }
42
43     private L3VpnTestCatalog() {
44
45     }
46
47     static VpnTargets makeVpnTargets(List<String> irts, List<String> erts) {
48         List<String> commonRT = new ArrayList<>(irts);
49         commonRT.retainAll(erts);
50         List<String> pureIrts = new ArrayList<>(irts);
51         pureIrts.removeAll(commonRT);
52         List<String> pureErts = new ArrayList<>(erts);
53         pureErts.removeAll(commonRT);
54         List<VpnTarget> vpnTargetList = new ArrayList<>();
55         vpnTargetList.addAll(makeVpnTargetsByType(commonRT, VpnTarget.VrfRTType.Both));
56         vpnTargetList.addAll(makeVpnTargetsByType(pureIrts, VpnTarget.VrfRTType.ImportExtcommunity));
57         vpnTargetList.addAll(makeVpnTargetsByType(pureErts, VpnTarget.VrfRTType.ExportExtcommunity));
58         return new VpnTargetsBuilder().setVpnTarget(vpnTargetList).build();
59     }
60
61     static List<VpnTarget> makeVpnTargetsByType(List<String> rtList, VpnTarget.VrfRTType type) {
62         return rtList.stream()
63                      .map(rt -> new VpnTargetBuilder().withKey(new VpnTargetKey(rt))
64                                                  .setVrfRTValue(rt).setVrfRTType(type).build())
65                      .collect(Collectors.toList());
66     }
67
68     static L3VpnComposite build(String vpnName, String vpnRd, long vpnTag, List<String> irts, List<String> erts) {
69         Objects.nonNull(irts);
70         Objects.nonNull(erts);
71         Ipv4Family vpnIpv4Cfg = new Ipv4FamilyBuilder().setVpnTargets(makeVpnTargets(irts, erts)).build();
72         VpnInstance vpnInst =
73             new VpnInstanceBuilder().setVpnInstanceName(vpnName).setIpv4Family(vpnIpv4Cfg).build();
74         VpnInstanceOpDataEntry vpnOpData =
75             new VpnInstanceOpDataEntryBuilder().setVpnId(vpnTag).setVpnInstanceName(vpnName).setVrfId(vpnRd)
76                                                .setVpnTargets(VpnOperDsUtils.makeVpnTargets(irts, erts)).build();
77         return new L3VpnComposite(vpnInst, vpnOpData);
78     }
79
80     static L3VpnComposite VPN_1 =
81         build("50525a08-3c2d-4d2a-8826-000000000001", "100:100", 100,
82               Arrays.asList("1000:1000", "2000:2000", "3000:3000"), Arrays.asList("2000:2000"));
83
84     static L3VpnComposite VPN_2 =
85         build("50525a08-3c2d-4d2a-8826-000000000002", "200:200", 200,
86               Arrays.asList("1000:1000", "2000:2000", "3000:3000"), Arrays.asList("2000:2000", "3000:3000"));
87
88     static L3VpnComposite VPN_3 =
89         build("50525a08-3c2d-4d2a-8826-000000000003", "300:300", 300,
90               Arrays.asList("2000:2000"), Arrays.asList("2000:2000", "3000:3000"));
91
92     static L3VpnComposite VPN_4 =
93         build("50525a08-3c2d-4d2a-8826-000000000004", "400:400", 400, new ArrayList<String>(), new ArrayList<String>());
94
95     static L3VpnComposite VPN_5 =
96         build("50525a08-3c2d-4d2a-8826-000000000005", "500:500", 500, // has same iRTs as VPN_1 and VPN2
97               Arrays.asList("1000:1000", "2000:2000", "3000:3000"), Arrays.asList("2000:2000"));
98
99     static L3VpnComposite VPN_6 =
100         build("50525a08-3c2d-4d2a-8826-000000000006", "600:600", 600,  // has same iRTs as VPN_1 and VPN_2
101               Arrays.asList("1000:1000", "2000:2000", "3000:3000"), Arrays.asList("2000:2000", "6000:6000"));
102
103     static List<L3VpnComposite> ALL_VPNS = Arrays.asList(VPN_1, VPN_2, VPN_3, VPN_4, VPN_5, VPN_6);
104
105 }