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;
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;
57 public class NeighborStateCliUtilsTest {
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);
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();
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();
75 return new NeighborBuilder()
76 .setNeighborAddress(NEIGHBOR_IP_ADDRESS)
77 .setState(new StateBuilder().build())
78 .setAfiSafis(new AfiSafisBuilder().setAfiSafi(Collections.singletonList(afiSafi)).build())
83 public void testNeighborStateWO_StateCli() {
84 NeighborStateCliUtils.displayNeighborOperationalState(NEIGHBOR_ADDRESS,
85 new NeighborBuilder().build(), this.stream);
86 assertEquals(NO_SESSION_FOUND, this.output.toString());
90 public void testEmptyNeighborStateCli() throws IOException {
91 final Neighbor neighbor = createBasicNeighbor();
92 NeighborStateCliUtils.displayNeighborOperationalState(NEIGHBOR_ADDRESS,
93 neighbor, this.stream);
95 final String expected = Resources.toString(getClass().getClassLoader().getResource("empty-neighbor.txt"),
96 StandardCharsets.UTF_8);
97 assertEquals(expected, this.output.toString());
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();
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.TWO).build())
113 final AfiSafi afiSafi = new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class)
114 .setState(builder.build()).build();
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());
123 final Received received = new ReceivedBuilder()
124 .setNOTIFICATION(Uint64.ONE)
125 .setUPDATE(Uint64.TEN)
128 final Sent sent = new SentBuilder()
129 .setNOTIFICATION(Uint64.TEN)
130 .setUPDATE(Uint64.ONE)
133 stateBuilder.addAugmentation(BgpNeighborStateAugmentation.class,
134 new BgpNeighborStateAugmentationBuilder()
135 .setMessages(new MessagesBuilder()
136 .setReceived(received)
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)))
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)))
158 final Neighbor neighbor = new NeighborBuilder()
159 .setState(stateBuilder.build())
160 .setAfiSafis(new AfiSafisBuilder().setAfiSafi(Collections.singletonList(afiSafi)).build())
161 .setTransport(transport)
164 NeighborStateCliUtils.displayNeighborOperationalState(NEIGHBOR_ADDRESS,
165 neighbor, this.stream);
167 final String expected = Resources.toString(getClass().getClassLoader().getResource("neighbor.txt"),
168 StandardCharsets.UTF_8);
169 assertEquals(expected, this.output.toString());