2 * Copyright (c) 2016 Cisco Systems, Inc. and others. 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
9 package org.opendaylight.protocol.bgp.state;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNull;
13 import static org.mockito.Matchers.eq;
14 import static org.mockito.Mockito.doReturn;
15 import static org.opendaylight.protocol.bgp.state.StateProviderImplTest.TABLES_KEY;
17 import java.lang.reflect.Constructor;
18 import java.lang.reflect.InvocationTargetException;
19 import java.util.Collections;
20 import java.util.Optional;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.mockito.Mock;
24 import org.mockito.Mockito;
25 import org.mockito.MockitoAnnotations;
26 import org.mockito.invocation.InvocationOnMock;
27 import org.mockito.stubbing.Answer;
28 import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer;
29 import org.opendaylight.protocol.bgp.rib.spi.State;
30 import org.opendaylight.protocol.bgp.rib.spi.state.BGPAfiSafiState;
31 import org.opendaylight.protocol.bgp.rib.spi.state.BGPSessionState;
32 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi;
33 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiBuilder;
34 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.afi.safi.GracefulRestart;
35 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.afi.safi.GracefulRestartBuilder;
36 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.afi.safi.graceful.restart.StateBuilder;
37 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.operational.rev151009.BgpNeighborState.SessionState;
38 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.AfiSafiType;
39 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV4UNICAST;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.NeighborAfiSafiGracefulRestartStateAugmentation;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.NeighborAfiSafiGracefulRestartStateAugmentationBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.NeighborAfiSafiStateAugmentation;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.NeighborAfiSafiStateAugmentationBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.NeighborStateAugmentationBuilder;
46 public class NeighborUtilTest {
48 private BGPSessionState sessionState;
50 private BGPTableTypeRegistryConsumer tableRegistry;
52 private BGPAfiSafiState bgpAfiSafiState;
53 private State state = State.IDLE;
54 private Optional<Class<? extends AfiSafiType>> afiSafi = Optional.empty();
57 public void setUp() throws Exception {
58 MockitoAnnotations.initMocks(this);
59 doReturn(false).when(this.sessionState).isRouterRefreshCapabilitySupported();
60 doReturn(false).when(this.sessionState).isMultiProtocolCapabilitySupported();
61 doReturn(false).when(this.sessionState).isGracefulRestartCapabilitySupported();
62 doReturn(false).when(this.sessionState).isAsn32CapabilitySupported();
63 doReturn(false).when(this.sessionState).isAddPathCapabilitySupported();
64 doReturn(this.state).when(this.sessionState).getSessionState();
65 Mockito.doAnswer(invocation -> NeighborUtilTest.this.state).when(this.sessionState).getSessionState();
66 doReturn(Collections.singleton(TABLES_KEY)).when(this.bgpAfiSafiState).getAfiSafisAdvertized();
67 doReturn(Collections.singleton(TABLES_KEY)).when(this.bgpAfiSafiState).getAfiSafisReceived();
68 Mockito.doAnswer(invocation -> NeighborUtilTest.this.afiSafi).when(this.tableRegistry).getAfiSafiType(eq(TABLES_KEY));
69 doReturn(false).when(this.bgpAfiSafiState).isAfiSafiSupported(eq(TABLES_KEY));
70 doReturn(false).when(this.bgpAfiSafiState).isGracefulRestartAdvertized(eq(TABLES_KEY));
71 doReturn(false).when(this.bgpAfiSafiState).isGracefulRestartReceived(eq(TABLES_KEY));
76 @Test(expected = UnsupportedOperationException.class)
77 public void testNeighborUtilPrivateConstructor() throws Throwable {
78 final Constructor<NeighborUtil> c = NeighborUtil.class.getDeclaredConstructor();
79 c.setAccessible(true);
82 } catch (final InvocationTargetException e) {
88 public void testBuildCapabilityState() {
89 final NeighborStateAugmentationBuilder expected = new NeighborStateAugmentationBuilder()
90 .setSupportedCapabilities(Collections.emptyList())
91 .setSessionState(SessionState.IDLE);
92 assertEquals(expected.build(), NeighborUtil.buildCapabilityState(this.sessionState));
94 this.state = State.OPEN_CONFIRM;
95 expected.setSessionState(SessionState.OPENCONFIRM);
96 assertEquals(expected.build(), NeighborUtil.buildCapabilityState(this.sessionState));
100 public void testBuildTimer() {
101 assertNull(NeighborUtil.buildTimer(null));
105 public void testBuildTransport() {
106 assertNull(NeighborUtil.buildTransport(null));
110 public void testBuildNeighborStatet() {
111 assertNull(NeighborUtil.buildNeighborState(null, null));
115 public void buildAfisSafisState() {
116 assertEquals(Collections.emptyList(),
117 NeighborUtil.buildAfisSafisState(this.bgpAfiSafiState, this.tableRegistry));
119 final GracefulRestart graceful = new GracefulRestartBuilder()
120 .setState(new StateBuilder().addAugmentation(NeighborAfiSafiGracefulRestartStateAugmentation.class,
121 new NeighborAfiSafiGracefulRestartStateAugmentationBuilder().setAdvertised(false)
122 .setReceived(false).build()).build()).build();
124 final org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi
125 .list.afi.safi.State afiSafiState = new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.
126 multiprotocol.rev151009.bgp.common.afi.safi.list.afi.safi.StateBuilder()
127 .addAugmentation(NeighborAfiSafiStateAugmentation.class, new NeighborAfiSafiStateAugmentationBuilder()
128 .setActive(false).build()).build();
130 this.afiSafi = Optional.of(IPV4UNICAST.class);
131 final AfiSafi expected = new AfiSafiBuilder().setAfiSafiName(this.afiSafi.get())
132 .setState(afiSafiState)
133 .setGracefulRestart(graceful).build();
134 assertEquals(Collections.singletonList(expected),
135 NeighborUtil.buildAfisSafisState(this.bgpAfiSafiState, this.tableRegistry));