LOG4J2-435 ScriptCondition unit tests Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/2bd57119 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/2bd57119 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/2bd57119
Branch: refs/heads/master Commit: 2bd57119f83b806da95cfb0b0fc5ee5e097ec347 Parents: 1bc44b6 Author: rpopma <[email protected]> Authored: Sat Dec 5 19:55:51 2015 +0900 Committer: rpopma <[email protected]> Committed: Sat Dec 5 19:55:51 2015 +0900 ---------------------------------------------------------------------- .../rolling/action/ScriptConditionTest.java | 130 +++++++++++++++++++ 1 file changed, 130 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2bd57119/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/ScriptConditionTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/ScriptConditionTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/ScriptConditionTest.java new file mode 100644 index 0000000..ccbfc86 --- /dev/null +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/ScriptConditionTest.java @@ -0,0 +1,130 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache license, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the license for the specific language governing permissions and + * limitations under the license. + */ + +package org.apache.logging.log4j.core.appender.rolling.action; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; + +import org.apache.logging.log4j.core.config.Configuration; +import org.apache.logging.log4j.core.config.DefaultConfiguration; +import org.apache.logging.log4j.core.script.Script; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Tests the ScriptCondition class. + */ +public class ScriptConditionTest { + + @Test(expected = NullPointerException.class) + public void testConstructorDisallowsNullScript() { + new ScriptCondition(null, new DefaultConfiguration()); + } + + @Test(expected = NullPointerException.class) + public void testConstructorDisallowsNullConfig() { + new ScriptCondition(new Script("test", "js", "print('hi')"), null); + } + + @Test + public void testCreateConditionReturnsNullForNullScript() { + assertNull(ScriptCondition.createCondition(null, new DefaultConfiguration())); + } + + @Test(expected = NullPointerException.class) + public void testCreateConditionDisallowsNullConfig() { + ScriptCondition.createCondition(new Script("test", "js", "print('hi')"), null); + } + + @Test + public void testSelectFilesToDelete() { + Configuration config = new DefaultConfiguration(); + config.initialize(); // creates the ScriptManager + + Script script = new Script("test", "javascript", "pathList;"); // script that returns pathList + ScriptCondition condition = new ScriptCondition(script, config); + List<PathWithAttributes> pathList = new ArrayList<PathWithAttributes>(); + Path base = Paths.get("baseDirectory"); + List<PathWithAttributes> result = condition.selectFilesToDelete(base, pathList); + assertSame(result, pathList); + } + + @Test + public void testSelectFilesToDelete2() { + Configuration config = new DefaultConfiguration(); + config.initialize(); // creates the ScriptManager + + List<PathWithAttributes> pathList = new ArrayList<PathWithAttributes>(); + pathList.add(new PathWithAttributes(Paths.get("/path/1"), new DummyFileAttributes())); + pathList.add(new PathWithAttributes(Paths.get("/path/2"), new DummyFileAttributes())); + pathList.add(new PathWithAttributes(Paths.get("/path/3"), new DummyFileAttributes())); + + String scriptText = "pathList.remove(1);" // + + "pathList;"; + Script script = new Script("test", "javascript", scriptText); + ScriptCondition condition = new ScriptCondition(script, config); + Path base = Paths.get("baseDirectory"); + List<PathWithAttributes> result = condition.selectFilesToDelete(base, pathList); + assertSame(result, pathList); + assertEquals(2, result.size()); + assertEquals(Paths.get("/path/1"), result.get(0).getPath()); + assertEquals(Paths.get("/path/3"), result.get(1).getPath()); + } + + @Test + public void testSelectFilesToDelete3() { + Configuration config = new DefaultConfiguration(); + config.initialize(); // creates the ScriptManager + + List<PathWithAttributes> pathList = new ArrayList<PathWithAttributes>(); + pathList.add(new PathWithAttributes(Paths.get("/path/1/abc/a.txt"), new DummyFileAttributes())); + pathList.add(new PathWithAttributes(Paths.get("/path/2/abc/bbb.txt"), new DummyFileAttributes())); + pathList.add(new PathWithAttributes(Paths.get("/path/3/abc/c.txt"), new DummyFileAttributes())); + + String scriptText = "" // + + "import java.nio.file.*;" // + + "def pattern = ~/(\\d*)[\\/\\\\]abc[\\/\\\\].*\\.txt/;" // + + "assert pattern.getClass() == java.util.regex.Pattern;" // + + "def copy = pathList.collect{it};" + + "pathList.each { pathWithAttribs -> \n" // + + " def relative = basePath.relativize pathWithAttribs.path;" // + + " println 'relative path: ' + relative;" // + + " def str = relative.toString();" + + " def m = pattern.matcher(str);" // + + " if (m.find()) {" // + + " def index = m.group(1) as int;" // + + " println 'extracted index: ' + index;" // + + " def isOdd = (index % 2) == 1;" + + " println 'is odd: ' + isOdd;" // + + " if (isOdd) { copy.remove pathWithAttribs}" + + " }" // + + "}" // + + "println copy;" + + "copy;"; + Script script = new Script("test", "groovy", scriptText); + ScriptCondition condition = new ScriptCondition(script, config); + Path base = Paths.get("/path"); + List<PathWithAttributes> result = condition.selectFilesToDelete(base, pathList); + assertEquals(1, result.size()); + assertEquals(Paths.get("/path/2/abc/bbb.txt"), result.get(0).getPath()); + } + +}
