Migrate OSGI compendium reference
[controller.git] / opendaylight / md-sal / mdsal-trace / dom-impl / src / test / java / org / opendaylight / controller / md / sal / trace / tests / TracingBrokerTest.java
index 63629f6c8c06c96cf263e5e3950ad1613bc78bd3..0a0d7b3a64612c13d9cd7ea0d8888f78f4e2ca0d 100644 (file)
@@ -9,12 +9,14 @@ package org.opendaylight.controller.md.sal.trace.tests;
 
 import static com.google.common.truth.Truth.assertThat;
 import static java.nio.charset.StandardCharsets.UTF_8;
+import static java.util.Collections.singletonList;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 
 import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
 import org.junit.Test;
+import org.opendaylight.controller.md.sal.binding.test.DataBrokerTestModule;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
 import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
@@ -28,27 +30,47 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsaltra
  *
  * @author Michael Vorburger.ch
  */
+@Deprecated
 public class TracingBrokerTest {
 
+    @Test
+    public void testEnd2End() {
+        DataBrokerTestModule wiring = new DataBrokerTestModule(true);
+        wiring.getDataBroker(); // required so DataBrokerTestModule creates the DOMDataBroker
+        DOMDataBroker realDomBroker = wiring.getDOMDataBroker();
+        TracingBroker tracingDomBroker = new TracingBroker("Test", realDomBroker, new ConfigBuilder()
+                // CONTROLLER-1877: configure it like the default/initial mdsaltrace_config.xml in mdsal-trace-api
+                .setTransactionDebugContextEnabled(true)
+                .setWriteWatches(singletonList("/this/will/never/exist"))
+                .setRegistrationWatches(singletonList("/this/will/never/exist"))
+                .build(),
+                wiring.getBindingToNormalizedNodeCodec());
+        tracingDomBroker.newWriteOnlyTransaction().cancel();
+    }
+
     @Test
     @SuppressWarnings({ "resource", "unused" }) // Finding resource leaks is the point of this test
     public void testPrintOpenTransactions() {
         DOMDataBroker domDataBroker = mock(DOMDataBroker.class, RETURNS_DEEP_STUBS);
         Config config = new ConfigBuilder().setTransactionDebugContextEnabled(true).build();
         BindingNormalizedNodeSerializer codec = mock(BindingNormalizedNodeSerializer.class);
-        TracingBroker tracingBroker = new TracingBroker(domDataBroker, config, codec);
+        TracingBroker tracingBroker = new TracingBroker("mock", domDataBroker, config, codec);
+
+        for (int i = 0; i < 3; i++) {
+            DOMDataReadWriteTransaction tx = tracingBroker.newReadWriteTransaction();
+        }
+        DOMDataReadWriteTransaction anotherTx = tracingBroker.newReadWriteTransaction();
 
-        DOMDataReadWriteTransaction tx = tracingBroker.newReadWriteTransaction();
         DOMTransactionChain txChain = tracingBroker.createTransactionChain(null);
         DOMDataReadWriteTransaction txFromChain = txChain.newReadWriteTransaction();
 
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         PrintStream ps = new PrintStream(baos);
-        boolean printReturnValue = tracingBroker.printOpenTransactions(ps);
+        boolean printReturnValue = tracingBroker.printOpenTransactions(ps, 1);
         String output = new String(baos.toByteArray(), UTF_8);
 
         assertThat(printReturnValue).isTrue();
-        // Assert expections about stack trace
+        // Assert expectations about stack trace
         assertThat(output).contains("testPrintOpenTransactions(TracingBrokerTest.java");
         assertThat(output).doesNotContain(TracingBroker.class.getName());
 
@@ -60,6 +82,9 @@ public class TracingBrokerTest {
             previousLine = line;
         }
 
+        // assert that the sorting works - the x3 is shown before the x1
+        assertThat(output).contains("  DataBroker : newReadWriteTransaction()\n    3x");
+
         // We don't do any verify/times on the mocks,
         // because the main point of the test is just to verify that
         // printOpenTransactions runs through without any exceptions