2 * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. 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
8 package org.opendaylight.genius.alivenessmonitor.protocols.test;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertThat;
13 import static org.junit.Assert.assertTrue;
14 import static org.mockito.Matchers.any;
15 import static org.mockito.Matchers.argThat;
16 import static org.mockito.Matchers.eq;
17 import static org.mockito.Mockito.doNothing;
18 import static org.mockito.Mockito.doReturn;
19 import static org.mockito.Mockito.times;
20 import static org.mockito.Mockito.verify;
21 import static org.mockito.Mockito.when;
23 import com.google.common.util.concurrent.FluentFuture;
24 import com.google.common.util.concurrent.Futures;
25 import java.util.Arrays;
26 import java.util.Optional;
27 import java.util.concurrent.ExecutionException;
28 import org.hamcrest.CoreMatchers;
29 import org.hamcrest.Description;
30 import org.hamcrest.Matcher;
31 import org.hamcrest.TypeSafeMatcher;
32 import org.junit.After;
33 import org.junit.Before;
34 import org.junit.Test;
35 import org.mockito.ArgumentCaptor;
36 import org.mockito.Captor;
37 import org.mockito.Matchers;
38 import org.mockito.Mock;
39 import org.mockito.MockitoAnnotations;
40 import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
41 import org.opendaylight.controller.md.sal.binding.api.NotificationService;
42 import org.opendaylight.genius.alivenessmonitor.internal.AlivenessMonitor;
43 import org.opendaylight.genius.alivenessmonitor.protocols.AlivenessProtocolHandler;
44 import org.opendaylight.genius.alivenessmonitor.protocols.AlivenessProtocolHandlerRegistry;
45 import org.opendaylight.genius.alivenessmonitor.protocols.impl.AlivenessProtocolHandlerRegistryImpl;
46 import org.opendaylight.genius.alivenessmonitor.protocols.internal.AlivenessProtocolHandlerARP;
47 import org.opendaylight.genius.alivenessmonitor.protocols.internal.AlivenessProtocolHandlerLLDP;
48 import org.opendaylight.mdsal.binding.api.DataBroker;
49 import org.opendaylight.mdsal.binding.api.ReadTransaction;
50 import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
51 import org.opendaylight.mdsal.binding.api.WriteTransaction;
52 import org.opendaylight.mdsal.common.api.CommitInfo;
53 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorPauseInput;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorPauseInputBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorProfileCreateInput;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorProfileCreateInputBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorProfileCreateOutput;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorProfileDeleteInput;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorProfileDeleteInputBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorProfileDeleteOutput;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorProtocolType;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorStartInput;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorStartInputBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorStartOutput;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorStatus;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorStopInput;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorStopInputBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorStopOutput;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorUnpauseInput;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorUnpauseInputBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorUnpauseOutput;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitoringMode;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411._interface.monitor.map.InterfaceMonitorEntry;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411._interface.monitor.map.InterfaceMonitorEntryBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.endpoint.endpoint.type.Interface;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.endpoint.endpoint.type.InterfaceBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.monitor.configs.MonitoringInfo;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.monitor.configs.MonitoringInfoBuilder;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.monitor.params.DestinationBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.monitor.params.SourceBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.monitor.profile.create.input.ProfileBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.monitor.profiles.MonitorProfile;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.monitor.profiles.MonitorProfileBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.monitor.start.input.ConfigBuilder;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.monitorid.key.map.MonitoridKeyEntry;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.monitorid.key.map.MonitoridKeyEntryBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.monitoring.states.MonitoringState;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.monitoring.states.MonitoringStateBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.arputil.rev160406.OdlArputilService;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdInput;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdOutputBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.CreateIdPoolInput;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.CreateIdPoolOutput;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.ReleaseIdInput;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.ReleaseIdOutput;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rpcs.rev160406.OdlInterfaceRpcService;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService;
101 import org.opendaylight.yangtools.util.concurrent.FluentFutures;
102 import org.opendaylight.yangtools.yang.binding.DataObject;
103 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
104 import org.opendaylight.yangtools.yang.common.RpcError;
105 import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
106 import org.opendaylight.yangtools.yang.common.RpcResult;
107 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
108 import org.opendaylight.yangtools.yang.common.Uint32;
110 public class AlivenessMonitorTest {
113 private DataBroker dataBroker;
115 private IdManagerService idManager;
117 private PacketProcessingService packetProcessingService;
119 private NotificationPublishService notificationPublishService;
121 private NotificationService notificationService;
123 private OdlInterfaceRpcService interfaceManager;
125 private OdlArputilService arpService;
126 private AlivenessMonitor alivenessMonitor;
127 private AlivenessProtocolHandler arpHandler;
128 private AlivenessProtocolHandler lldpHandler;
131 private ReadTransaction readTx;
133 private WriteTransaction writeTx;
135 private ReadWriteTransaction readWriteTx;
137 ArgumentCaptor<MonitoringState> stateCaptor;
139 private <T extends DataObject> Matcher<InstanceIdentifier<T>> isType(
140 final Class<T> klass) {
141 return new TypeSafeMatcher<InstanceIdentifier<T>>() {
143 public void describeTo(Description desc) {
145 "Instance Identifier should have Target Type " + klass);
149 protected boolean matchesSafely(InstanceIdentifier<T> id) {
150 return id.getTargetType().equals(klass);
155 private Matcher<RpcError> hasErrorType(final ErrorType errorType) {
156 return new TypeSafeMatcher<RpcError>() {
158 public void describeTo(Description desc) {
159 desc.appendText("Error type do not match " + errorType);
163 protected boolean matchesSafely(RpcError error) {
164 return error.getErrorType().equals(errorType);
169 @SuppressWarnings("unchecked")
171 public void setUp() {
172 MockitoAnnotations.initMocks(this);
173 when(idManager.createIdPool(any(CreateIdPoolInput.class)))
174 .thenReturn(Futures.immediateFuture(
175 RpcResultBuilder.<CreateIdPoolOutput>success().build()));
177 AlivenessProtocolHandlerRegistry alivenessProtocolHandlerRegistry = new AlivenessProtocolHandlerRegistryImpl();
178 alivenessMonitor = new AlivenessMonitor(dataBroker, idManager,
179 notificationPublishService, alivenessProtocolHandlerRegistry);
180 arpHandler = new AlivenessProtocolHandlerARP(dataBroker, alivenessProtocolHandlerRegistry,
181 interfaceManager, arpService);
182 lldpHandler = new AlivenessProtocolHandlerLLDP(dataBroker,
183 alivenessProtocolHandlerRegistry, packetProcessingService);
185 when(idManager.allocateId(any(AllocateIdInput.class)))
187 Futures.immediateFuture(RpcResultBuilder
188 .success(new AllocateIdOutputBuilder()
189 .setIdValue(mockId++).build())
191 when(idManager.releaseId(any(ReleaseIdInput.class))).thenReturn(Futures
192 .immediateFuture(RpcResultBuilder.<ReleaseIdOutput>success().build()));
193 doReturn(readTx).when(dataBroker).newReadOnlyTransaction();
194 doReturn(writeTx).when(dataBroker).newWriteOnlyTransaction();
195 doReturn(readWriteTx).when(dataBroker).newReadWriteTransaction();
196 doNothing().when(writeTx).put(eq(LogicalDatastoreType.OPERATIONAL),
197 any(InstanceIdentifier.class), any(DataObject.class));
198 doReturn(FluentFutures.immediateNullFluentFuture()).when(writeTx).commit();
199 doReturn(FluentFutures.immediateNullFluentFuture()).when(readWriteTx).commit();
203 public void tearDown() {
204 alivenessMonitor.close();
208 public void testMonitorProfileCreate()
209 throws InterruptedException, ExecutionException {
210 MonitorProfileCreateInput input = new MonitorProfileCreateInputBuilder()
211 .setProfile(new ProfileBuilder().setFailureThreshold(10L)
212 .setMonitorInterval(10000L).setMonitorWindow(10L)
213 .setProtocolType(MonitorProtocolType.Arp).build())
215 doReturn(FluentFutures.immediateFluentFuture(Optional.empty()))
216 .when(readWriteTx).read(eq(LogicalDatastoreType.OPERATIONAL),
217 argThat(isType(MonitorProfile.class)));
218 doReturn(FluentFutures.immediateNullFluentFuture()).when(readWriteTx).commit();
219 RpcResult<MonitorProfileCreateOutput> output = alivenessMonitor
220 .monitorProfileCreate(input).get();
221 assertTrue("Monitor Profile Create result", output.isSuccessful());
222 assertNotNull("Monitor Profile Output",
223 output.getResult().getProfileId());
227 public void testMonitorProfileCreateAlreadyExist()
228 throws InterruptedException, ExecutionException {
229 MonitorProfileCreateInput input = new MonitorProfileCreateInputBuilder()
230 .setProfile(new ProfileBuilder().setFailureThreshold(10L)
231 .setMonitorInterval(10000L).setMonitorWindow(10L)
232 .setProtocolType(MonitorProtocolType.Arp).build())
234 doReturn(FluentFutures.immediateFluentFuture(Optional.of(input))).when(readWriteTx).read(
235 eq(LogicalDatastoreType.OPERATIONAL),
236 argThat(isType(MonitorProfile.class)));
237 RpcResult<MonitorProfileCreateOutput> output = alivenessMonitor
238 .monitorProfileCreate(input).get();
239 assertTrue("Monitor Profile Create result", output.isSuccessful());
240 assertThat(output.getErrors(),
241 CoreMatchers.hasItem(hasErrorType(ErrorType.PROTOCOL)));
245 public void testMonitorStart()
246 throws InterruptedException, ExecutionException {
247 Long profileId = createProfile();
248 MonitorStartInput input = new MonitorStartInputBuilder()
251 .setDestination(new DestinationBuilder()
253 getInterface("10.0.0.1"))
255 .setSource(new SourceBuilder()
256 .setEndpointType(getInterface(
257 "testInterface", "10.1.1.1"))
259 .setMode(MonitoringMode.OneOne)
260 .setProfileId(profileId).build())
262 Optional<MonitorProfile> optionalProfile = Optional.of(getTestMonitorProfile());
263 FluentFuture<Optional<MonitorProfile>> proFuture =
264 FluentFutures.immediateFluentFuture(optionalProfile);
265 when(readTx.read(eq(LogicalDatastoreType.OPERATIONAL),
266 argThat(isType(MonitorProfile.class)))).thenReturn(proFuture);
267 FluentFuture<Optional<MonitoringInfo>> outFuture = FluentFutures
268 .immediateFluentFuture(Optional.<MonitoringInfo>empty());
269 when(readTx.read(eq(LogicalDatastoreType.OPERATIONAL),
270 argThat(isType(MonitoringInfo.class)))).thenReturn(outFuture);
271 RpcResult<MonitorStartOutput> output = alivenessMonitor
272 .monitorStart(input).get();
273 verify(idManager, times(2)).allocateId(any(AllocateIdInput.class));
274 assertTrue("Monitor start output result", output.isSuccessful());
275 assertNotNull("Monitor start output",
276 output.getResult().getMonitorId());
280 public void testMonitorPause()
281 throws InterruptedException, ExecutionException {
282 MonitorPauseInput input = new MonitorPauseInputBuilder()
283 .setMonitorId(2L).build();
284 Optional<MonitorProfile> optProfile = Optional
285 .of(getTestMonitorProfile());
286 when(readTx.read(eq(LogicalDatastoreType.OPERATIONAL),
287 argThat(isType(MonitorProfile.class))))
288 .thenReturn(FluentFutures.immediateFluentFuture(optProfile));
289 Optional<MonitoringInfo> optInfo = Optional.of(
290 new MonitoringInfoBuilder().setId(2L).setProfileId(1L).build());
291 when(readTx.read(eq(LogicalDatastoreType.OPERATIONAL),
292 argThat(isType(MonitoringInfo.class))))
293 .thenReturn(FluentFutures.immediateFluentFuture(optInfo));
294 Optional<MonitoringState> optState = Optional
295 .of(new MonitoringStateBuilder()
296 .setStatus(MonitorStatus.Started).build());
297 when(readWriteTx.read(eq(LogicalDatastoreType.OPERATIONAL),
298 argThat(isType(MonitoringState.class))))
299 .thenReturn(FluentFutures.immediateFluentFuture(optState));
300 Optional<MonitoridKeyEntry> optMap = Optional
301 .of(new MonitoridKeyEntryBuilder().setMonitorId(2L)
302 .setMonitorKey("Test monitor Key").build());
303 when(readTx.read(eq(LogicalDatastoreType.OPERATIONAL),
304 argThat(isType(MonitoridKeyEntry.class))))
305 .thenReturn(FluentFutures.immediateFluentFuture(optMap));
306 alivenessMonitor.monitorPause(input).get();
307 verify(readWriteTx).merge(eq(LogicalDatastoreType.OPERATIONAL),
308 argThat(isType(MonitoringState.class)), stateCaptor.capture());
309 assertEquals(MonitorStatus.Paused, stateCaptor.getValue().getStatus());
313 public void testMonitorUnpause()
314 throws InterruptedException, ExecutionException {
315 MonitorUnpauseInput input = new MonitorUnpauseInputBuilder()
316 .setMonitorId(2L).build();
317 Optional<MonitoringState> optState = Optional
318 .of(new MonitoringStateBuilder().setStatus(MonitorStatus.Paused)
320 when(readWriteTx.read(eq(LogicalDatastoreType.OPERATIONAL),
321 argThat(isType(MonitoringState.class))))
322 .thenReturn(FluentFutures.immediateFluentFuture(optState));
323 Optional<MonitoringInfo> optInfo = Optional.of(
324 new MonitoringInfoBuilder().setId(2L).setProfileId(1L).build());
325 when(readTx.read(eq(LogicalDatastoreType.OPERATIONAL),
326 argThat(isType(MonitoringInfo.class))))
327 .thenReturn(FluentFutures.immediateFluentFuture(optInfo));
328 Optional<MonitorProfile> optProfile = Optional
329 .of(getTestMonitorProfile());
330 when(readTx.read(eq(LogicalDatastoreType.OPERATIONAL),
331 argThat(isType(MonitorProfile.class))))
332 .thenReturn(FluentFutures.immediateFluentFuture(optProfile));
333 Optional<MonitoridKeyEntry> optMap = Optional
334 .of(new MonitoridKeyEntryBuilder().setMonitorId(2L)
335 .setMonitorKey("Test monitor Key").build());
336 when(readTx.read(eq(LogicalDatastoreType.OPERATIONAL),
337 argThat(isType(MonitoridKeyEntry.class))))
338 .thenReturn(FluentFutures.immediateFluentFuture(optMap));
339 RpcResult<MonitorUnpauseOutput> result = alivenessMonitor.monitorUnpause(input).get();
340 verify(readWriteTx).merge(eq(LogicalDatastoreType.OPERATIONAL),
341 argThat(isType(MonitoringState.class)), stateCaptor.capture());
342 assertEquals(MonitorStatus.Started, stateCaptor.getValue().getStatus());
343 assertTrue("Monitor unpause rpc result", result.isSuccessful());
347 public void testMonitorStop()
348 throws InterruptedException, ExecutionException {
349 MonitorStopInput input = new MonitorStopInputBuilder().setMonitorId(2L)
351 Optional<MonitoringInfo> optInfo = Optional
352 .of(new MonitoringInfoBuilder().setSource(new SourceBuilder()
354 getInterface("testInterface", "10.1.1.1"))
356 FluentFuture<Optional<MonitoringInfo>> outFuture = FluentFutures.immediateFluentFuture(optInfo);
357 when(readTx.read(eq(LogicalDatastoreType.OPERATIONAL),
358 argThat(isType(MonitoringInfo.class)))).thenReturn(outFuture);
359 Optional<MonitoridKeyEntry> optMap = Optional
360 .of(new MonitoridKeyEntryBuilder().setMonitorId(2L)
361 .setMonitorKey("Test monitor Key").build());
362 when(readTx.read(eq(LogicalDatastoreType.OPERATIONAL),
363 argThat(isType(MonitoridKeyEntry.class))))
364 .thenReturn(FluentFutures.immediateFluentFuture(optMap));
365 Optional<MonitorProfile> optProfile = Optional
366 .of(getTestMonitorProfile());
367 when(readTx.read(eq(LogicalDatastoreType.OPERATIONAL),
368 argThat(isType(MonitorProfile.class))))
369 .thenReturn(FluentFutures.immediateFluentFuture(optProfile));
370 Optional<InterfaceMonitorEntry> optEntry = Optional
371 .of(getInterfaceMonitorEntry());
372 when(readWriteTx.read(eq(LogicalDatastoreType.OPERATIONAL),
373 argThat(isType(InterfaceMonitorEntry.class))))
374 .thenReturn(FluentFutures.immediateFluentFuture(optEntry));
375 RpcResult<MonitorStopOutput> result = alivenessMonitor.monitorStop(input).get();
376 verify(idManager).releaseId(any(ReleaseIdInput.class));
377 verify(writeTx, times(3)).delete(eq(LogicalDatastoreType.OPERATIONAL),
378 any(InstanceIdentifier.class));
379 assertTrue("Monitor stop rpc result", result.isSuccessful());
383 public void testMonitorProfileDelete()
384 throws InterruptedException, ExecutionException {
385 MonitorProfileDeleteInput input = new MonitorProfileDeleteInputBuilder()
386 .setProfileId(1L).build();
387 Optional<MonitorProfile> optProfile = Optional
388 .of(getTestMonitorProfile());
389 when(readWriteTx.read(eq(LogicalDatastoreType.OPERATIONAL),
390 argThat(isType(MonitorProfile.class))))
391 .thenReturn(FluentFutures.immediateFluentFuture(optProfile));
392 RpcResult<MonitorProfileDeleteOutput> result = alivenessMonitor.monitorProfileDelete(input)
394 verify(idManager).releaseId(any(ReleaseIdInput.class));
395 verify(readWriteTx).delete(eq(LogicalDatastoreType.OPERATIONAL),
396 Matchers.<InstanceIdentifier<MonitorProfile>>any());
397 assertTrue("Monitor profile delete result", result.isSuccessful());
400 @SuppressWarnings("unchecked")
401 private long createProfile()
402 throws InterruptedException, ExecutionException {
403 MonitorProfileCreateInput input = new MonitorProfileCreateInputBuilder()
404 .setProfile(new ProfileBuilder().setFailureThreshold(10L)
405 .setMonitorInterval(10000L).setMonitorWindow(10L)
406 .setProtocolType(MonitorProtocolType.Arp).build())
408 doReturn(FluentFutures.immediateFluentFuture(Optional.empty()))
409 .when(readWriteTx).read(eq(LogicalDatastoreType.OPERATIONAL),
410 any(InstanceIdentifier.class));
411 doReturn(CommitInfo.emptyFluentFuture()).when(readWriteTx).commit();
412 RpcResult<MonitorProfileCreateOutput> output = alivenessMonitor
413 .monitorProfileCreate(input).get();
414 return output.getResult().getProfileId().toJava();
417 private MonitorProfile getTestMonitorProfile() {
418 return new MonitorProfileBuilder().setFailureThreshold(10L)
419 .setMonitorInterval(10000L).setMonitorWindow(10L)
420 .setProtocolType(MonitorProtocolType.Arp).build();
423 private InterfaceMonitorEntry getInterfaceMonitorEntry() {
424 return new InterfaceMonitorEntryBuilder()
425 .setInterfaceName("test-interface")
426 .setMonitorIds(Arrays.asList(Uint32.valueOf(1L), Uint32.valueOf(2L))).build();
429 private Interface getInterface(String ipAddress) {
430 return new InterfaceBuilder()
431 .setInterfaceIp(IpAddressBuilder.getDefaultInstance(ipAddress))
435 private Interface getInterface(String interfaceName, String ipAddress) {
436 return new InterfaceBuilder()
437 .setInterfaceIp(IpAddressBuilder.getDefaultInstance(ipAddress))
438 .setInterfaceName(interfaceName).build();