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