Adding unit tests for vpp-renderer
[groupbasedpolicy.git] / renderers / vpp / src / test / java / org / opendaylight / groupbasedpolicy / renderer / vpp / DtoFactory.java
1 package org.opendaylight.groupbasedpolicy.renderer.vpp;
2
3 import java.util.Arrays;
4 import java.util.List;
5 import java.util.stream.Collectors;
6 import java.util.stream.Stream;
7
8 import org.opendaylight.groupbasedpolicy.renderer.vpp.iface.VppPathMapper;
9 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.KeyFactory;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.NetworkContainment;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.NetworkContainmentBuilder;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.network.containment.containment.ForwardingContextContainmentBuilder;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.AbsoluteLocation;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.AbsoluteLocationBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.ExternalLocationCaseBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.L2FloodDomain;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.AddressType;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.ContextType;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.EndpointPolicyParticipation;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipation;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipationBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.Configuration;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.ConfigurationBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.Endpoints;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.EndpointsBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RendererEndpointsBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.RuleGroupsBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocation;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocationBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocationKey;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpoint;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpointBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpoint;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpointBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroup;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.rule.groups.RuleGroupBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.resolved.rules.ResolvedRuleBuilder;
43 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
44 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
45 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
46 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
47 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
48 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
49 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
50 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
51
52 import com.google.common.base.Strings;
53
54 public class DtoFactory {
55
56     public static final ContextId CTX_ID = new ContextId("ctx");
57     public static final ContextId L2FD_CTX = new ContextId("l2fd");
58     public static final ContractId CONTRACT_ID = new ContractId("contract");
59     public static final TenantId TENANT_ID = new TenantId("tenant");
60     public static final SubjectName SUBJECT_NAME = new SubjectName("subject");
61     public static final RuleName RULE_NAME = new RuleName("rule");
62     public static final RuleGroupWithRendererEndpointParticipation RULE_GROUP_WITH_CONSUMER =
63             new RuleGroupWithRendererEndpointParticipationBuilder().setContractId(CONTRACT_ID)
64                 .setTenantId(TENANT_ID)
65                 .setSubjectName(SUBJECT_NAME)
66                 .setRendererEndpointParticipation(EndpointPolicyParticipation.CONSUMER)
67                 .build();
68     public static final RuleGroupWithRendererEndpointParticipation RULE_GROUP_WITH_PROVIDER =
69             new RuleGroupWithRendererEndpointParticipationBuilder().setContractId(CONTRACT_ID)
70                 .setTenantId(TENANT_ID)
71                 .setSubjectName(SUBJECT_NAME)
72                 .setRendererEndpointParticipation(EndpointPolicyParticipation.PROVIDER)
73                 .build();
74     public static final RuleGroup RULE_GROUP = new RuleGroupBuilder().setContractId(CONTRACT_ID)
75         .setTenantId(TENANT_ID)
76         .setSubjectName(SUBJECT_NAME)
77         .setResolvedRule(Arrays.asList(new ResolvedRuleBuilder().setName(RULE_NAME).build()))
78         .build();
79     public final static TopologyKey TOPO_KEY = new TopologyKey(new TopologyId("topology-netconf"));
80     public final static InstanceIdentifier<Node> VPP_NODE_1_IID = InstanceIdentifier.builder(NetworkTopology.class)
81         .child(Topology.class, TOPO_KEY)
82         .child(Node.class, new NodeKey(new NodeId("node1")))
83         .build();
84     public final static InstanceIdentifier<Node> VPP_NODE_2_IID = InstanceIdentifier.builder(NetworkTopology.class)
85         .child(Topology.class, TOPO_KEY)
86         .child(Node.class, new NodeKey(new NodeId("node2")))
87         .build();
88
89     public static Configuration createConfiguration(List<AddressEndpointWithLocation> consumers,
90             List<AddressEndpointWithLocation> providers) {
91         List<AddressEndpointWithLocation> eps =
92                 Stream.concat(consumers.stream(), providers.stream()).collect(Collectors.toList());
93         Endpoints endpoints = new EndpointsBuilder().setAddressEndpointWithLocation(eps).build();
94         List<RendererEndpoint> consumersAsRendererEps = consumers.stream().map(cons -> {
95             List<PeerEndpoint> peers = providers.stream()
96                 .map(web -> new PeerEndpointBuilder().setKey(KeyFactory.peerEndpointKey(web.getKey()))
97                     .setRuleGroupWithRendererEndpointParticipation(Arrays.asList(RULE_GROUP_WITH_CONSUMER))
98                     .build())
99                 .collect(Collectors.toList());
100             return new RendererEndpointBuilder().setKey(KeyFactory.rendererEndpointKey(cons.getKey()))
101                 .setPeerEndpoint(peers)
102                 .build();
103         }).collect(Collectors.toList());
104         List<RendererEndpoint> providersAsRendererEps = providers.stream().map(prov -> {
105             List<PeerEndpoint> peers = consumers.stream()
106                 .map(client -> new PeerEndpointBuilder().setKey(KeyFactory.peerEndpointKey(client.getKey()))
107                     .setRuleGroupWithRendererEndpointParticipation(Arrays.asList(RULE_GROUP_WITH_PROVIDER))
108                     .build())
109                 .collect(Collectors.toList());
110             return new RendererEndpointBuilder().setKey(KeyFactory.rendererEndpointKey(prov.getKey()))
111                 .setPeerEndpoint(peers)
112                 .build();
113         }).collect(Collectors.toList());
114         List<RendererEndpoint> rendererEps = Stream
115             .concat(consumersAsRendererEps.stream(), providersAsRendererEps.stream()).collect(Collectors.toList());
116         return new ConfigurationBuilder().setEndpoints(endpoints)
117             .setRendererEndpoints(new RendererEndpointsBuilder().setRendererEndpoint(rendererEps).build())
118             .setRuleGroups(new RuleGroupsBuilder().setRuleGroup(Arrays.asList(RULE_GROUP)).build())
119             .build();
120     }
121
122     public static AddressEndpointWithLocation createEndpoint(String ip, String l2FdIdAsNetCont,
123             AbsoluteLocation absoluteLocation) {
124         AddressEndpointWithLocationKey key =
125                 new AddressEndpointWithLocationKey(ip, AddressType.class, CTX_ID, ContextType.class);
126         NetworkContainment networkContainment =
127                 new NetworkContainmentBuilder().setContainment(new ForwardingContextContainmentBuilder()
128                     .setContextType(L2FloodDomain.class).setContextId(new ContextId(l2FdIdAsNetCont)).build()).build();
129         return new AddressEndpointWithLocationBuilder().setKey(key)
130             .setNetworkContainment(networkContainment)
131             .setAbsoluteLocation(absoluteLocation)
132             .build();
133     }
134
135     public static AbsoluteLocation absoluteLocation(InstanceIdentifier<?> mountPoint, String nodeName,
136             String nodeConnectorName) {
137         ExternalLocationCaseBuilder extLocBuilder =
138                 new ExternalLocationCaseBuilder().setExternalNodeMountPoint(mountPoint);
139         if (!Strings.isNullOrEmpty(nodeName)) {
140             extLocBuilder.setExternalNode(VppPathMapper.bridgeDomainToRestPath(nodeName));
141         }
142         if (!Strings.isNullOrEmpty(nodeConnectorName)) {
143             extLocBuilder.setExternalNodeConnector(VppPathMapper.interfaceToRestPath(nodeConnectorName));
144         }
145         return new AbsoluteLocationBuilder().setLocationType(extLocBuilder.build()).build();
146     }
147 }