2 * Copyright (c) 2017 AT&T Intellectual Property. 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.protocol.bgp.cli.utils;
10 import static org.junit.Assert.assertEquals;
11 import static org.opendaylight.protocol.bgp.cli.utils.PeerGroupStateCliUtilsTest.UTF8;
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.rev171207.BgpNeighborStateAugmentation;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev171207.BgpNeighborStateAugmentationBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev171207.NeighborAfiSafiStateAugmentation;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev171207.NeighborAfiSafiStateAugmentationBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev171207.NeighborStateAugmentation;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev171207.NeighborStateAugmentationBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev171207.NeighborTimersStateAugmentation;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev171207.NeighborTimersStateAugmentationBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev171207.NeighborTransportStateAugmentation;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev171207.NeighborTransportStateAugmentationBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev171207.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.rev171207.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.rev171207.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.rev171207.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.rev171207.network.instances.network.instance.protocols.protocol.bgp.neighbors.neighbor.state.messages.SentBuilder;
55 public class NeighborStateCliUtilsTest {
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);
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();
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();
73 return new NeighborBuilder()
74 .setNeighborAddress(NEIGHBOR_IP_ADDRESS)
75 .setState(new StateBuilder().build())
76 .setAfiSafis(new AfiSafisBuilder().setAfiSafi(Collections.singletonList(afiSafi)).build())
81 public void testNeighborStateWO_StateCli() {
82 NeighborStateCliUtils.displayNeighborOperationalState(NEIGHBOR_ADDRESS,
83 new NeighborBuilder().build(), this.stream);
84 assertEquals(NO_SESSION_FOUND, this.output.toString());
88 public void testEmptyNeighborStateCli() throws IOException {
89 final Neighbor neighbor = createBasicNeighbor();
90 NeighborStateCliUtils.displayNeighborOperationalState(NEIGHBOR_ADDRESS,
91 neighbor, this.stream);
93 final String expected = IOUtils.toString(
94 getClass().getClassLoader().getResourceAsStream("empty-neighbor.txt"), UTF8);
95 assertEquals(expected, this.output.toString());
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();
104 builder.addAugmentation(NeighborAfiSafiStateAugmentation.class, new NeighborAfiSafiStateAugmentationBuilder()
106 .setPrefixes(new PrefixesBuilder().setInstalled(1L).setReceived(1L).setSent(2L).build())
108 final AfiSafi afiSafi = new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class)
109 .setState(builder.build()).build();
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());
118 final Received received = new ReceivedBuilder()
119 .setNOTIFICATION(BigInteger.ONE)
120 .setUPDATE(BigInteger.TEN)
123 final Sent sent = new SentBuilder()
124 .setNOTIFICATION(BigInteger.TEN)
125 .setUPDATE(BigInteger.ONE)
128 stateBuilder.addAugmentation(BgpNeighborStateAugmentation.class,
129 new BgpNeighborStateAugmentationBuilder()
130 .setMessages(new MessagesBuilder()
131 .setReceived(received)
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))
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))
153 final Neighbor neighbor = new NeighborBuilder()
154 .setState(stateBuilder.build())
155 .setAfiSafis(new AfiSafisBuilder().setAfiSafi(Collections.singletonList(afiSafi)).build())
156 .setTransport(transport)
159 NeighborStateCliUtils.displayNeighborOperationalState(NEIGHBOR_ADDRESS,
160 neighbor, this.stream);
162 final String expected = IOUtils.toString(
163 getClass().getClassLoader().getResourceAsStream("neighbor.txt"), UTF8);
164 assertEquals(expected, this.output.toString());