2 * Copyright (c) 2017 Ericsson India Global Services Pvt Ltd. 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
8 package org.opendaylight.netvirt.vpnmanager.intervpnlink;
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;
29 * Gathers a collections of 'fake' L3VPN objects that can be used in JUnits.
31 public final class L3VpnTestCatalog {
33 static class L3VpnComposite {
34 VpnInstance vpnCfgData;
35 VpnInstanceOpDataEntry vpnOpData;
37 L3VpnComposite(VpnInstance vpnInst, VpnInstanceOpDataEntry vpnOpData) {
38 this.vpnCfgData = vpnInst;
39 this.vpnOpData = vpnOpData;
43 private L3VpnTestCatalog() { }
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();
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());
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();
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);
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"));
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"));
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"));
90 static L3VpnComposite VPN_4 =
91 build("50525a08-3c2d-4d2a-8826-000000000004", "400:400", 400, new ArrayList<String>(), new ArrayList<String>());
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"));
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"));
101 static List<L3VpnComposite> ALL_VPNS = Arrays.asList(VPN_1, VPN_2, VPN_3, VPN_4, VPN_5, VPN_6);