Provide the SPCE module
[alto.git] / alto-provider / src / test / java / org / opendaylight / alto / provider / AltoProviderTest.java
1 /*
2  * Copyright (c) 2015 Yale University 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.alto.provider;
10
11 import java.util.ArrayList;
12 import java.util.List;
13
14 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
16 //import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddressBuilder;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.address.tracker.rev140617.address.node.connector.Addresses;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.address.tracker.rev140617.address.node.connector.AddressesBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.endpoint.cost.service.output.endpoint.cost.service.EndpointCostMap;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.endpoint.cost.service.output.endpoint.cost.service.EndpointCostMapBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.endpoint.cost.service.output.endpoint.cost.service.endpoint.cost.map.DstCosts;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.endpoint.cost.service.output.endpoint.cost.service.endpoint.cost.map.DstCostsBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.costdefault.rev150507.DstCosts1;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.costdefault.rev150507.DstCosts1Builder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.types.rev150404.TypedEndpointAddress;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.types.rev150404.TypedIpv4Address;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.host.tracker.rev140624.HostNode;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.host.tracker.rev140624.HostNodeBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.host.tracker.rev140624.host.AttachmentPoints;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.host.tracker.rev140624.host.AttachmentPointsBuilder;
33 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.LinkId;
34 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
35 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
36 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;
37 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.link.attributes.Destination;
38 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.link.attributes.DestinationBuilder;
39 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.link.attributes.Source;
40 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.link.attributes.SourceBuilder;
41 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
42 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyBuilder;
43 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Link;
44 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.LinkBuilder;
45 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
46 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
47 import org.junit.Assert;
48 import org.junit.Before;
49 import org.junit.Test;
50
51 import static org.mockito.Mockito.mock;
52
53 public class AltoProviderTest {
54
55   private AltoProvider altoProvider;
56   private Addresses addrs;
57   private DataBroker dataBroker;
58   private IpAddress ipAddress;
59   private MacAddress mac;
60
61
62   @Before
63   public void init(){
64     dataBroker = mock(DataBroker.class);
65     altoProvider = new AltoProvider();
66   }
67
68   @Test
69   public void onProcessTopology() throws Exception {
70       IpAddress ipAddress1 = new IpAddress(new Ipv4Address("10.0.0.1"));
71       MacAddress mac1 = new MacAddress("00:00:00:00:00:01");
72       Addresses addrs1 = new AddressesBuilder().setIp(ipAddress1).setMac(mac1).build();
73       List<Addresses> addrsList1 = new ArrayList<Addresses>();
74       addrsList1.add(addrs1);
75
76       AttachmentPoints ap1 = new AttachmentPointsBuilder().setTpId(new TpId("openflow:1:1")).build();
77       List<AttachmentPoints> apList1 = new ArrayList<AttachmentPoints>();
78       apList1.add(ap1);
79       HostNode hostNode1 = new HostNodeBuilder().setAddresses(addrsList1).setAttachmentPoints(apList1).build();
80
81       IpAddress ipAddress2 = new IpAddress(new Ipv4Address("10.0.0.2"));
82       MacAddress mac2 = new MacAddress("00:00:00:00:00:02");
83       Addresses addrs2 = new AddressesBuilder().setIp(ipAddress2).setMac(mac2).build();
84       List<Addresses> addrsList2 = new ArrayList<Addresses>();
85       addrsList2.add(addrs2);
86
87       AttachmentPoints ap2 = new AttachmentPointsBuilder().setTpId(new TpId("openflow:2:1")).build();
88       List<AttachmentPoints> apList2 = new ArrayList<AttachmentPoints>();
89       apList2.add(ap2);
90       HostNode hostNode2 = new HostNodeBuilder().setAddresses(addrsList2).setAttachmentPoints(apList2).build();
91
92
93       Node node1 = new NodeBuilder().addAugmentation(HostNode.class, hostNode1).build();
94       Node node2 = new NodeBuilder().addAugmentation(HostNode.class, hostNode2).build();
95
96       Node sw1 = new NodeBuilder().setNodeId(new NodeId("openflow:1")).build();
97       Node sw2 = new NodeBuilder().setNodeId(new NodeId("openflow:2")).build();
98       Node sw3 = new NodeBuilder().setNodeId(new NodeId("openflow:3")).build();
99
100       Destination SW1_2 = new DestinationBuilder().setDestNode(new NodeId("openflow:1"))
101               .setDestTp(new TpId("openflow:1:2")).build();
102       Source SW3_1 = new SourceBuilder().setSourceNode(new NodeId("openflow:3"))
103               .setSourceTp(new TpId("openflow:3:1")).build();
104       Link l1 = new LinkBuilder().setLinkId(new LinkId("link1"))
105               .setDestination(SW1_2)
106               .setSource(SW3_1).build();
107
108       Destination SW1_3 = new DestinationBuilder().setDestNode(new NodeId("openflow:1"))
109               .setDestTp(new TpId("openflow:1:3")).build();
110       Source SW2_2 = new SourceBuilder().setSourceNode(new NodeId("openflow:2"))
111               .setSourceTp(new TpId("openflow:2:2")).build();
112       Link l2 = new LinkBuilder().setLinkId(new LinkId("link2"))
113               .setDestination(SW1_3)
114               .setSource(SW2_2).build();
115
116       Destination SW3_2 = new DestinationBuilder().setDestNode(new NodeId("openflow:3"))
117               .setDestTp(new TpId("openflow:3:2")).build();
118       Source SW2_3 = new SourceBuilder().setSourceNode(new NodeId("openflow:2"))
119               .setSourceTp(new TpId("openflow:2:3")).build();
120       Link l3 = new LinkBuilder().setLinkId(new LinkId("link3"))
121               .setDestination(SW3_2)
122               .setSource(SW2_3).build();
123
124       List<Node> nodeList = new ArrayList<Node>();
125       nodeList.add(node1);
126       nodeList.add(node2);
127       nodeList.add(sw1);
128       nodeList.add(sw2);
129       nodeList.add(sw3);
130
131       List<Link> linkList = new ArrayList<Link>();
132       linkList.add(l1);
133       linkList.add(l2);
134       linkList.add(l3);
135
136       Topology topology = new TopologyBuilder().setTopologyId(new TopologyId("flow:1"))
137               .setLink(linkList)
138               .setNode(nodeList).build();
139
140       altoProvider.processTopology(topology);
141
142       TypedIpv4Address ipv4_1 = new TypedIpv4Address("ipv4:10.0.0.1");
143       TypedEndpointAddress tea1 = new TypedEndpointAddress(ipv4_1);
144
145       List<TypedEndpointAddress> teaList1 = new ArrayList<TypedEndpointAddress>();
146       teaList1.add(tea1);
147
148       TypedIpv4Address ipv4_2 = new TypedIpv4Address("ipv4:10.0.0.2");
149       TypedEndpointAddress tea2 = new TypedEndpointAddress(ipv4_2);
150
151       List<TypedEndpointAddress> teaList2 = new ArrayList<TypedEndpointAddress>();
152       teaList2.add(tea2);
153
154       DstCosts1 dc1 = new DstCosts1Builder().setCostDefault("1").build();
155       DstCosts dc = new DstCostsBuilder().setDst(tea2).addAugmentation(DstCosts1.class, dc1).build();
156
157       List<DstCosts> dcList = new ArrayList<DstCosts>();
158       dcList.add(dc);
159
160       EndpointCostMap ecp = new EndpointCostMapBuilder().setSrc(tea1).setDstCosts(dcList).build();
161       List<EndpointCostMap> ecpList = new ArrayList<EndpointCostMap>();
162       ecpList.add(ecp);
163
164       Assert.assertEquals(altoProvider.hopcountNumerical(teaList1, teaList2), ecpList);
165   }
166
167 }