Update for new class names
[lttng-ust-java-tests.git] / lttng-ust-java-tests / src / test / java / org / lttng / ust / agent / integration / filter / FilterListenerITBase.java
index efacc245434387a714313424445e47a5276b20fd..409ec562656d879c92a725d4a33664108e34908c 100644 (file)
 
 package org.lttng.ust.agent.integration.filter;
 
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -36,11 +34,11 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.lttng.tools.ILttngSession;
 import org.lttng.ust.agent.ILttngHandler;
-import org.lttng.ust.agent.filter.FilterNotificationManager;
+import org.lttng.ust.agent.filter.FilterChangeNotifier;
 import org.lttng.ust.agent.filter.IFilterChangeListener;
 import org.lttng.ust.agent.session.EventRule;
-import org.lttng.ust.agent.session.LogLevelFilter;
-import org.lttng.ust.agent.session.LogLevelFilter.LogLevelType;
+import org.lttng.ust.agent.session.LogLevelSelector;
+import org.lttng.ust.agent.session.LogLevelSelector.LogLevelType;
 import org.lttng.ust.agent.utils.ILogLevelStrings;
 import org.lttng.ust.agent.utils.TestPrintRunner;
 
@@ -52,7 +50,7 @@ import org.lttng.ust.agent.utils.TestPrintRunner;
 @RunWith(TestPrintRunner.class)
 public abstract class FilterListenerITBase {
 
-    protected static final LogLevelFilter LOG_LEVEL_UNSPECIFIED = new LogLevelFilter(Integer.MIN_VALUE, 0);
+    protected static final LogLevelSelector LOG_LEVEL_UNSPECIFIED = new LogLevelSelector(Integer.MIN_VALUE, 0);
 
     private static final String EVENT_NAME_A = "eventA";
     private static final String EVENT_NAME_B = "eventB";
@@ -76,7 +74,7 @@ public abstract class FilterListenerITBase {
     public void setup() throws SecurityException, IOException {
         handler = getLogHandler();
         listener = new TestFilterListener();
-        FilterNotificationManager.getInstance().registerListener(listener);
+        FilterChangeNotifier.getInstance().registerListener(listener);
         session = ILttngSession.createSession(null, getSessionDomain());
     }
 
@@ -86,7 +84,7 @@ public abstract class FilterListenerITBase {
     @After
     public void teardown() {
         session.close();
-        FilterNotificationManager.getInstance().unregisterListener(listener);
+        FilterChangeNotifier.getInstance().unregisterListener(listener);
         handler.close();
     }
 
@@ -95,12 +93,8 @@ public abstract class FilterListenerITBase {
      */
     @Test
     public void testNoRules() {
-        Set<EventRule> rules = Collections.EMPTY_SET;
-        listener.setParameters(0, rules);
-        /* Don't enable any events */
-
-        assertTrue(listener.waitForAllNotifications());
-        assertTrue(listener.checkRules());
+        assertEquals(0, listener.getNbNotifications());
+        assertEquals(Collections.EMPTY_SET, listener.getCurrentRules());
     }
 
     /**
@@ -111,12 +105,10 @@ public abstract class FilterListenerITBase {
         Set<EventRule> rules = Collections.singleton(
                 new EventRule(EVENT_NAME_A, LOG_LEVEL_UNSPECIFIED, null));
 
-        listener.setParameters(1, rules);
-
         session.enableEvent(EVENT_NAME_A, null, false, null);
 
-        assertTrue(listener.waitForAllNotifications());
-        assertTrue(listener.checkRules());
+        assertEquals(1, listener.getNbNotifications());
+        assertEquals(rules, listener.getCurrentRules());
     }
 
     /**
@@ -130,14 +122,12 @@ public abstract class FilterListenerITBase {
                         new EventRule(EVENT_NAME_C, LOG_LEVEL_UNSPECIFIED, null))
                 .collect(Collectors.toSet());
 
-        listener.setParameters(3, rules);
-
         session.enableEvent(EVENT_NAME_A, null, false, null);
         session.enableEvent(EVENT_NAME_B, null, false, null);
         session.enableEvent(EVENT_NAME_C, null, false, null);
 
-        assertTrue(listener.waitForAllNotifications());
-        assertTrue(listener.checkRules());
+        assertEquals(3, listener.getNbNotifications());
+        assertEquals(rules, listener.getCurrentRules());
     }
 
     /**
@@ -148,16 +138,14 @@ public abstract class FilterListenerITBase {
         Set<EventRule> rules = Collections.singleton(
                 new EventRule(EVENT_NAME_A, LOG_LEVEL_UNSPECIFIED, null));
 
-        listener.setParameters(4, rules);
-
         session.enableEvent(EVENT_NAME_A, null, false, null);
         session.enableEvent(EVENT_NAME_B, null, false, null);
         session.enableEvent(EVENT_NAME_C, null, false, null);
         session.disableEvents(EVENT_NAME_B);
         session.disableEvents(EVENT_NAME_C);
 
-        assertTrue(listener.waitForAllNotifications());
-        assertTrue(listener.checkRules());
+        assertEquals(5, listener.getNbNotifications());
+        assertEquals(rules, listener.getCurrentRules());
     }
 
     /**
@@ -167,19 +155,17 @@ public abstract class FilterListenerITBase {
     public void testManyRulesDisableAll() {
         Set<EventRule> rules = Collections.EMPTY_SET;
 
-        /*
-         * We should receive 6 notifications, because a "disable-event -a" sends
-         * one for each event that was enabled.
-         */
-        listener.setParameters(6, rules);
-
         session.enableEvent(EVENT_NAME_A, null, false, null);
         session.enableEvent(EVENT_NAME_B, null, false, null);
         session.enableEvent(EVENT_NAME_C, null, false, null);
         session.disableAllEvents();
 
-        assertTrue(listener.waitForAllNotifications());
-        assertTrue(listener.checkRules());
+        /*
+         * We should receive 6 notifications, because a "disable-event -a" sends
+         * one for each event that was enabled.
+         */
+        assertEquals(6, listener.getNbNotifications());
+        assertEquals(rules, listener.getCurrentRules());
     }
 
     /**
@@ -188,24 +174,22 @@ public abstract class FilterListenerITBase {
     @Ignore("Does not work as expected atm, see http://bugs.lttng.org/issues/913")
     @Test
     public void testSameEventsDiffLogLevels() {
-        LogLevelFilter llf1 = new LogLevelFilter(getLogLevelStrings().warningInt(), LogLevelType.LTTNG_EVENT_LOGLEVEL_RANGE);
-        LogLevelFilter llf2 = new LogLevelFilter(getLogLevelStrings().warningInt(), LogLevelType.LTTNG_EVENT_LOGLEVEL_SINGLE);
-        LogLevelFilter llf3 = new LogLevelFilter(getLogLevelStrings().infoInt(), LogLevelType.LTTNG_EVENT_LOGLEVEL_RANGE);
+        LogLevelSelector lls1 = new LogLevelSelector(getLogLevelStrings().warningInt(), LogLevelType.LTTNG_EVENT_LOGLEVEL_RANGE);
+        LogLevelSelector lls2 = new LogLevelSelector(getLogLevelStrings().warningInt(), LogLevelType.LTTNG_EVENT_LOGLEVEL_SINGLE);
+        LogLevelSelector lls3 = new LogLevelSelector(getLogLevelStrings().infoInt(), LogLevelType.LTTNG_EVENT_LOGLEVEL_RANGE);
 
         Set<EventRule> rules = Stream.of(
-                    new EventRule(EVENT_NAME_A, llf1, null),
-                    new EventRule(EVENT_NAME_A, llf2, null),
-                    new EventRule(EVENT_NAME_A, llf3, null))
+                    new EventRule(EVENT_NAME_A, lls1, null),
+                    new EventRule(EVENT_NAME_A, lls2, null),
+                    new EventRule(EVENT_NAME_A, lls3, null))
                 .collect(Collectors.toSet());
 
-        listener.setParameters(3, rules);
-
         session.enableEvent(EVENT_NAME_A, getLogLevelStrings().warningName(), false, null);
         session.enableEvent(EVENT_NAME_A, getLogLevelStrings().warningName(), true, null);
         session.enableEvent(EVENT_NAME_A, getLogLevelStrings().infoName(), false, null);
 
-        assertTrue(listener.waitForAllNotifications());
-        assertTrue(listener.checkRules());
+        assertEquals(3, listener.getNbNotifications());
+        assertEquals(rules, listener.getCurrentRules());
     }
 
     /**
@@ -223,14 +207,12 @@ public abstract class FilterListenerITBase {
                     new EventRule(EVENT_NAME_A, LOG_LEVEL_UNSPECIFIED, filterB))
                 .collect(Collectors.toSet());
 
-        listener.setParameters(3, rules);
-
         session.enableEvent(EVENT_NAME_A, null, false, null);
         session.enableEvent(EVENT_NAME_B, null, false, filterA);
         session.enableEvent(EVENT_NAME_C, null, false, filterB);
 
-        assertTrue(listener.waitForAllNotifications());
-        assertTrue(listener.checkRules());
+        assertEquals(3, listener.getNbNotifications());
+        assertEquals(rules, listener.getCurrentRules());
     }
 
     /**
@@ -244,15 +226,13 @@ public abstract class FilterListenerITBase {
                         new EventRule(EVENT_NAME_B, LOG_LEVEL_UNSPECIFIED, null))
                 .collect(Collectors.toSet());
 
-        listener.setParameters(2, rules);
-
         session.enableEvent(EVENT_NAME_A, null, false, null);
         session.enableEvent(EVENT_NAME_B, null, false, null);
-        FilterNotificationManager.getInstance().unregisterListener(listener);
+        FilterChangeNotifier.getInstance().unregisterListener(listener);
         session.enableEvent(EVENT_NAME_C, null, false, null);
 
-        assertTrue(listener.waitForAllNotifications());
-        assertTrue(listener.checkRules());
+        assertEquals(2, listener.getNbNotifications());
+        assertEquals(rules, listener.getCurrentRules());
     }
 
     /**
@@ -261,35 +241,33 @@ public abstract class FilterListenerITBase {
      */
     @Test
     public void testMultipleListeners() {
-        FilterNotificationManager fnm = FilterNotificationManager.getInstance();
+        FilterChangeNotifier fcn = FilterChangeNotifier.getInstance();
         TestFilterListener listener2 = new TestFilterListener();
         TestFilterListener listener3 = new TestFilterListener();
-        fnm.registerListener(listener2);
-        fnm.registerListener(listener3);
+        fcn.registerListener(listener2);
+        fcn.registerListener(listener3);
 
         Set<EventRule> rules = Stream.of(
                 new EventRule(EVENT_NAME_A, LOG_LEVEL_UNSPECIFIED, null),
                 new EventRule(EVENT_NAME_B, LOG_LEVEL_UNSPECIFIED, null))
             .collect(Collectors.toSet());
 
-        listener.setParameters(4, rules);
-        listener2.setParameters(4, rules);
-        listener3.setParameters(4, rules);
-
         session.enableEvent(EVENT_NAME_A, null, false, null);
         session.enableEvent(EVENT_NAME_B, null, false, null);
         session.enableEvent(EVENT_NAME_C, null, false, null);
         session.disableEvents(EVENT_NAME_C);
 
-        assertTrue(listener.waitForAllNotifications());
-        assertTrue(listener2.waitForAllNotifications());
-        assertTrue(listener3.waitForAllNotifications());
-        assertTrue(listener.checkRules());
-        assertTrue(listener2.checkRules());
-        assertTrue(listener3.checkRules());
+        assertEquals(4, listener.getNbNotifications());
+        assertEquals(rules, listener.getCurrentRules());
+
+        assertEquals(4, listener2.getNbNotifications());
+        assertEquals(rules, listener2.getCurrentRules());
+
+        assertEquals(4, listener3.getNbNotifications());
+        assertEquals(rules, listener3.getCurrentRules());
 
-        fnm.unregisterListener(listener2);
-        fnm.unregisterListener(listener3);
+        fcn.unregisterListener(listener2);
+        fcn.unregisterListener(listener3);
     }
 
     /**
@@ -299,31 +277,65 @@ public abstract class FilterListenerITBase {
      */
     @Test
     public void testUnattachedListeners() {
-        FilterNotificationManager fnm = FilterNotificationManager.getInstance();
+        FilterChangeNotifier fcn = FilterChangeNotifier.getInstance();
         TestFilterListener listener2 = new TestFilterListener();
         TestFilterListener listener3 = new TestFilterListener();
         /* We attach then detach listener2. We never attach listener3 */
-        fnm.registerListener(listener2);
-        fnm.unregisterListener(listener2);
+        fcn.registerListener(listener2);
+        fcn.unregisterListener(listener2);
 
         Set<EventRule> rules = Stream.of(
                 new EventRule(EVENT_NAME_A, LOG_LEVEL_UNSPECIFIED, null),
                 new EventRule(EVENT_NAME_B, LOG_LEVEL_UNSPECIFIED, null))
             .collect(Collectors.toSet());
 
-        listener.setParameters(2, rules);
-        listener2.setParameters(0, Collections.EMPTY_SET);
-        listener3.setParameters(0, Collections.EMPTY_SET);
+        session.enableEvent(EVENT_NAME_A, null, false, null);
+        session.enableEvent(EVENT_NAME_B, null, false, null);
+
+        assertEquals(2, listener.getNbNotifications());
+        assertEquals(rules, listener.getCurrentRules());
+
+        assertEquals(0, listener2.getNbNotifications());
+        assertEquals(Collections.EMPTY_SET, listener2.getCurrentRules());
+
+        assertEquals(0, listener3.getNbNotifications());
+        assertEquals(Collections.EMPTY_SET, listener3.getCurrentRules());
+    }
+
+    /**
+     * Test that a newly-registered listener correctly receives the "statedump",
+     * which means all the rules currently active, upon registration.
+     */
+    @Test
+    public void testStatedump() {
+        FilterChangeNotifier fcn = FilterChangeNotifier.getInstance();
+        TestFilterListener listener2 = new TestFilterListener();
+
+        Set<EventRule> rules1 = Stream.of(
+                new EventRule(EVENT_NAME_A, LOG_LEVEL_UNSPECIFIED, null),
+                new EventRule(EVENT_NAME_B, LOG_LEVEL_UNSPECIFIED, null))
+            .collect(Collectors.toSet());
+        Set<EventRule> rules2 = Stream.of(
+                new EventRule(EVENT_NAME_A, LOG_LEVEL_UNSPECIFIED, null),
+                new EventRule(EVENT_NAME_C, LOG_LEVEL_UNSPECIFIED, null))
+            .collect(Collectors.toSet());
 
         session.enableEvent(EVENT_NAME_A, null, false, null);
         session.enableEvent(EVENT_NAME_B, null, false, null);
+        fcn.registerListener(listener2);
+
+        /* We should have received the "statedump" when registering */
+        assertEquals(2, listener2.getNbNotifications());
+        assertEquals(rules1, listener2.getCurrentRules());
 
-        assertTrue(listener.waitForAllNotifications());
-        assertTrue(listener2.waitForAllNotifications());
-        assertTrue(listener3.waitForAllNotifications());
-        assertTrue(listener.checkRules());
-        assertTrue(listener2.checkRules());
-        assertTrue(listener3.checkRules());
+        session.enableEvent(EVENT_NAME_C, null, false, null);
+        session.disableEvents(EVENT_NAME_B);
+
+        /* Subsequent changes should also be received */
+        assertEquals(4, listener2.getNbNotifications());
+        assertEquals(rules2, listener2.getCurrentRules());
+
+        fcn.unregisterListener(listener2);
     }
 
     /**
@@ -344,39 +356,28 @@ public abstract class FilterListenerITBase {
     private static class TestFilterListener implements IFilterChangeListener {
 
         private final Set<EventRule> currentRules = new HashSet<>();
-        private CountDownLatch remainingExpectedNotifs;
-        private Set<EventRule> expectedRules;
+        private volatile int currentNotifications = 0;
 
         public TestFilterListener() {}
 
         @Override
         public void eventRuleAdded(EventRule rule) {
             currentRules.add(rule);
-            remainingExpectedNotifs.countDown();
+            currentNotifications++;
         }
 
         @Override
         public void eventRuleRemoved(EventRule rule) {
             currentRules.remove(rule);
-            remainingExpectedNotifs.countDown();
-        }
-
-        public void setParameters(int expectedNotifications, Set<EventRule> expectedRulesAtEnd) {
-            this.remainingExpectedNotifs = new CountDownLatch(expectedNotifications);
-            this.expectedRules = expectedRulesAtEnd;
+            currentNotifications++;
         }
 
-        public boolean waitForAllNotifications() {
-            System.out.println("Waiting for all notifications to arrive...");
-            try {
-                return remainingExpectedNotifs.await(10, TimeUnit.SECONDS);
-            } catch (InterruptedException e) {
-                return false;
-            }
+        public int getNbNotifications() {
+            return currentNotifications;
         }
 
-        public boolean checkRules() {
-            return ((remainingExpectedNotifs.getCount() == 0) && currentRules.equals(expectedRules));
+        public Set<EventRule> getCurrentRules() {
+            return currentRules;
         }
     }
 
This page took 0.029039 seconds and 4 git commands to generate.