package org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.writer;
+import java.util.Optional;
+
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.Optional;
+import com.google.common.annotations.VisibleForTesting;
/**
* Purpose: safely create transaction
public class NetconfTransactionCreator {
private final static Logger LOG = LoggerFactory.getLogger(NetconfTransactionCreator.class);
- private static final long TIMEOUT = 5000L;
+ private static long timeout = 5000L;
public static Optional<ReadOnlyTransaction> netconfReadOnlyTransaction(DataBroker mountpoint) {
int attempt = 0;
attempt++;
LOG.warn("NetconfDocumentedException thrown, retrying ({})...", attempt);
try {
- Thread.sleep(TIMEOUT);
+ Thread.sleep(timeout);
} catch (InterruptedException i) {
LOG.error("Thread interrupted while waiting ... {} ", i);
}
attempt++;
LOG.warn("NetconfDocumentedException thrown, retrying ({})...", attempt);
try {
- Thread.sleep(TIMEOUT);
+ Thread.sleep(timeout);
} catch (InterruptedException i) {
LOG.error("Thread interrupted while waiting ... {} ", i);
}
attempt++;
LOG.warn("NetconfDocumentedException thrown, retrying ({})...", attempt);
try {
- Thread.sleep(TIMEOUT);
+ Thread.sleep(timeout);
} catch (InterruptedException i) {
LOG.error("Thread interrupted while waiting ... {} ", i);
}
LOG.error("Maximum number of attempts reached");
return Optional.empty();
}
+
+ @VisibleForTesting
+ public static void setTimeout (long newTimeout) {
+ timeout = newTimeout;
+ }
}
--- /dev/null
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.writer;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.Optional;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.netconf.api.NetconfDocumentedException;
+
+public class NetconfTransactionCreatorTest {
+
+ @Mock
+ private DataBroker dataBroker;
+
+ @Before
+ public void init() {
+ dataBroker = mock(DataBroker.class);
+ NetconfTransactionCreator.setTimeout(10L);
+ }
+
+ @Test
+ public void testNetconfReadOnlyTransaction_success() {
+ ReadOnlyTransaction rtx = mock(ReadOnlyTransaction.class);
+ when(dataBroker.newReadOnlyTransaction()).thenReturn(rtx);
+ Optional<ReadOnlyTransaction> newRtx = NetconfTransactionCreator.netconfReadOnlyTransaction(dataBroker);
+ assertEquals(rtx, newRtx.get());
+ }
+
+ @Test
+ public void testNetconfReadOnlyTransaction_NoNetconfException() {
+ when(dataBroker.newReadOnlyTransaction()).thenThrow(RuntimeException.class);
+ Optional<ReadOnlyTransaction> newRtx = NetconfTransactionCreator.netconfReadOnlyTransaction(dataBroker);
+ assertEquals(false, newRtx.isPresent());
+ verify(dataBroker, times(1)).newReadOnlyTransaction();
+ }
+
+ @Test
+ public void testNetconfReadOnlyTransaction_NetconfException() {
+ when(dataBroker.newReadOnlyTransaction()).thenThrow(new RuntimeException(new NetconfDocumentedException("")));
+ Optional<ReadOnlyTransaction> newRtx = NetconfTransactionCreator.netconfReadOnlyTransaction(dataBroker);
+ assertEquals(false, newRtx.isPresent());
+ verify(dataBroker, times(6)).newReadOnlyTransaction();
+ }
+
+ @Test
+ public void testNetconfWriteOnlyTransaction_success() {
+ WriteTransaction wtx = mock(WriteTransaction.class);
+ when(dataBroker.newWriteOnlyTransaction()).thenReturn(wtx);
+ Optional<WriteTransaction> newWtx = NetconfTransactionCreator.netconfWriteOnlyTransaction(dataBroker);
+ assertEquals(wtx, newWtx.get());
+ }
+
+ @Test
+ public void testNetconfWriteOnlyTransaction_NoNetconfException() {
+ when(dataBroker.newWriteOnlyTransaction()).thenThrow(RuntimeException.class);
+ Optional<WriteTransaction> newWtx = NetconfTransactionCreator.netconfWriteOnlyTransaction(dataBroker);
+ assertEquals(false, newWtx.isPresent());
+ verify(dataBroker, times(1)).newWriteOnlyTransaction();
+ }
+
+ @Test
+ public void testNetconfWriteOnlyTransaction_NetconfException() {
+ when(dataBroker.newWriteOnlyTransaction()).thenThrow(new RuntimeException(new NetconfDocumentedException("")));
+ Optional<WriteTransaction> newWtx = NetconfTransactionCreator.netconfWriteOnlyTransaction(dataBroker);
+ assertEquals(false, newWtx.isPresent());
+ verify(dataBroker, times(6)).newWriteOnlyTransaction();
+ }
+
+ @Test
+ public void testNetconfReadWriteTransaction_success() {
+ ReadWriteTransaction wtx = mock(ReadWriteTransaction.class);
+ when(dataBroker.newReadWriteTransaction()).thenReturn(wtx);
+ Optional<ReadWriteTransaction> newRtx = NetconfTransactionCreator.netconfReadWriteTransaction(dataBroker);
+ assertEquals(wtx, newRtx.get());
+ }
+
+ @Test
+ public void testNetconfReadWriteTransaction_NoNetconfException() {
+ when(dataBroker.newReadWriteTransaction()).thenThrow(RuntimeException.class);
+ Optional<ReadWriteTransaction> newRtx = NetconfTransactionCreator.netconfReadWriteTransaction(dataBroker);
+ assertEquals(false, newRtx.isPresent());
+ verify(dataBroker, times(1)).newReadWriteTransaction();
+ }
+
+ @Test
+ public void testNetconfReadWriteTransaction_NetconfException() {
+ when(dataBroker.newReadWriteTransaction()).thenThrow(new RuntimeException(new NetconfDocumentedException("")));
+ Optional<ReadWriteTransaction> newRtx = NetconfTransactionCreator.netconfReadWriteTransaction(dataBroker);
+ assertEquals(false, newRtx.isPresent());
+ verify(dataBroker, times(6)).newReadWriteTransaction();
+ }
+}