tmf: Make IAnalysisModule AutoCloseable
authorAlexandre Montplaisir <alexmonthy@voxpopuli.im>
Fri, 2 May 2014 20:44:23 +0000 (16:44 -0400)
committerAlexandre Montplaisir <alexmonthy@voxpopuli.im>
Thu, 8 May 2014 22:55:47 +0000 (18:55 -0400)
This will help ensure that we always close()/dispose() analysis
modules when we are done using them. This exposed many places in
the tests where unclosed modules could be leaking resources.

Change-Id: I32b9168d27460bd5daca61edebc38746a919ee4d
Signed-off-by: Alexandre Montplaisir <alexmonthy@voxpopuli.im>
Reviewed-on: https://git.eclipse.org/r/25895
Reviewed-by: Genevieve Bastien <gbastien+lttng@versatic.net>
Tested-by: Hudson CI
org.eclipse.linuxtools.lttng2.kernel.core.tests/src/org/eclipse/linuxtools/lttng2/kernel/core/tests/stateprovider/GenerateTestValues.java
org.eclipse.linuxtools.lttng2.kernel.core.tests/src/org/eclipse/linuxtools/lttng2/kernel/core/tests/stateprovider/PartialStateSystemTest.java
org.eclipse.linuxtools.lttng2.kernel.core.tests/src/org/eclipse/linuxtools/lttng2/kernel/core/tests/stateprovider/StateSystemFullHistoryTest.java
org.eclipse.linuxtools.lttng2.kernel.core.tests/src/org/eclipse/linuxtools/lttng2/kernel/core/tests/stateprovider/StateSystemInMemoryTest.java
org.eclipse.linuxtools.lttng2.ust.core.tests/src/org/eclipse/linuxtools/lttng2/ust/core/tests/trace/callstack/AbstractProviderTest.java
org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/analysis/AnalysisModuleTest.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/analysis/IAnalysisModule.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/analysis/TmfAbstractAnalysisModule.java
org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/CtfTmfLostEventStatisticsTest.java
org.eclipse.linuxtools.tmf.ctf.core.tests/src/org/eclipse/linuxtools/tmf/ctf/core/tests/statistics/TmfStateStatisticsTest.java

index 3d3a573b30013b20241c68bba323dd64564ddbba..95e53248874c4a38b2e41e78b382531e4838db24 100644 (file)
@@ -58,18 +58,19 @@ public class GenerateTestValues {
         /* Prepare the files */
         File logFile = File.createTempFile("TestValues", ".java");
         try (final CtfTmfTrace trace = testTrace.getTrace();
-                PrintWriter writer = new PrintWriter(new FileWriter(logFile), true);) {
-            /* Build and query the state system */
-            TmfStateSystemAnalysisModule module = new TmfStateSystemAnalysisModule() {
-                @Override
-                protected ITmfStateProvider createStateProvider() {
-                    return new LttngKernelStateProvider(trace);
-                }
-                @Override
-                protected String getSsFileName() {
-                    return "test-values";
-                }
-            };
+                PrintWriter writer = new PrintWriter(new FileWriter(logFile), true);
+                /* Build and query the state system */
+                TmfStateSystemAnalysisModule module = new TmfStateSystemAnalysisModule() {
+                    @Override
+                    protected ITmfStateProvider createStateProvider() {
+                        return new LttngKernelStateProvider(trace);
+                    }
+
+                    @Override
+                    protected String getSsFileName() {
+                        return "test-values";
+                    }
+                };) {
             module.setTrace(trace);
             module.setId("test-values");
             module.schedule();
index c610cc3e964074f95c2a368b858967268e65b298..c62063adb82b79fdece4fb148b1869596ca388bf 100644 (file)
@@ -38,9 +38,11 @@ import org.junit.Test;
  */
 public class PartialStateSystemTest extends StateSystemTest {
 
-    private static File stateFile;
     private static final String TEST_FILE_NAME = "test-partial";
 
+    private static File stateFile;
+    private static TestLttngKernelAnalysisModule module;
+
 
     /**
      * Initialization
@@ -53,7 +55,7 @@ public class PartialStateSystemTest extends StateSystemTest {
             stateFile.delete();
         }
 
-        TestLttngKernelAnalysisModule module = new TestLttngKernelAnalysisModule(TEST_FILE_NAME);
+        module = new TestLttngKernelAnalysisModule(TEST_FILE_NAME);
         try {
             module.setTrace(testTrace.getTrace());
         } catch (TmfAnalysisException e) {
@@ -71,6 +73,7 @@ public class PartialStateSystemTest extends StateSystemTest {
      */
     @AfterClass
     public static void tearDownClass() {
+        module.close();
         stateFile.delete();
     }
 
index 2fc1c71a6b20b65bb4d21cf150a3d060b165e9a0..17863e7c744928684b4a11e77d8951a4d607f679 100644 (file)
@@ -41,11 +41,13 @@ import org.junit.Test;
  */
 public class StateSystemFullHistoryTest extends StateSystemTest {
 
+    private static final String TEST_FILE_NAME = "test.ht";
+    private static final String BENCHMARK_FILE_NAME = "test.benchmark.ht";
+
     private static File stateFile;
     private static File stateFileBenchmark;
+    private static TestLttngKernelAnalysisModule module;
 
-    private static final String TEST_FILE_NAME = "test.ht";
-    private static final String BENCHMARK_FILE_NAME = "test.benchmark.ht";
 
     /**
      * Initialize the test cases (build the history file once for all tests).
@@ -56,7 +58,7 @@ public class StateSystemFullHistoryTest extends StateSystemTest {
         stateFile = createStateFile(TEST_FILE_NAME);
         stateFileBenchmark = createStateFile(BENCHMARK_FILE_NAME);
 
-        TestLttngKernelAnalysisModule module = new TestLttngKernelAnalysisModule(TEST_FILE_NAME);
+        module = new TestLttngKernelAnalysisModule(TEST_FILE_NAME);
         try {
             module.setTrace(testTrace.getTrace());
         } catch (TmfAnalysisException e) {
@@ -74,6 +76,7 @@ public class StateSystemFullHistoryTest extends StateSystemTest {
      */
     @AfterClass
     public static void tearDownClass() {
+        module.close();
         stateFile.delete();
         stateFileBenchmark.delete();
     }
@@ -88,19 +91,21 @@ public class StateSystemFullHistoryTest extends StateSystemTest {
      */
     @Test
     public void testBuild() {
-        TestLttngKernelAnalysisModule module2 = new TestLttngKernelAnalysisModule(BENCHMARK_FILE_NAME);
-        try {
-            module2.setTrace(testTrace.getTrace());
-        } catch (TmfAnalysisException e) {
-            fail();
-        }
-        module2.schedule();
-        assertTrue(module2.waitForCompletion());
-        ITmfStateSystem ssb2 = module2.getStateSystem();
+        try (TestLttngKernelAnalysisModule module2 =
+                new TestLttngKernelAnalysisModule(BENCHMARK_FILE_NAME);) {
+            try {
+                module2.setTrace(testTrace.getTrace());
+            } catch (TmfAnalysisException e) {
+                fail();
+            }
+            module2.schedule();
+            assertTrue(module2.waitForCompletion());
+            ITmfStateSystem ssb2 = module2.getStateSystem();
 
-        assertNotNull(ssb2);
-        assertEquals(startTime, ssb2.getStartTime());
-        assertEquals(endTime, ssb2.getCurrentEndTime());
+            assertNotNull(ssb2);
+            assertEquals(startTime, ssb2.getStartTime());
+            assertEquals(endTime, ssb2.getCurrentEndTime());
+        }
     }
 
     /**
@@ -109,19 +114,20 @@ public class StateSystemFullHistoryTest extends StateSystemTest {
     @Test
     public void testOpenExistingStateFile() {
         /* 'newStateFile' should have already been created */
-        TestLttngKernelAnalysisModule module2 = new TestLttngKernelAnalysisModule(TEST_FILE_NAME);
-        try {
-            module2.setTrace(testTrace.getTrace());
-        } catch (TmfAnalysisException e) {
-            fail();
-        }
-        module2.schedule();
-        assertTrue(module2.waitForCompletion());
-        ITmfStateSystem ssb2 = module2.getStateSystem();
+        try (TestLttngKernelAnalysisModule module2 = new TestLttngKernelAnalysisModule(TEST_FILE_NAME);) {
+            try {
+                module2.setTrace(testTrace.getTrace());
+            } catch (TmfAnalysisException e) {
+                fail();
+            }
+            module2.schedule();
+            assertTrue(module2.waitForCompletion());
+            ITmfStateSystem ssb2 = module2.getStateSystem();
 
-        assertNotNull(ssb2);
-        assertEquals(startTime, ssb2.getStartTime());
-        assertEquals(endTime, ssb2.getCurrentEndTime());
+            assertNotNull(ssb2);
+            assertEquals(startTime, ssb2.getStartTime());
+            assertEquals(endTime, ssb2.getCurrentEndTime());
+        }
     }
 
     private static class TestLttngKernelAnalysisModule extends TmfStateSystemAnalysisModule {
index 0c4b838520d5abbb985400ee5a565764e5342263..8cb40fbaf71f1a3940cde1f11d55943342aa208e 100644 (file)
@@ -24,6 +24,7 @@ import org.eclipse.linuxtools.tmf.core.statesystem.ITmfStateProvider;
 import org.eclipse.linuxtools.tmf.core.statesystem.TmfStateSystemAnalysisModule;
 import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
 import org.eclipse.linuxtools.tmf.ctf.core.CtfTmfTrace;
+import org.junit.AfterClass;
 import org.junit.BeforeClass;
 
 /**
@@ -33,6 +34,8 @@ import org.junit.BeforeClass;
  */
 public class StateSystemInMemoryTest extends StateSystemTest {
 
+    private static TestLttngKernelAnalysisModule module;
+
     /**
      * Initialization
      */
@@ -40,7 +43,7 @@ public class StateSystemInMemoryTest extends StateSystemTest {
     public static void initialize() {
         assumeTrue(testTrace.exists());
 
-        TestLttngKernelAnalysisModule module = new TestLttngKernelAnalysisModule();
+        module = new TestLttngKernelAnalysisModule();
         try {
             module.setTrace(testTrace.getTrace());
         } catch (TmfAnalysisException e) {
@@ -52,6 +55,14 @@ public class StateSystemInMemoryTest extends StateSystemTest {
         assertNotNull(ssq);
     }
 
+    /**
+     * Class cleanup
+     */
+    @AfterClass
+    public static void cleanupClass() {
+        module.close();
+    }
+
     private static class TestLttngKernelAnalysisModule extends TmfStateSystemAnalysisModule {
 
         /**
index 2d78a503b2cdd26d4cf691437ad4a36214f2f554..a138bfdd98cf02d99e284bc7726e0a84c456516e 100644 (file)
@@ -61,6 +61,8 @@ public abstract class AbstractProviderTest {
 
     private CtfTmfTrace fTrace = null;
     private ITmfStateSystem fSS = null;
+    private TestLttngCallStackModule fModule;
+
 
     // ------------------------------------------------------------------------
     // Abstract methods
@@ -98,16 +100,16 @@ public abstract class AbstractProviderTest {
         assumeTrue(testTrace.exists());
 
         fTrace = testTrace.getTrace();
-        TestLttngCallStackModule module = new TestLttngCallStackModule();
+        fModule = new TestLttngCallStackModule();
         try {
-            module.setTrace(fTrace);
+            fModule.setTrace(fTrace);
         } catch (TmfAnalysisException e) {
             fail();
         }
-        module.schedule();
-        assertTrue(module.waitForCompletion());
+        fModule.schedule();
+        assertTrue(fModule.waitForCompletion());
 
-        fSS = module.getStateSystem();
+        fSS = fModule.getStateSystem();
         assertNotNull(fSS);
     }
 
@@ -116,6 +118,7 @@ public abstract class AbstractProviderTest {
      */
     @After
     public void tearDown() {
+        fModule.close();
         if (fTrace != null) {
             fTrace.dispose();
             File suppDir = new File(TmfTraceManager.getSupplementaryFileDir(fTrace));
@@ -135,21 +138,21 @@ public abstract class AbstractProviderTest {
     public void testOtherUstTrace() {
         /* Initialize the trace and analysis module */
         final ITmfTrace ustTrace = otherUstTrace.getTrace();
-        TestLttngCallStackModule module = new TestLttngCallStackModule();
-        try {
-            module.setTrace(ustTrace);
-        } catch (TmfAnalysisException e) {
-            fail();
+        try (TestLttngCallStackModule module = new TestLttngCallStackModule();) {
+            try {
+                module.setTrace(ustTrace);
+            } catch (TmfAnalysisException e) {
+                fail();
+            }
+            module.schedule();
+            assertTrue(module.waitForCompletion());
+
+            /* Make sure the generated state system exists, but is empty */
+            ITmfStateSystem ss = module.getStateSystem();
+            assertNotNull(ss);
+            assertTrue(ss.getStartTime() >= ustTrace.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue());
+            assertEquals(0, ss.getNbAttributes());
         }
-        module.schedule();
-        assertTrue(module.waitForCompletion());
-
-        /* Make sure the generated state system exists, but is empty */
-        ITmfStateSystem ss = module.getStateSystem();
-        assertNotNull(ss);
-        assertTrue(ss.getStartTime() >= ustTrace.getStartTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue());
-        assertEquals(0, ss.getNbAttributes());
-
         /* Dispose the trace */
         ustTrace.dispose();
         File suppDir = new File(TmfTraceManager.getSupplementaryFileDir(ustTrace));
index 80a151005c7938e718f43cd90746d92b24658f37..e9637527264692434479705637ebebff53bd61a8 100644 (file)
@@ -55,33 +55,34 @@ public class AnalysisModuleTest {
      */
     @Test
     public void testGettersSetters() {
-        IAnalysisModule module = new TestAnalysis();
-
-        module.setName(MODULE_GENERIC_NAME);
-        module.setId(MODULE_GENERIC_ID);
-        assertEquals(MODULE_GENERIC_ID, module.getId());
-        assertEquals(MODULE_GENERIC_NAME, module.getName());
-
-        module.setAutomatic(false);
-        assertFalse(module.isAutomatic());
-        module.setAutomatic(true);
-        assertTrue(module.isAutomatic());
-        module.addParameter(TestAnalysis.PARAM_TEST);
-        assertNull(module.getParameter(TestAnalysis.PARAM_TEST));
-        module.setParameter(TestAnalysis.PARAM_TEST, 1);
-        assertEquals(1, module.getParameter(TestAnalysis.PARAM_TEST));
-
-        /* Try to set and get wrong parameter */
-        String wrongParam = "abc";
-        Exception exception = null;
-        try {
-            module.setParameter(wrongParam, 1);
-        } catch (RuntimeException e) {
-            exception = e;
-            assertEquals(NLS.bind(Messages.TmfAbstractAnalysisModule_InvalidParameter, wrongParam, module.getName()), e.getMessage());
+        try (IAnalysisModule module = new TestAnalysis();) {
+
+            module.setName(MODULE_GENERIC_NAME);
+            module.setId(MODULE_GENERIC_ID);
+            assertEquals(MODULE_GENERIC_ID, module.getId());
+            assertEquals(MODULE_GENERIC_NAME, module.getName());
+
+            module.setAutomatic(false);
+            assertFalse(module.isAutomatic());
+            module.setAutomatic(true);
+            assertTrue(module.isAutomatic());
+            module.addParameter(TestAnalysis.PARAM_TEST);
+            assertNull(module.getParameter(TestAnalysis.PARAM_TEST));
+            module.setParameter(TestAnalysis.PARAM_TEST, 1);
+            assertEquals(1, module.getParameter(TestAnalysis.PARAM_TEST));
+
+            /* Try to set and get wrong parameter */
+            String wrongParam = "abc";
+            Exception exception = null;
+            try {
+                module.setParameter(wrongParam, 1);
+            } catch (RuntimeException e) {
+                exception = e;
+                assertEquals(NLS.bind(Messages.TmfAbstractAnalysisModule_InvalidParameter, wrongParam, module.getName()), e.getMessage());
+            }
+            assertNotNull(exception);
+            assertNull(module.getParameter(wrongParam));
         }
-        assertNotNull(exception);
-        assertNull(module.getParameter(wrongParam));
     }
 
     private static TestAnalysis setUpAnalysis() {
@@ -92,7 +93,6 @@ public class AnalysisModuleTest {
         module.addParameter(TestAnalysis.PARAM_TEST);
 
         return module;
-
     }
 
     /**
@@ -153,22 +153,22 @@ public class AnalysisModuleTest {
      */
     @Test
     public void testSetWrongTrace() {
-        IAnalysisModule module = new TestAnalysis2();
-
-        module.setName(MODULE_GENERIC_NAME);
-        module.setId(MODULE_GENERIC_ID);
-        assertEquals(MODULE_GENERIC_ID, module.getId());
-        assertEquals(MODULE_GENERIC_NAME, module.getName());
-
-        Exception exception = null;
-        try {
-            module.setTrace(TmfTestTrace.A_TEST_10K.getTrace());
-        } catch (TmfAnalysisException e) {
-            exception = e;
+        try (IAnalysisModule module = new TestAnalysis2();) {
+
+            module.setName(MODULE_GENERIC_NAME);
+            module.setId(MODULE_GENERIC_ID);
+            assertEquals(MODULE_GENERIC_ID, module.getId());
+            assertEquals(MODULE_GENERIC_NAME, module.getName());
+
+            Exception exception = null;
+            try {
+                module.setTrace(TmfTestTrace.A_TEST_10K.getTrace());
+            } catch (TmfAnalysisException e) {
+                exception = e;
+            }
+            assertNotNull(exception);
+            assertEquals(NLS.bind(Messages.TmfAbstractAnalysisModule_AnalysisCannotExecute, module.getName()), exception.getMessage());
         }
-        assertNotNull(exception);
-        assertEquals(NLS.bind(Messages.TmfAbstractAnalysisModule_AnalysisCannotExecute, module.getName()), exception.getMessage());
-
     }
 
     /**
index 98b651114acc2cfbeb53ac78394b8f8cc6e8552f..a2c1377b165b5c036722157f8368da0122746490 100644 (file)
@@ -42,7 +42,7 @@ import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
  * @author Geneviève Bastien
  * @since 3.0
  */
-public interface IAnalysisModule extends ITmfComponent, IAnalysisRequirementProvider {
+public interface IAnalysisModule extends ITmfComponent, IAnalysisRequirementProvider, AutoCloseable {
 
     // --------------------------------------------------------
     // Getters and setters
@@ -239,4 +239,11 @@ public interface IAnalysisModule extends ITmfComponent, IAnalysisRequirementProv
      *            The of the parameter that changed
      */
     void notifyParameterChanged(String name);
+
+    // -----------------------------------------------------
+    // AutoCloseable (remove the thrown exception)
+    // -----------------------------------------------------
+
+    @Override
+    void close();
 }
index d8e4e97ee0ab9846ba6a7b1da6e1830ef2690ad9..f0403d7c9ae5742a3ee24fbc21b5d2dc43022c96 100644 (file)
@@ -240,6 +240,11 @@ public abstract class TmfAbstractAnalysisModule extends TmfComponent implements
         }
     }
 
+    @Override
+    public void close() {
+        dispose();
+    }
+
     @Override
     public void dispose() {
         super.dispose();
index a4009512e19250bffcfd7f5eebbeef2528e1bfdd..069281492d5b880b3555837c25666f8e9d10584c 100644 (file)
@@ -56,6 +56,10 @@ public class CtfTmfLostEventStatisticsTest {
     /** The statistics back-end object for the trace with lost events */
     private ITmfStatistics fStats;
 
+    /* The two analysis modules needed for fStats */
+    private TmfStatisticsTotalsModule fTotalsMod;
+    private TmfStatisticsEventTypesModule fEventTypesMod;
+
     // ------------------------------------------------------------------------
     // Maintenance
     // ------------------------------------------------------------------------
@@ -76,22 +80,22 @@ public class CtfTmfLostEventStatisticsTest {
         fTrace = lostEventsTrace.getTrace();
 
         /* Prepare the two analysis-backed state systems */
-        TmfStatisticsTotalsModule totalsMod = new TmfStatisticsTotalsModule();
-        TmfStatisticsEventTypesModule eventTypesMod = new TmfStatisticsEventTypesModule();
+        fTotalsMod = new TmfStatisticsTotalsModule();
+        fEventTypesMod = new TmfStatisticsEventTypesModule();
         try {
-            totalsMod.setTrace(fTrace);
-            eventTypesMod.setTrace(fTrace);
+            fTotalsMod.setTrace(fTrace);
+            fEventTypesMod.setTrace(fTrace);
         } catch (TmfAnalysisException e) {
             fail();
         }
 
-        totalsMod.schedule();
-        eventTypesMod.schedule();
-        assertTrue(totalsMod.waitForCompletion());
-        assertTrue(eventTypesMod.waitForCompletion());
+        fTotalsMod.schedule();
+        fEventTypesMod.schedule();
+        assertTrue(fTotalsMod.waitForCompletion());
+        assertTrue(fEventTypesMod.waitForCompletion());
 
-        ITmfStateSystem totalsSS = totalsMod.getStateSystem();
-        ITmfStateSystem eventTypesSS = eventTypesMod.getStateSystem();
+        ITmfStateSystem totalsSS = fTotalsMod.getStateSystem();
+        ITmfStateSystem eventTypesSS = fEventTypesMod.getStateSystem();
         assertNotNull(totalsSS);
         assertNotNull(eventTypesSS);
 
@@ -103,6 +107,9 @@ public class CtfTmfLostEventStatisticsTest {
      */
     @After
     public void tearDown() {
+        fStats.dispose();
+        fTotalsMod.close();
+        fEventTypesMod.close();
         fTrace.dispose();
     }
 
index 1b49bbb8daf30197bc4c1e50d6e58574de18ede2..b8a6c526df0a390ccdcf29ff4e22053a678f22f4 100644 (file)
@@ -36,6 +36,9 @@ public class TmfStateStatisticsTest extends TmfStatisticsTest {
 
     private ITmfTrace fTrace;
 
+    private TmfStatisticsTotalsModule fTotalsMod;
+    private TmfStatisticsEventTypesModule fEventTypesMod;
+
     /**
      * Class setup
      */
@@ -52,22 +55,22 @@ public class TmfStateStatisticsTest extends TmfStatisticsTest {
         fTrace = testTrace.getTrace();
 
         /* Prepare the two analysis-backed state systems */
-        TmfStatisticsTotalsModule totalsMod = new TmfStatisticsTotalsModule();
-        TmfStatisticsEventTypesModule eventTypesMod = new TmfStatisticsEventTypesModule();
+        fTotalsMod = new TmfStatisticsTotalsModule();
+        fEventTypesMod = new TmfStatisticsEventTypesModule();
         try {
-            totalsMod.setTrace(fTrace);
-            eventTypesMod.setTrace(fTrace);
+            fTotalsMod.setTrace(fTrace);
+            fEventTypesMod.setTrace(fTrace);
         } catch (TmfAnalysisException e) {
             fail();
         }
 
-        totalsMod.schedule();
-        eventTypesMod.schedule();
-        assertTrue(totalsMod.waitForCompletion());
-        assertTrue(eventTypesMod.waitForCompletion());
+        fTotalsMod.schedule();
+        fEventTypesMod.schedule();
+        assertTrue(fTotalsMod.waitForCompletion());
+        assertTrue(fEventTypesMod.waitForCompletion());
 
-        ITmfStateSystem totalsSS = totalsMod.getStateSystem();
-        ITmfStateSystem eventTypesSS = eventTypesMod.getStateSystem();
+        ITmfStateSystem totalsSS = fTotalsMod.getStateSystem();
+        ITmfStateSystem eventTypesSS = fEventTypesMod.getStateSystem();
         assertNotNull(totalsSS);
         assertNotNull(eventTypesSS);
 
@@ -79,6 +82,8 @@ public class TmfStateStatisticsTest extends TmfStatisticsTest {
      */
     @After
     public void tearDown() {
+        fTotalsMod.close();
+        fEventTypesMod.close();
         fTrace.dispose();
     }
 }
This page took 0.035765 seconds and 5 git commands to generate.