Provide Add Path support for all AFI/SAFI
[bgpcep.git] / bgp / cli / src / test / java / org / opendaylight / protocol / bgp / cli / utils / NeighborStateCliUtilsTest.java
1 /*
2  * Copyright (c) 2017 AT&T Intellectual Property. 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.protocol.bgp.cli.utils;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.opendaylight.protocol.bgp.cli.utils.PeerGroupStateCliUtilsTest.UTF8;
12
13 import java.io.ByteArrayOutputStream;
14 import java.io.IOException;
15 import java.io.PrintStream;
16 import java.math.BigDecimal;
17 import java.math.BigInteger;
18 import java.util.Collections;
19 import org.apache.commons.io.IOUtils;
20 import org.junit.Test;
21 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi;
22 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiBuilder;
23 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.operational.rev151009.BgpNeighborState;
24 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.operational.rev151009.bgp.neighbor.prefix.counters_state.PrefixesBuilder;
25 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.AfiSafisBuilder;
26 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.StateBuilder;
27 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Timers;
28 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.TimersBuilder;
29 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Transport;
30 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.TransportBuilder;
31 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
32 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborBuilder;
33 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.ADDPATHS;
34 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV4UNICAST;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Timeticks;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.BgpNeighborStateAugmentation;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.BgpNeighborStateAugmentationBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborAfiSafiStateAugmentation;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborAfiSafiStateAugmentationBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborStateAugmentation;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborStateAugmentationBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborTimersStateAugmentation;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborTimersStateAugmentationBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborTransportStateAugmentation;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborTransportStateAugmentationBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instances.network.instance.protocols.protocol.bgp.neighbors.neighbor.state.MessagesBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instances.network.instance.protocols.protocol.bgp.neighbors.neighbor.state.messages.Received;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instances.network.instance.protocols.protocol.bgp.neighbors.neighbor.state.messages.ReceivedBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instances.network.instance.protocols.protocol.bgp.neighbors.neighbor.state.messages.Sent;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instances.network.instance.protocols.protocol.bgp.neighbors.neighbor.state.messages.SentBuilder;
54
55 public class NeighborStateCliUtilsTest {
56
57     static final String NEIGHBOR_ADDRESS = "127.0.0.2";
58     private static final IpAddress NEIGHBOR_IP_ADDRESS = new IpAddress(new Ipv4Address(NEIGHBOR_ADDRESS));
59     private static final String  NO_SESSION_FOUND = "No BgpSessionState found for [" + NEIGHBOR_ADDRESS + "]\n";
60     private final ByteArrayOutputStream output = new ByteArrayOutputStream();
61     private final PrintStream stream = new PrintStream(this.output);
62
63     static Neighbor createBasicNeighbor() {
64         final org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi
65                 .list.afi.safi.StateBuilder builder = new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp
66                 .multiprotocol.rev151009.bgp.common.afi.safi.list.afi.safi.StateBuilder();
67
68         builder.addAugmentation(NeighborAfiSafiStateAugmentation.class, new NeighborAfiSafiStateAugmentationBuilder()
69                 .setActive(false).build());
70         final AfiSafi afiSafi = new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class)
71                 .setState(builder.build()).build();
72
73         return new NeighborBuilder()
74                 .setNeighborAddress(NEIGHBOR_IP_ADDRESS)
75                 .setState(new StateBuilder().build())
76                 .setAfiSafis(new AfiSafisBuilder().setAfiSafi(Collections.singletonList(afiSafi)).build())
77                 .build();
78     }
79
80     @Test
81     public void testNeighborStateWO_StateCli() {
82         NeighborStateCliUtils.displayNeighborOperationalState(NEIGHBOR_ADDRESS,
83                 new NeighborBuilder().build(), this.stream);
84         assertEquals(NO_SESSION_FOUND, this.output.toString());
85     }
86
87     @Test
88     public void testEmptyNeighborStateCli() throws IOException {
89         final Neighbor neighbor = createBasicNeighbor();
90         NeighborStateCliUtils.displayNeighborOperationalState(NEIGHBOR_ADDRESS,
91                 neighbor, this.stream);
92
93         final String expected = IOUtils.toString(
94                 getClass().getClassLoader().getResourceAsStream("empty-neighbor.txt"), UTF8);
95         assertEquals(expected, this.output.toString());
96     }
97
98     @Test
99     public void testFullNeighborStateCli() throws IOException {
100         final org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi
101                 .list.afi.safi.StateBuilder builder = new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp
102                 .multiprotocol.rev151009.bgp.common.afi.safi.list.afi.safi.StateBuilder();
103
104         builder.addAugmentation(NeighborAfiSafiStateAugmentation.class, new NeighborAfiSafiStateAugmentationBuilder()
105                 .setActive(true)
106                 .setPrefixes(new PrefixesBuilder().setInstalled(1L).setReceived(1L).setSent(2L).build())
107                 .build());
108         final AfiSafi afiSafi = new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class)
109                 .setState(builder.build()).build();
110
111
112         final StateBuilder stateBuilder = new StateBuilder();
113         stateBuilder.addAugmentation(NeighborStateAugmentation.class,
114                 new NeighborStateAugmentationBuilder()
115                         .setSupportedCapabilities(Collections.singletonList(ADDPATHS.class))
116                         .setSessionState(BgpNeighborState.SessionState.ACTIVE).build());
117
118         final Received received = new ReceivedBuilder()
119                 .setNOTIFICATION(BigInteger.ONE)
120                 .setUPDATE(BigInteger.TEN)
121                 .build();
122
123         final Sent sent = new SentBuilder()
124                 .setNOTIFICATION(BigInteger.TEN)
125                 .setUPDATE(BigInteger.ONE)
126                 .build();
127
128         stateBuilder.addAugmentation(BgpNeighborStateAugmentation.class,
129                 new BgpNeighborStateAugmentationBuilder()
130                         .setMessages(new MessagesBuilder()
131                                 .setReceived(received)
132                                 .setSent(sent)
133                                 .build())
134                         .build());
135
136         final Transport transport = new TransportBuilder().setState(new org.opendaylight.yang.gen.v1.http.openconfig.net
137                 .yang.bgp.rev151009.bgp.neighbor.group.transport.StateBuilder()
138                 .addAugmentation(NeighborTransportStateAugmentation.class,
139                         new NeighborTransportStateAugmentationBuilder()
140                                 .setRemoteAddress(NEIGHBOR_IP_ADDRESS)
141                                 .setLocalPort(new PortNumber(1234))
142                                 .setRemotePort(new PortNumber(4321))
143                                 .build())
144                 .build()).build();
145         final Timers timers = new TimersBuilder().setState(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang
146                 .bgp.rev151009.bgp.neighbor.group.timers.StateBuilder()
147                 .addAugmentation(NeighborTimersStateAugmentation.class,
148                         new NeighborTimersStateAugmentationBuilder()
149                                 .setNegotiatedHoldTime(BigDecimal.TEN)
150                                 .setUptime(new Timeticks(600L))
151                                 .build())
152                 .build()).build();
153         final Neighbor neighbor = new NeighborBuilder()
154                 .setState(stateBuilder.build())
155                 .setAfiSafis(new AfiSafisBuilder().setAfiSafi(Collections.singletonList(afiSafi)).build())
156                 .setTransport(transport)
157                 .setTimers(timers)
158                 .build();
159         NeighborStateCliUtils.displayNeighborOperationalState(NEIGHBOR_ADDRESS,
160                 neighbor, this.stream);
161
162         final String expected = IOUtils.toString(
163                 getClass().getClassLoader().getResourceAsStream("neighbor.txt"), UTF8);
164         assertEquals(expected, this.output.toString());
165     }
166 }