package org.opendaylight.protocol.bgp.state;
+import com.google.common.primitives.UnsignedInteger;
import com.google.common.primitives.UnsignedLong;
import java.math.BigDecimal;
import java.math.BigInteger;
* Util for create OpenConfig Neighbor with corresponding openConfig state.
*/
public final class NeighborUtil {
+ private static final long TIMETICK_ROLLOVER_VALUE = (UnsignedInteger.MAX_VALUE.longValue() + 1);
+
private NeighborUtil() {
throw new UnsupportedOperationException();
}
if (neighbor == null) {
return null;
}
+ // convert neighbor uptime which is in milliseconds to time-ticks which is
+ // hundredth of a second, and handle roll-over scenario
+ final long uptimeTicks = ((neighbor.getUpTime() / 10) % TIMETICK_ROLLOVER_VALUE);
final NeighborTimersStateAugmentation timerState = new NeighborTimersStateAugmentationBuilder()
.setNegotiatedHoldTime(BigDecimal.valueOf(neighbor.getNegotiatedHoldTime()))
- .setUptime(new Timeticks(neighbor.getUpTime())).build();
+ .setUptime(new Timeticks(uptimeTicks)).build();
return new TimersBuilder().setState(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp
.neighbor.group.timers.StateBuilder()
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
import static org.opendaylight.protocol.bgp.state.StateProviderImplTest.TABLES_KEY;
+import java.math.BigDecimal;
import java.util.Collections;
import java.util.Optional;
import org.junit.Before;
import org.opendaylight.protocol.bgp.rib.spi.State;
import org.opendaylight.protocol.bgp.rib.spi.state.BGPAfiSafiState;
import org.opendaylight.protocol.bgp.rib.spi.state.BGPSessionState;
+import org.opendaylight.protocol.bgp.rib.spi.state.BGPTimersState;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiBuilder;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.afi.safi.GracefulRestart;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.afi.safi.GracefulRestartBuilder;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.afi.safi.graceful.restart.StateBuilder;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.operational.rev151009.BgpNeighborState.SessionState;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Timers;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.TimersBuilder;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.AfiSafiType;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV4UNICAST;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Timeticks;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev171207.NeighborAfiSafiGracefulRestartStateAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev171207.NeighborAfiSafiGracefulRestartStateAugmentationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev171207.NeighborAfiSafiStateAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev171207.NeighborAfiSafiStateAugmentationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev171207.NeighborStateAugmentationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev171207.NeighborTimersStateAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev171207.NeighborTimersStateAugmentationBuilder;
public class NeighborUtilTest {
@Mock
doReturn(false).when(this.bgpAfiSafiState).isAfiSafiSupported(eq(TABLES_KEY));
doReturn(false).when(this.bgpAfiSafiState).isGracefulRestartAdvertized(eq(TABLES_KEY));
doReturn(false).when(this.bgpAfiSafiState).isGracefulRestartReceived(eq(TABLES_KEY));
-
-
}
@Test
}
@Test
- public void testBuildTimer() {
+ public void testBuildTimerNullValue() {
assertNull(NeighborUtil.buildTimer(null));
}
+ @Test
+ public void testBuildTimerNormalValue() {
+ final BGPTimersState timerState = mock(BGPTimersState.class);
+ doReturn(90L).when(timerState).getNegotiatedHoldTime();
+ doReturn(5000L).when(timerState).getUpTime();
+
+ final NeighborTimersStateAugmentation timerStateAug = new NeighborTimersStateAugmentationBuilder()
+ .setNegotiatedHoldTime(BigDecimal.valueOf(90L)).setUptime(new Timeticks(500L)).build();
+ final Timers expectedTimers = new TimersBuilder().setState(
+ new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.timers
+ .StateBuilder().addAugmentation(NeighborTimersStateAugmentation.class, timerStateAug).build())
+ .build();
+ assertEquals(expectedTimers, NeighborUtil.buildTimer(timerState));
+ }
+
+ @Test
+ public void testBuildTimerRollOverValue() {
+ final BGPTimersState timerState = mock(BGPTimersState.class);
+ doReturn(90L).when(timerState).getNegotiatedHoldTime();
+ doReturn(42949673015L).when(timerState).getUpTime();
+
+ final NeighborTimersStateAugmentation timerStateAug = new NeighborTimersStateAugmentationBuilder()
+ .setNegotiatedHoldTime(BigDecimal.valueOf(90L)).setUptime(new Timeticks(5L)).build();
+ final Timers expectedTimers = new TimersBuilder().setState(
+ new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.timers
+ .StateBuilder().addAugmentation(NeighborTimersStateAugmentation.class, timerStateAug).build())
+ .build();
+ assertEquals(expectedTimers, NeighborUtil.buildTimer(timerState));
+ }
+
@Test
public void testBuildTransport() {
assertNull(NeighborUtil.buildTransport(null));
}
@Test
- public void testBuildNeighborStatet() {
+ public void testBuildNeighborState() {
assertNull(NeighborUtil.buildNeighborState(null, null));
}
assertEquals(Collections.singletonList(expected),
NeighborUtil.buildAfisSafisState(this.bgpAfiSafiState, this.tableRegistry));
}
-}
\ No newline at end of file
+}