Repository: brooklyn-server
Updated Branches:
  refs/heads/master 176977124 -> 2ec309b96


LogWatcher don't change log level if not needed

prevents the logs from missing useful output if testing for a higher-level 
message,
useful when investigating tests.

also use try-close syntax for LogWatcher.


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/6d42fb35
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/6d42fb35
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/6d42fb35

Branch: refs/heads/master
Commit: 6d42fb35234b82c32ea96fa25885d0942673ddda
Parents: 6dafb3f
Author: Alex Heneveld <alex.henev...@cloudsoftcorp.com>
Authored: Tue Sep 11 11:36:48 2018 +0100
Committer: Alex Heneveld <alex.henev...@cloudsoftcorp.com>
Committed: Tue Sep 11 11:36:48 2018 +0100

----------------------------------------------------------------------
 .../camp/brooklyn/ExternalConfigYamlTest.java   |  7 +-
 .../camp/brooklyn/FunctionSensorYamlTest.java   |  7 +-
 .../JcloudsTemplateOptionsYamlAwsTest.java      | 13 +--
 .../core/config/ConfigKeyDeprecationTest.java   | 20 +----
 .../effector/EffectorExceptionLoggedTest.java   |  6 +-
 .../core/entity/ApplicationLoggingTest.java     |  6 +-
 .../mgmt/persist/XmlMementoSerializerTest.java  |  7 +-
 .../rebind/RebindHistoricEntitySpecTest.java    |  6 +-
 .../stock/MathAggregatorFunctionsTest.java      |  9 +--
 .../ssh/SshMachineLocationIntegrationTest.java  |  6 +-
 .../location/ssh/SshMachineLocationTest.java    | 21 +----
 .../entity/machine/MachineEntityRebindTest.java |  8 +-
 .../SoftwareProcessStopsDuringStartTest.java    | 35 +++------
 .../brooklyn/test/framework/TestSensorTest.java |  8 +-
 .../org/apache/brooklyn/test/LogWatcher.java    | 83 +++++++-------------
 15 files changed, 65 insertions(+), 177 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d42fb35/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
----------------------------------------------------------------------
diff --git 
a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
 
b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
index abef044..622d887 100644
--- 
a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
+++ 
b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
@@ -321,10 +321,8 @@ public class ExternalConfigYamlTest extends 
AbstractYamlTest {
         String loggerName = BrooklynDslDeferredSupplier.class.getName();
         ch.qos.logback.classic.Level logLevel = 
ch.qos.logback.classic.Level.DEBUG;
         Predicate<ILoggingEvent> filter = 
EventPredicates.containsMessage("myval");
-        LogWatcher watcher = new LogWatcher(loggerName, logLevel, filter);
 
-        watcher.start();
-        try {
+        try (LogWatcher watcher = new LogWatcher(loggerName, logLevel, 
filter)) {
             String yaml = Joiner.on("\n").join(
                 "services:",
                 "- serviceType: 
org.apache.brooklyn.core.test.entity.TestApplication",
@@ -338,9 +336,6 @@ public class ExternalConfigYamlTest extends 
AbstractYamlTest {
         
             List<ILoggingEvent> events = watcher.getEvents();
             assertTrue(events.isEmpty(), "events="+events);
-            
-        } finally {
-            watcher.close();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d42fb35/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/FunctionSensorYamlTest.java
----------------------------------------------------------------------
diff --git 
a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/FunctionSensorYamlTest.java
 
b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/FunctionSensorYamlTest.java
index b6a15a9..3bd6dc5 100644
--- 
a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/FunctionSensorYamlTest.java
+++ 
b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/FunctionSensorYamlTest.java
@@ -157,10 +157,7 @@ public class FunctionSensorYamlTest extends 
AbstractYamlRebindTest {
                 Poller.class.getName());
         ch.qos.logback.classic.Level logLevel = 
ch.qos.logback.classic.Level.TRACE;
         Predicate<ILoggingEvent> filter = Predicates.alwaysTrue();
-        LogWatcher watcher = new LogWatcher(loggerNames, logLevel, filter);
-
-        watcher.start();
-        try {
+        try (LogWatcher watcher = new LogWatcher(loggerNames, logLevel, 
filter)) {
             Entity app = createAndStartApplication(
                     "services:",
                     "- type: " + TestEntity.class.getName(),
@@ -214,8 +211,6 @@ public class FunctionSensorYamlTest extends 
AbstractYamlRebindTest {
                 
fail("exceptionEvents="+watcher.printEventsToString(exceptionEvents));
             }
 
-        } finally {
-            watcher.close();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d42fb35/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsTemplateOptionsYamlAwsTest.java
----------------------------------------------------------------------
diff --git 
a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsTemplateOptionsYamlAwsTest.java
 
b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsTemplateOptionsYamlAwsTest.java
index 79f2e96..b11048f 100644
--- 
a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsTemplateOptionsYamlAwsTest.java
+++ 
b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/JcloudsTemplateOptionsYamlAwsTest.java
@@ -103,13 +103,10 @@ public class JcloudsTemplateOptionsYamlAwsTest extends 
AbstractJcloudsStubYamlTe
 
         final String ignoreOption = "Ignoring request to set template option";
 
-        final LogWatcher watcher = new LogWatcher(
-            
ImmutableList.of(LoggerFactory.getLogger(TemplateOptionsOption.class).getName()),
-            ch.qos.logback.classic.Level.WARN,
-            Predicates.and(containsMessage(ignoreOption), 
containsMessage("subnetId")));
-
-        watcher.start();
-        try {
+        try (final LogWatcher watcher = new LogWatcher(
+                
ImmutableList.of(LoggerFactory.getLogger(TemplateOptionsOption.class).getName()),
+                ch.qos.logback.classic.Level.WARN,
+                Predicates.and(containsMessage(ignoreOption), 
containsMessage("subnetId")))) {
             EntitySpec<?> spec = 
managementContext.getTypeRegistry().createSpecFromPlan(
                 CampTypePlanTransformer.FORMAT, yaml,
                 RegisteredTypeLoadingContexts.spec(Application.class), 
EntitySpec.class);
@@ -121,8 +118,6 @@ public class JcloudsTemplateOptionsYamlAwsTest extends 
AbstractJcloudsStubYamlTe
 
             AWSEC2TemplateOptions options = (AWSEC2TemplateOptions) 
findTemplateOptionsInCustomizerArgs();
             assertEquals(options.getSubnetId(), subnetValue);
-        } finally {
-            watcher.close();
         }
 
     }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d42fb35/core/src/test/java/org/apache/brooklyn/core/config/ConfigKeyDeprecationTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/brooklyn/core/config/ConfigKeyDeprecationTest.java
 
b/core/src/test/java/org/apache/brooklyn/core/config/ConfigKeyDeprecationTest.java
index b85ad58..f9a5751 100644
--- 
a/core/src/test/java/org/apache/brooklyn/core/config/ConfigKeyDeprecationTest.java
+++ 
b/core/src/test/java/org/apache/brooklyn/core/config/ConfigKeyDeprecationTest.java
@@ -213,14 +213,10 @@ public class ConfigKeyDeprecationTest extends 
BrooklynAppUnitTestSupport {
         Predicate<ILoggingEvent> filter = EventPredicates.containsMessages(
                 "Using deprecated config value on MyBaseEntity",
                 "should use 'superKey1', but used 'oldSuperKey1'");
-        LogWatcher watcher = new LogWatcher(loggerName, logLevel, filter);
 
-        watcher.start();
-        try {
+        try (LogWatcher watcher = new LogWatcher(loggerName, logLevel, 
filter)) {
             testUsingDeprecatedName();
             watcher.assertHasEvent();
-        } finally {
-            watcher.close();
         }
     }
 
@@ -232,14 +228,10 @@ public class ConfigKeyDeprecationTest extends 
BrooklynAppUnitTestSupport {
         Predicate<ILoggingEvent> filter = EventPredicates.containsMessages(
                 "Ignoring deprecated config value(s) on MyBaseEntity",
                 "because contains value for 'superKey1', other deprecated 
name(s) present were: [oldSuperKey1]");
-        LogWatcher watcher = new LogWatcher(loggerName, logLevel, filter);
-
-        watcher.start();
-        try {
+        
+        try (LogWatcher watcher = new LogWatcher(loggerName, logLevel, 
filter)) {
             testPrefersNonDeprecatedName();
             watcher.assertHasEvent();
-        } finally {
-            watcher.close();
         }
     }
 
@@ -250,14 +242,10 @@ public class ConfigKeyDeprecationTest extends 
BrooklynAppUnitTestSupport {
         Predicate<ILoggingEvent> filter = EventPredicates.containsMessages(
                 "Using deprecated config value on MyBaseEntity",
                 "should use 'superKey1', but used 'oldSuperKey1b' and ignored 
values present for other deprecated name(s) [oldSuperKey1b]");
-        LogWatcher watcher = new LogWatcher(loggerName, logLevel, filter);
 
-        watcher.start();
-        try {
+        try (LogWatcher watcher = new LogWatcher(loggerName, logLevel, 
filter)) {
             testPrefersFirstDeprecatedNameIfMultiple();
             watcher.assertHasEvent();
-        } finally {
-            watcher.close();
         }
     }
     

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d42fb35/core/src/test/java/org/apache/brooklyn/core/effector/EffectorExceptionLoggedTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/brooklyn/core/effector/EffectorExceptionLoggedTest.java
 
b/core/src/test/java/org/apache/brooklyn/core/effector/EffectorExceptionLoggedTest.java
index 875c398..ca0b3fe 100644
--- 
a/core/src/test/java/org/apache/brooklyn/core/effector/EffectorExceptionLoggedTest.java
+++ 
b/core/src/test/java/org/apache/brooklyn/core/effector/EffectorExceptionLoggedTest.java
@@ -143,10 +143,8 @@ public class EffectorExceptionLoggedTest extends 
BrooklynAppUnitTestSupport {
         ch.qos.logback.classic.Level logLevel = 
ch.qos.logback.classic.Level.DEBUG;
         Predicate<ILoggingEvent> filter = 
Predicates.and(EventPredicates.containsMessage("Error invoking myEffector"), 
                 
EventPredicates.containsExceptionStackLine(ThrowingEntitlementManager.class, 
"isEntitled"));
-        LogWatcher watcher = new LogWatcher(loggerName, logLevel, filter);
 
-        watcher.start();
-        try {
+        try (LogWatcher watcher = new LogWatcher(loggerName, logLevel, 
filter)) {
             Entities.submit(entity, 
Tasks.<Void>builder().displayName("Effector-invoker")
                     .description("Invoke in task")
                     .tag(BrooklynTaskTags.NON_TRANSIENT_TASK_TAG)
@@ -160,8 +158,6 @@ public class EffectorExceptionLoggedTest extends 
BrooklynAppUnitTestSupport {
                     .blockUntilEnded();
 
             watcher.assertHasEventEventually();
-        } finally {
-            watcher.close();
         }
     }
     

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d42fb35/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
 
b/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
index 66c2e92..d9fa7bc 100644
--- 
a/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
+++ 
b/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
@@ -152,10 +152,8 @@ public class ApplicationLoggingTest extends 
BrooklynAppUnitTestSupport {
         ids.push(app.getId());
         final TestEntityWithLogging entity = 
app.createAndManageChild(EntitySpec.create(TestEntityWithLogging.class));
         final TestEntityWithLogging child = 
entity.addChild(EntitySpec.create(EntitySpec.create(TestEntityWithLogging.class)));
-        LogWatcher watcher = new LogWatcher(loggerName, logLevel, 
containsMessage(app.getId()));
 
-        watcher.start();
-        try {
+        try (LogWatcher watcher = new LogWatcher(loggerName, logLevel, 
containsMessage(app.getId()))) {
             app.start(ImmutableList.of(app.newSimulatedLocation()));
             assertHealthEventually(app, Lifecycle.RUNNING, true);
             final TaskAdaptable<Void> stopTask = Effectors.invocation(app, 
Startable.STOP, ImmutableMap.of());
@@ -181,8 +179,6 @@ public class ApplicationLoggingTest extends 
BrooklynAppUnitTestSupport {
             watcher.assertHasEvent(matchingRegexes(".*" +
                 ImmutableList.of(app.getId(), entity.getId(), 
child.getId()).toString()
                 + ".*from entity.*" + child.getId() + ".*"));
-        } finally {
-            watcher.close();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d42fb35/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializerTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializerTest.java
 
b/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializerTest.java
index 1efbced..2eb9df1 100644
--- 
a/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializerTest.java
+++ 
b/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/XmlMementoSerializerTest.java
@@ -618,15 +618,10 @@ public class XmlMementoSerializerTest {
         String loggerName = UnwantedStateLoggingMapper.class.getName();
         ch.qos.logback.classic.Level logLevel = 
ch.qos.logback.classic.Level.WARN;
         Predicate<ILoggingEvent> filter = 
EventPredicates.containsMessage("Task object serialization is not supported or 
recommended"); 
-        LogWatcher watcher = new LogWatcher(loggerName, logLevel, filter);
-        
         String serializedForm;
-        watcher.start();
-        try {
+        try (LogWatcher watcher = new LogWatcher(loggerName, logLevel, 
filter)) {
             serializedForm = serializer.toString(completedTask);
             watcher.assertHasEvent();
-        } finally {
-            watcher.close();
         }
 
         assertEquals(serializedForm.trim(), 
"<"+BasicTask.class.getName()+">myval</"+BasicTask.class.getName()+">");

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d42fb35/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindHistoricEntitySpecTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindHistoricEntitySpecTest.java
 
b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindHistoricEntitySpecTest.java
index 7a11cde..ba0368e 100644
--- 
a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindHistoricEntitySpecTest.java
+++ 
b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindHistoricEntitySpecTest.java
@@ -103,9 +103,7 @@ public class RebindHistoricEntitySpecTest extends 
AbstractRebindHistoricTest {
         addMemento(BrooklynObjectType.ENTITY, 
"entity-with-entityspec-containing-policies", "aeifj99fjd");
         
         Predicate<ILoggingEvent> filter = EventPredicates.containsMessage("NOT 
SUPPORTED"); 
-        LogWatcher watcher = new LogWatcher(EntitySpec.class.getName(), 
ch.qos.logback.classic.Level.WARN, filter);
-        watcher.start();
-        try {
+        try (LogWatcher watcher = new LogWatcher(EntitySpec.class.getName(), 
ch.qos.logback.classic.Level.WARN, filter)) {
             rebind(RebindOptions.create().exceptionHandler(exceptionHandler));
             watcher.assertHasEventEventually();
             
@@ -113,8 +111,6 @@ public class RebindHistoricEntitySpecTest extends 
AbstractRebindHistoricTest {
             Optional<ILoggingEvent> enrichersWarning = 
Iterables.tryFind(watcher.getEvents(), 
EventPredicates.containsMessage("enrichers will be ignored"));
             assertTrue(policiesWarning.isPresent());
             assertTrue(enrichersWarning.isPresent());
-        } finally {
-            watcher.close();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d42fb35/core/src/test/java/org/apache/brooklyn/enricher/stock/MathAggregatorFunctionsTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/brooklyn/enricher/stock/MathAggregatorFunctionsTest.java
 
b/core/src/test/java/org/apache/brooklyn/enricher/stock/MathAggregatorFunctionsTest.java
index 16ef9d5..b46c980 100644
--- 
a/core/src/test/java/org/apache/brooklyn/enricher/stock/MathAggregatorFunctionsTest.java
+++ 
b/core/src/test/java/org/apache/brooklyn/enricher/stock/MathAggregatorFunctionsTest.java
@@ -108,13 +108,11 @@ public class MathAggregatorFunctionsTest {
     public void testTryCastInputValuesWhenNotNumbers() throws Exception {
         Function<Collection<? extends Number>, Integer> func = 
MathAggregatorFunctions.computingSum(null, null, Integer.class);
         
-        final LogWatcher watcher = new LogWatcher(
+        try (final LogWatcher watcher = new LogWatcher(
                 
ImmutableList.of(LoggerFactory.getLogger(MathAggregatorFunctions.class).getName()),
                 ch.qos.logback.classic.Level.WARN,
-                containsMessage("Input to numeric aggregator is not a 
number"));
+                containsMessage("Input to numeric aggregator is not a 
number"))) {
 
-        watcher.start();
-        try {
             // Sums only things that can be numbers, ingnoring others; logs 
non-numbers only once
             List<Number> inputWithNonNumber = (List<Number>) (List) 
MutableList.<Object>of(1, null, "not a number", "4", true);
             for (int i = 0; i < 2; i++) {
@@ -132,9 +130,6 @@ public class MathAggregatorFunctionsTest {
                 assertEquals(func.apply(inputWithNonNumber), (Integer)5);
             }
             assertEquals(watcher.getEvents().size(), 1, 
"events="+watcher.getEvents());
-            
-        } finally {
-            watcher.close();
         }
     }
     

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d42fb35/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationIntegrationTest.java
 
b/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationIntegrationTest.java
index e648c32..ecf1914 100644
--- 
a/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationIntegrationTest.java
+++ 
b/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationIntegrationTest.java
@@ -321,18 +321,14 @@ public class SshMachineLocationIntegrationTest extends 
SshMachineLocationTest {
                 SshjTool.class.getName());
         ch.qos.logback.classic.Level logLevel = 
ch.qos.logback.classic.Level.DEBUG;
         Predicate<ILoggingEvent> filter = Predicates.alwaysTrue();
-        LogWatcher watcher = new LogWatcher(loggerNames, logLevel, filter);
+        try (LogWatcher watcher = new LogWatcher(loggerNames, logLevel, 
filter)) {
 
-        watcher.start();
-        try {
             host.execCommands("mySummary", ImmutableList.of("echo mystdout1", 
"echo mystdout2", "echo mystderr1 1>&2", "echo mystderr2 1>&2"));
             
             
watcher.assertHasEvent(EventPredicates.containsMessage(":22:stdout] 
mystdout1"));
             
watcher.assertHasEvent(EventPredicates.containsMessage(":22:stdout] 
mystdout2"));
             
watcher.assertHasEvent(EventPredicates.containsMessage(":22:stderr] 
mystderr1"));
             
watcher.assertHasEvent(EventPredicates.containsMessage(":22:stderr] 
mystderr2"));
-        } finally {
-            watcher.close();
         }
     }
     

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d42fb35/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationTest.java
 
b/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationTest.java
index d25991c..be6aad5 100644
--- 
a/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationTest.java
+++ 
b/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationTest.java
@@ -321,17 +321,12 @@ public class SshMachineLocationTest extends 
BrooklynAppUnitTestSupport {
         Predicate<ILoggingEvent> filter = Predicates.or(
                 EventPredicates.containsMessage("DB_PASSWORD"), 
                 EventPredicates.containsMessage("mypassword"));
-        LogWatcher watcher = new LogWatcher(loggerNames, logLevel, filter);
-
-        watcher.start();
-        try {
+        try (LogWatcher watcher = new LogWatcher(loggerNames, logLevel, 
filter)) {
             host.execCommands("mySummary", ImmutableList.of("true"), 
ImmutableMap.of("DB_PASSWORD", "mypassword"));
             watcher.assertHasEventEventually();
             
             Optional<ILoggingEvent> eventWithPasswd = 
Iterables.tryFind(watcher.getEvents(), 
EventPredicates.containsMessage("mypassword"));
             assertFalse(eventWithPasswd.isPresent(), "event="+eventWithPasswd);
-        } finally {
-            watcher.close();
         }
     }
     
@@ -344,18 +339,13 @@ public class SshMachineLocationTest extends 
BrooklynAppUnitTestSupport {
                 SshjTool.class.getName());
         ch.qos.logback.classic.Level logLevel = 
ch.qos.logback.classic.Level.DEBUG;
         Predicate<ILoggingEvent> filter = Predicates.alwaysTrue();
-        LogWatcher watcher = new LogWatcher(loggerNames, logLevel, filter);
-
-        watcher.start();
-        try {
+        try (LogWatcher watcher = new LogWatcher(loggerNames, logLevel, 
filter)) {
             host.execCommands("mySummary", ImmutableList.of("mycommand"));
             
             
watcher.assertHasEvent(EventPredicates.containsMessage("[1.2.3.4:22:stdout] 
mystdout1"));
             
watcher.assertHasEvent(EventPredicates.containsMessage("[1.2.3.4:22:stdout] 
mystdout2"));
             
watcher.assertHasEvent(EventPredicates.containsMessage("[1.2.3.4:22:stderr] 
mystderr1"));
             
watcher.assertHasEvent(EventPredicates.containsMessage("[1.2.3.4:22:stderr] 
mystderr2"));
-        } finally {
-            watcher.close();
         }
     }
     
@@ -368,10 +358,7 @@ public class SshMachineLocationTest extends 
BrooklynAppUnitTestSupport {
                 SshjTool.class.getName());
         ch.qos.logback.classic.Level logLevel = 
ch.qos.logback.classic.Level.DEBUG;
         Predicate<ILoggingEvent> filter = Predicates.alwaysTrue();
-        LogWatcher watcher = new LogWatcher(loggerNames, logLevel, filter);
-
-        watcher.start();
-        try {
+        try (LogWatcher watcher = new LogWatcher(loggerNames, logLevel, 
filter)) {
             host.execCommands(
                     
ImmutableMap.of(SshMachineLocation.NO_STDOUT_LOGGING.getName(), true, 
SshMachineLocation.NO_STDERR_LOGGING.getName(), true), 
                     "mySummary", 
@@ -379,8 +366,6 @@ public class SshMachineLocationTest extends 
BrooklynAppUnitTestSupport {
             
             assertFalse(Iterables.tryFind(watcher.getEvents(), 
EventPredicates.containsMessage(":stdout]")).isPresent());
             assertFalse(Iterables.tryFind(watcher.getEvents(), 
EventPredicates.containsMessage(":stderr]")).isPresent());
-        } finally {
-            watcher.close();
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d42fb35/software/base/src/test/java/org/apache/brooklyn/entity/machine/MachineEntityRebindTest.java
----------------------------------------------------------------------
diff --git 
a/software/base/src/test/java/org/apache/brooklyn/entity/machine/MachineEntityRebindTest.java
 
b/software/base/src/test/java/org/apache/brooklyn/entity/machine/MachineEntityRebindTest.java
index 1ad5dfe..5d2bfd6 100644
--- 
a/software/base/src/test/java/org/apache/brooklyn/entity/machine/MachineEntityRebindTest.java
+++ 
b/software/base/src/test/java/org/apache/brooklyn/entity/machine/MachineEntityRebindTest.java
@@ -86,10 +86,7 @@ public class MachineEntityRebindTest extends 
RebindTestFixtureWithApp {
         String loggerName = InternalFactory.class.getName();
         ch.qos.logback.classic.Level logLevel = 
ch.qos.logback.classic.Level.WARN;
         Predicate<ILoggingEvent> filter = Predicates.alwaysTrue();
-        LogWatcher watcher = new LogWatcher(loggerName, logLevel, filter);
-
-        watcher.start();
-        try {
+        try (LogWatcher watcher = new LogWatcher(loggerName, logLevel, 
filter)) {
             origApp.createAndManageChild(EntitySpec.create(MachineEntity.class)
                     
.configure(BrooklynConfigKeys.SKIP_ON_BOX_BASE_DIR_RESOLUTION, true));
             origApp.start(ImmutableList.of(origMachine));
@@ -98,9 +95,6 @@ public class MachineEntityRebindTest extends 
RebindTestFixtureWithApp {
         
             List<ILoggingEvent> events = watcher.getEvents();
             assertTrue(events.isEmpty(), "events="+events);
-            
-        } finally {
-            watcher.close();
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d42fb35/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartTest.java
----------------------------------------------------------------------
diff --git 
a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartTest.java
 
b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartTest.java
index 46253c0..3c8c100 100644
--- 
a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartTest.java
+++ 
b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartTest.java
@@ -55,6 +55,7 @@ import org.apache.brooklyn.util.collections.MutableList;
 import org.apache.brooklyn.util.core.internal.ssh.RecordingSshTool;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.time.Duration;
+import org.apache.brooklyn.util.time.Durations;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -149,28 +150,23 @@ public class SoftwareProcessStopsDuringStartTest extends 
BrooklynAppUnitTestSupp
         loc.getObtainCalledLatch(0).await();
         
         // Calling stop - it should block
-        // TODO Nicer way of ensuring that stop is really waiting? We wait for 
the log message!
         Future<?> stopFuture;
-        LogWatcher watcher = new LogWatcher(
+        try (LogWatcher watcher = new LogWatcher(
                 MachineLifecycleEffectorTasks.class.getName(), 
                 ch.qos.logback.classic.Level.INFO,
-                EventPredicates.containsMessage("for the machine to finish 
provisioning, before terminating it") );
-        watcher.start();
-        try {
+                EventPredicates.containsMessage("for the machine to finish 
provisioning, before terminating it") )) {
             stopFuture = executor.submit(new Runnable() {
                 @Override
                 public void run() {
                     entity.stop();
                 }});
             watcher.assertHasEventEventually();
-        } finally {
-            watcher.close();
         }
         assertFalse(stopFuture.isDone());
 
         // When the loc.obtain() call returns, that will allow stop() to 
complete
         loc.getObtainResumeLatch(0).countDown();
-        stopFuture.get(Asserts.DEFAULT_LONG_TIMEOUT.toMilliseconds(), 
TimeUnit.MILLISECONDS); // should be successful
+        Durations.get(stopFuture, Asserts.DEFAULT_LONG_TIMEOUT); // stop 
should be successful, even if start is concurrent
         try {
             // usually completes quickly, but sometimes can take a long time
             startFuture.get(Asserts.DEFAULT_LONG_TIMEOUT.toMilliseconds(), 
TimeUnit.MILLISECONDS);
@@ -182,6 +178,9 @@ public class SoftwareProcessStopsDuringStartTest extends 
BrooklynAppUnitTestSupp
             Assert.fail("start() timed out during concurrent stop; acceptable, 
but test should be fixed", e);
         }
         
+        // whether start fails or succeeds, at this point loc.obtain will have 
been called,
+        // and loc.stop waited for obtaining to complete (log message above),
+        // and then will have noted the release call
         assertEquals(loc.getCalls(), ImmutableList.of("obtain", "release"));
     }
 
@@ -197,20 +196,16 @@ public class SoftwareProcessStopsDuringStartTest extends 
BrooklynAppUnitTestSupp
             }});
         loc.getObtainCalledLatch(0).await();
         
-        LogWatcher watcher = new LogWatcher(
+        try (LogWatcher watcher = new LogWatcher(
                 MachineLifecycleEffectorTasks.class.getName(), 
                 ch.qos.logback.classic.Level.WARN,
-                EventPredicates.containsMessage("timed out after 100ms waiting 
for the machine to finish provisioning - machine may we left running") );
-
-        watcher.start();
-        try {
+                EventPredicates.containsMessage("timed out after 100ms waiting 
for the machine to finish provisioning - machine may we left running") )) {
+            
             Stopwatch stopwatch = Stopwatch.createStarted();
             entity.stop();
             long elapsed = stopwatch.elapsed(TimeUnit.MILLISECONDS);
             assertEquals(watcher.getEvents().size(), 1);
             assertTrue(elapsed > (100 - 10), "elapsed="+elapsed);
-        } finally {
-            watcher.close();
         }
         
         assertEquals(loc.getCalls(), ImmutableList.of("obtain"));
@@ -228,22 +223,18 @@ public class SoftwareProcessStopsDuringStartTest extends 
BrooklynAppUnitTestSupp
         loc.getObtainCalledLatch(0).await();
         
         // Calling stop - it should block
-        // TODO Nicer way of ensuring that stop is really waiting? We wait for 
the log message!
         Future<?> stopFuture;
-        LogWatcher watcher = new LogWatcher(
+        try (LogWatcher watcher = new LogWatcher(
                 MachineLifecycleEffectorTasks.class.getName(), 
                 ch.qos.logback.classic.Level.INFO,
-                EventPredicates.containsMessage("for the machine to finish 
provisioning, before terminating it") );
-        watcher.start();
-        try {
+                EventPredicates.containsMessage("for the machine to finish 
provisioning, before terminating it") )) {
+            
             stopFuture = executor.submit(new Runnable() {
                 @Override
                 public void run() {
                     entity.stop();
                 }});
             watcher.assertHasEventEventually();
-        } finally {
-            watcher.close();
         }
         assertFalse(stopFuture.isDone());
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d42fb35/test-framework/src/test/java/org/apache/brooklyn/test/framework/TestSensorTest.java
----------------------------------------------------------------------
diff --git 
a/test-framework/src/test/java/org/apache/brooklyn/test/framework/TestSensorTest.java
 
b/test-framework/src/test/java/org/apache/brooklyn/test/framework/TestSensorTest.java
index 38c83e2..f98ceb4 100644
--- 
a/test-framework/src/test/java/org/apache/brooklyn/test/framework/TestSensorTest.java
+++ 
b/test-framework/src/test/java/org/apache/brooklyn/test/framework/TestSensorTest.java
@@ -364,10 +364,7 @@ public class TestSensorTest extends 
BrooklynAppUnitTestSupport {
         Predicate<ILoggingEvent> repeatedFailureMsgMatcher = 
EventPredicates.containsMessage("repeated failure; excluding stacktrace");
         Predicate<ILoggingEvent> stacktraceMatcher = 
EventPredicates.containsExceptionStackLine(TestFrameworkAssertions.class, 
"checkActualAgainstAssertions");
         Predicate<ILoggingEvent> filter = 
Predicates.or(repeatedFailureMsgMatcher, stacktraceMatcher);
-        LogWatcher watcher = new LogWatcher(loggerName, logLevel, filter);
-
-        watcher.start();
-        try {
+        try (LogWatcher watcher = new LogWatcher(loggerName, logLevel, 
filter)) {
             // Invoke async; will let it complete after we see the log 
messages we expect
             Task<?> task = Entities.invokeEffector(app, app, Startable.START, 
ImmutableMap.of("locations", locs));
 
@@ -389,9 +386,6 @@ public class TestSensorTest extends 
BrooklynAppUnitTestSupport {
             // that we didn't get another stacktrace
             stacktraceEvents = watcher.getEvents(stacktraceMatcher);
             assertEquals(Integer.valueOf(stacktraceEvents.size()), 
Integer.valueOf(1), "stacktraceEvents="+stacktraceEvents.size());
-            
-        } finally {
-            watcher.close();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d42fb35/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
----------------------------------------------------------------------
diff --git 
a/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java 
b/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
index 8b3b451..04eab15 100644
--- a/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
+++ b/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
@@ -19,14 +19,13 @@
 package org.apache.brooklyn.test;
 
 import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
 import static org.testng.Assert.assertFalse;
 
 import java.io.ByteArrayOutputStream;
 import java.io.Closeable;
 import java.io.IOException;
-import java.lang.reflect.Proxy;
 import java.io.PrintStream;
+import java.lang.reflect.Proxy;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -108,11 +107,7 @@ public class LogWatcher implements Closeable {
         }
 
         public static Predicate<ILoggingEvent> containsException() {
-            return new Predicate<ILoggingEvent>() {
-                @Override public boolean apply(ILoggingEvent input) {
-                    return (input != null) && (input.getThrowableProxy() != 
null);
-                }
-            };
+            return input -> (input != null) && (input.getThrowableProxy() != 
null);
         }
 
         public static Predicate<ILoggingEvent> containsExceptionMessage(final 
String expected) {
@@ -120,36 +115,26 @@ public class LogWatcher implements Closeable {
         }
 
         public static Predicate<ILoggingEvent> containsExceptionMessages(final 
String... expecteds) {
-            return new Predicate<ILoggingEvent>() {
-                @Override public boolean apply(ILoggingEvent input) {
-                    IThrowableProxy throwable = (input != null) ? 
input.getThrowableProxy() : null;
-                    String msg = (throwable != null) ? throwable.getMessage() 
: null;
-                    if (msg == null) return false;
-                    for (String expected : expecteds) {
-                        if (!msg.contains(expected)) return false;
-                    }
-                    return true;
+            return input -> {
+                IThrowableProxy throwable = (input != null) ? 
input.getThrowableProxy() : null;
+                String msg = (throwable != null) ? throwable.getMessage() : 
null;
+                if (msg == null) return false;
+                for (String expected : expecteds) {
+                    if (!msg.contains(expected)) return false;
                 }
+                return true;
             };
         }
         public static Predicate<ILoggingEvent> 
containsExceptionClassname(final String expected) {
-            return new Predicate<ILoggingEvent>() {
-                @Override public boolean apply(ILoggingEvent input) {
-                    IThrowableProxy throwable = (input != null) ? 
input.getThrowableProxy() : null;
-                    String classname = (throwable != null) ? 
throwable.getClassName() : null;
-                    if (classname == null) return false;
-                    return classname.contains(expected);
-                }
+            return input -> {
+                IThrowableProxy throwable = (input != null) ? 
input.getThrowableProxy() : null;
+                String classname = (throwable != null) ? 
throwable.getClassName() : null;
+                if (classname == null) return false;
+                return classname.contains(expected);
             };
         }
         public static Predicate<ILoggingEvent> levelGeaterOrEqual(final Level 
expectedLevel) {
-            return new Predicate<ILoggingEvent>() {
-                @Override public boolean apply(ILoggingEvent input) {
-                    if (input == null) return false;
-                    Level level = input.getLevel();
-                    return level.isGreaterOrEqual(expectedLevel);
-                }
-            };
+            return input -> input == null ? false : 
input.getLevel().isGreaterOrEqual(expectedLevel);
         }
     }
     
@@ -164,7 +149,6 @@ public class LogWatcher implements Closeable {
         this(ImmutableList.of(checkNotNull(loggerName, "loggerName")), 
loggerLevel, filter);
     }
     
-    @SuppressWarnings("unchecked")
     public LogWatcher(Iterable<String> loggerNames, 
ch.qos.logback.classic.Level loggerLevel, final Predicate<? super 
ILoggingEvent> filter) {
 
         this.loggerLevel = checkNotNull(loggerLevel, "loggerLevel");
@@ -206,7 +190,7 @@ public class LogWatcher implements Closeable {
         // for root, with a pattern layout encoder, and re-uses its encoder 
pattern.
         // This is (at time of writing) as defined in 
logback-appender-stdout.xml.
         final Appender<ILoggingEvent> appender = 
lc.getLogger("ROOT").getAppender("STDOUT");
-        final ConsoleAppender stdout = ConsoleAppender.class.cast(appender);
+        final ConsoleAppender<?> stdout = ConsoleAppender.class.cast(appender);
         final PatternLayoutEncoder stdoutEncoder = 
PatternLayoutEncoder.class.cast(stdout.getEncoder());
         ple.setPattern(stdoutEncoder.getPattern());
         ple.setContext(lc);
@@ -217,21 +201,19 @@ public class LogWatcher implements Closeable {
         this.appender.start();
 
         for (String loggerName : loggerNames) {
-            final ch.qos.logback.classic.Logger logger =
-                
(ch.qos.logback.classic.Logger)LoggerFactory.getLogger(checkNotNull(loggerName, 
"loggerName"));
-            logger.addAppender(this.appender);
-            logger.setLevel(this.loggerLevel);
-            logger.setAdditive(false);
-            watchedLoggers.add(logger);
+            watchedLoggers.add( 
(ch.qos.logback.classic.Logger)LoggerFactory.getLogger(checkNotNull(loggerName, 
"loggerName")) );
         }
+
+        start();
     }
     
+    /** @deprecated since 1.0.0 called by constructor, will go private as no 
need for anyone else to call */
     public void start() {
-
-        checkState(!closed.get(), "Cannot start LogWatcher after closed");
         for (ch.qos.logback.classic.Logger watchedLogger : watchedLoggers) {
-            origLevels.put(watchedLogger, watchedLogger.getLevel());
-            watchedLogger.setLevel(loggerLevel);
+            if (loggerLevel.toInteger() < 
watchedLogger.getEffectiveLevel().toInteger()) {
+                origLevels.putIfAbsent(watchedLogger, 
watchedLogger.getLevel());
+                watchedLogger.setLevel(loggerLevel);
+            }
             watchedLogger.addAppender(appender);
         }
     }
@@ -239,12 +221,10 @@ public class LogWatcher implements Closeable {
     @Override
     public void close() {
         if (closed.compareAndSet(false, true)) {
-            if (watchedLoggers != null) {
-                for (ch.qos.logback.classic.Logger watchedLogger : 
watchedLoggers) {
-                    Level origLevel = origLevels.get(watchedLogger);
-                    if (origLevel != null) watchedLogger.setLevel(origLevel);
-                    watchedLogger.detachAppender(appender);
-                }
+            for (ch.qos.logback.classic.Logger watchedLogger : watchedLoggers) 
{
+                Level origLevel = origLevels.get(watchedLogger);
+                if (origLevel != null) watchedLogger.setLevel(origLevel);
+                watchedLogger.detachAppender(appender);
             }
             watchedLoggers.clear();
             origLevels.clear();
@@ -268,17 +248,14 @@ public class LogWatcher implements Closeable {
             @Override
             public void run() {
                 assertFalse(events.isEmpty());
+                System.out.println("EVENTS: "+events);
             }});
         return getEvents();
     }
 
     public List<ILoggingEvent> assertHasEventEventually(final Predicate<? 
super ILoggingEvent> filter) {
         final AtomicReference<List<ILoggingEvent>> result = new 
AtomicReference<>();
-        Asserts.succeedsEventually(new Runnable() {
-            @Override
-            public void run() {
-                result.set(assertHasEvent(filter));
-            }});
+        Asserts.succeedsEventually(() -> result.set(assertHasEvent(filter)));
         return result.get();
     }
 

Reply via email to