You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dw...@apache.org on 2012/03/22 21:30:18 UTC
svn commit: r1304032 - in /lucene/dev/branches/branch_3x/lucene:
core/src/test/org/apache/lucene/util/junitcompat/
test-framework/src/java/org/apache/lucene/util/
Author: dweiss
Date: Thu Mar 22 20:30:18 2012
New Revision: 1304032
URL: http://svn.apache.org/viewvc?rev=1304032&view=rev
Log:
LUCENE-3847: ignore user.timezone because it is set by java logging system and this is hard to predict.
Modified:
lucene/dev/branches/branch_3x/lucene/core/src/test/org/apache/lucene/util/junitcompat/TestSystemPropertiesInvariantRule.java
lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/SystemPropertiesInvariantRule.java
lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/SystemPropertiesRestoreRule.java
Modified: lucene/dev/branches/branch_3x/lucene/core/src/test/org/apache/lucene/util/junitcompat/TestSystemPropertiesInvariantRule.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/core/src/test/org/apache/lucene/util/junitcompat/TestSystemPropertiesInvariantRule.java?rev=1304032&r1=1304031&r2=1304032&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/core/src/test/org/apache/lucene/util/junitcompat/TestSystemPropertiesInvariantRule.java (original)
+++ lucene/dev/branches/branch_3x/lucene/core/src/test/org/apache/lucene/util/junitcompat/TestSystemPropertiesInvariantRule.java Thu Mar 22 20:30:18 2012
@@ -20,11 +20,18 @@ package org.apache.lucene.util.junitcomp
import java.util.Properties;
import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util.SystemPropertiesInvariantRule;
+import org.apache.lucene.util.SystemPropertiesRestoreRule;
import org.junit.*;
+import org.junit.rules.TestRule;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
+/**
+ * @see SystemPropertiesRestoreRule
+ * @see SystemPropertiesInvariantRule
+ */
public class TestSystemPropertiesInvariantRule extends WithNestedTests {
public static final String PROP_KEY1 = "new-property-1";
public static final String VALUE1 = "new-value-1";
@@ -85,6 +92,16 @@ public class TestSystemPropertiesInvaria
}
}
+ public static class IgnoredProperty {
+ @Rule
+ public TestRule invariant = new SystemPropertiesInvariantRule(PROP_KEY1);
+
+ @Test
+ public void testMethod1() {
+ System.setProperty(PROP_KEY1, VALUE1);
+ }
+ }
+
@Test
public void testRuleInvariantBeforeClass() {
Result runClasses = JUnitCore.runClasses(InBeforeClass.class);
@@ -120,4 +137,16 @@ public class TestSystemPropertiesInvaria
Assert.assertTrue(runClasses.getFailures().get(0).getMessage().contains("Will pass"));
Assert.assertEquals(3, runClasses.getRunCount());
}
+
+ @Test
+ public void testIgnoredProperty() {
+ System.clearProperty(PROP_KEY1);
+ try {
+ Result runClasses = JUnitCore.runClasses(IgnoredProperty.class);
+ Assert.assertEquals(0, runClasses.getFailureCount());
+ Assert.assertEquals(VALUE1, System.getProperty(PROP_KEY1));
+ } finally {
+ System.clearProperty(PROP_KEY1);
+ }
+ }
}
Modified: lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java?rev=1304032&r1=1304031&r2=1304032&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java (original)
+++ lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java Thu Mar 22 20:30:18 2012
@@ -223,13 +223,23 @@ public abstract class LuceneTestCase ext
private static final UncaughtExceptionsRule uncaughtExceptionsRule = new UncaughtExceptionsRule(null);
/**
+ * These property keys will be ignored in verification of altered properties.
+ * @see SystemPropertiesInvariantRule
+ * @see #ruleChain
+ * @see #classRules
+ */
+ private static final String [] ignoredInvariantProperties = {
+ "user.timezone"
+ };
+
+ /**
* This controls how suite-level rules are nested. It is important that _all_ rules declared
* in {@link LuceneTestCase} are executed in proper order if they depend on each
* other.
*/
@ClassRule
public static TestRule classRules = RuleChain
- .outerRule(new SystemPropertiesInvariantRule())
+ .outerRule(new SystemPropertiesInvariantRule(ignoredInvariantProperties))
.around(classNameRule)
.around(uncaughtExceptionsRule);
@@ -243,7 +253,7 @@ public abstract class LuceneTestCase ext
.outerRule(new RememberThreadRule())
.around(new UncaughtExceptionsRule(this))
.around(new TestResultInterceptorRule())
- .around(new SystemPropertiesInvariantRule())
+ .around(new SystemPropertiesInvariantRule(ignoredInvariantProperties))
.around(new InternalSetupTeardownRule())
.around(new SubclassSetupTeardownRule());
Modified: lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/SystemPropertiesInvariantRule.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/SystemPropertiesInvariantRule.java?rev=1304032&r1=1304031&r2=1304032&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/SystemPropertiesInvariantRule.java (original)
+++ lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/SystemPropertiesInvariantRule.java Thu Mar 22 20:30:18 2012
@@ -18,7 +18,11 @@ package org.apache.lucene.util;
*/
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.Iterator;
+import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
@@ -28,6 +32,32 @@ import org.junit.runners.model.MultipleF
import org.junit.runners.model.Statement;
public class SystemPropertiesInvariantRule implements TestRule {
+ /**
+ * Ignored property keys.
+ */
+ private final HashSet<String> ignoredProperties;
+
+ /**
+ * Cares about all properties.
+ */
+ public SystemPropertiesInvariantRule() {
+ this(Collections.<String>emptySet());
+ }
+
+ /**
+ * Don't care about the given set of properties.
+ */
+ public SystemPropertiesInvariantRule(String... ignoredProperties) {
+ this.ignoredProperties = new HashSet<String>(Arrays.asList(ignoredProperties));
+ }
+
+ /**
+ * Don't care about the given set of properties.
+ */
+ public SystemPropertiesInvariantRule(Set<String> ignoredProperties) {
+ this.ignoredProperties = new HashSet<String>(ignoredProperties);
+ }
+
public Statement apply(final Statement s, Description d) {
return new Statement() {
public void evaluate() throws Throwable {
@@ -38,7 +68,12 @@ public class SystemPropertiesInvariantRu
} catch (Throwable t) {
errors.add(t);
} finally {
- TreeMap<String,String> after = SystemPropertiesRestoreRule.cloneAsMap(System.getProperties());
+ final TreeMap<String,String> after = SystemPropertiesRestoreRule.cloneAsMap(System.getProperties());
+
+ // Remove ignored if they exist.
+ before.keySet().removeAll(ignoredProperties);
+ after.keySet().removeAll(ignoredProperties);
+
if (!after.equals(before)) {
errors.add(
new AssertionError("System properties invariant violated.\n" +
@@ -46,7 +81,7 @@ public class SystemPropertiesInvariantRu
}
// Restore original properties.
- SystemPropertiesRestoreRule.restore(before, after);
+ SystemPropertiesRestoreRule.restore(before, after, ignoredProperties);
}
MultipleFailureException.assertEmpty(errors);
Modified: lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/SystemPropertiesRestoreRule.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/SystemPropertiesRestoreRule.java?rev=1304032&r1=1304031&r2=1304032&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/SystemPropertiesRestoreRule.java (original)
+++ lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/SystemPropertiesRestoreRule.java Thu Mar 22 20:30:18 2012
@@ -27,6 +27,32 @@ import org.junit.runners.model.Statement
* Restore system properties from before the nested {@link Statement}.
*/
public class SystemPropertiesRestoreRule implements TestRule {
+ /**
+ * Ignored property keys.
+ */
+ private final HashSet<String> ignoredProperties;
+
+ /**
+ * Restores all properties.
+ */
+ public SystemPropertiesRestoreRule() {
+ this(Collections.<String>emptySet());
+ }
+
+ /**
+ * @param ignoredProperties Properties that will be ignored (and will not be restored).
+ */
+ public SystemPropertiesRestoreRule(Set<String> ignoredProperties) {
+ this.ignoredProperties = new HashSet<String>(ignoredProperties);
+ }
+
+ /**
+ * @param ignoredProperties Properties that will be ignored (and will not be restored).
+ */
+ public SystemPropertiesRestoreRule(String... ignoredProperties) {
+ this.ignoredProperties = new HashSet<String>(Arrays.asList(ignoredProperties));
+ }
+
public Statement apply(final Statement s, Description d) {
return new Statement() {
public void evaluate() throws Throwable {
@@ -37,7 +63,7 @@ public class SystemPropertiesRestoreRule
TreeMap<String,String> after = cloneAsMap(System.getProperties());
if (!after.equals(before)) {
// Restore original properties.
- restore(before, after);
+ restore(before, after, ignoredProperties);
}
}
}
@@ -67,16 +93,25 @@ public class SystemPropertiesRestoreRule
static void restore(
TreeMap<String,String> before,
- TreeMap<String,String> after) {
+ TreeMap<String,String> after,
+ Set<String> ignoredKeys) {
+
+ // Clear anything that is present after but wasn't before.
after.keySet().removeAll(before.keySet());
for (String key : after.keySet()) {
- System.clearProperty(key);
+ if (!ignoredKeys.contains(key))
+ System.clearProperty(key);
}
+
+ // Restore original property values unless they are ignored (then leave).
for (Map.Entry<String,String> e : before.entrySet()) {
- if (e.getValue() == null) {
- System.clearProperty(e.getKey()); // Can this happen?
- } else {
- System.setProperty(e.getKey(), e.getValue());
+ String key = e.getValue();
+ if (!ignoredKeys.contains(key)) {
+ if (key == null) {
+ System.clearProperty(e.getKey()); // Can this happen?
+ } else {
+ System.setProperty(e.getKey(), key);
+ }
}
}
}