e13ce2e84783a134f7d776e792f1b51a7b107d5c
[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     static VpnTargets makeVpnTargets(List<String> irts, List<String> erts) {
46         List<String> commonRT = new ArrayList<>(irts);
47         commonRT.retainAll(erts);
48         List<String> pureIrts = new ArrayList<>(irts);
49         pureIrts.removeAll(commonRT);
50         List<String> pureErts = new ArrayList<>(erts);
51         pureErts.removeAll(commonRT);
52         List<VpnTarget> vpnTargetList = new ArrayList<>();
53         vpnTargetList.addAll(makeVpnTargetsByType(commonRT, VpnTarget.VrfRTType.Both));
54         vpnTargetList.addAll(makeVpnTargetsByType(pureIrts, VpnTarget.VrfRTType.ImportExtcommunity));
55         vpnTargetList.addAll(makeVpnTargetsByType(pureErts, VpnTarget.VrfRTType.ExportExtcommunity));
56         return new VpnTargetsBuilder().setVpnTarget(vpnTargetList).build();
57     }
58
59     static List<VpnTarget> makeVpnTargetsByType(List<String> rtList, VpnTarget.VrfRTType type) {
60         return rtList.stream()
61                      .map(rt -> new VpnTargetBuilder().setKey(new VpnTargetKey(rt))
62                                                  .setVrfRTValue(rt).setVrfRTType(type).build())
63                      .collect(Collectors.toList());
64     }
65
66     static L3VpnComposite build(String vpnName, String vpnRd, long vpnTag, List<String> irts, List<String> erts) {
67         Objects.nonNull(irts);
68         Objects.nonNull(erts);
69         Ipv4Family vpnIpv4Cfg = new Ipv4FamilyBuilder().setVpnTargets(makeVpnTargets(irts, erts)).build();
70         VpnInstance vpnInst =
71             new VpnInstanceBuilder().setVpnInstanceName(vpnName).setIpv4Family(vpnIpv4Cfg).build();
72         VpnInstanceOpDataEntry vpnOpData =
73             new VpnInstanceOpDataEntryBuilder().setVpnId(vpnTag).setVpnInstanceName(vpnName).setVrfId(vpnRd)
74                                                .setVpnTargets(VpnOperDsUtils.makeVpnTargets(irts, erts)).build();
75         return new L3VpnComposite(vpnInst, vpnOpData);
76     }
77
78     static L3VpnComposite VPN_1 =
79         build("50525a08-3c2d-4d2a-8826-000000000001", "100:100", 100,
80               Arrays.asList("1000:1000", "2000:2000", "3000:3000"), Arrays.asList("2000:2000"));
81
82     static L3VpnComposite VPN_2 =
83         build("50525a08-3c2d-4d2a-8826-000000000002", "200:200", 200,
84               Arrays.asList("1000:1000", "2000:2000", "3000:3000"), Arrays.asList("2000:2000", "3000:3000"));
85
86     static L3VpnComposite VPN_3 =
87         build("50525a08-3c2d-4d2a-8826-000000000003", "300:300", 300,
88               Arrays.asList("2000:2000"), Arrays.asList("2000:2000", "3000:3000"));
89
90     static L3VpnComposite VPN_4 =
91         build("50525a08-3c2d-4d2a-8826-000000000004", "400:400", 400, new ArrayList<String>(), new ArrayList<String>());
92
93     static L3VpnComposite VPN_5 =
94         build("50525a08-3c2d-4d2a-8826-000000000005", "500:500", 500, // has same iRTs as VPN_1 and VPN2
95               Arrays.asList("1000:1000", "2000:2000", "3000:3000"), Arrays.asList("2000:2000"));
96
97     static L3VpnComposite VPN_6 =
98         build("50525a08-3c2d-4d2a-8826-000000000006", "600:600", 600,  // has same iRTs as VPN_1 and VPN_2
99               Arrays.asList("1000:1000", "2000:2000", "3000:3000"), Arrays.asList("2000:2000", "6000:6000"));
100
101     static List<L3VpnComposite> ALL_VPNS = Arrays.asList(VPN_1, VPN_2, VPN_3, VPN_4, VPN_5, VPN_6);
102
103 }