Author: btellier Date: Thu Dec 17 15:01:23 2015 New Revision: 1720586 URL: http://svn.apache.org/viewvc?rev=1720586&view=rev Log: JAMES-1618 CHECKSCRIPT should be RFC-5804 compliant
Added: james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/CheckScriptTest.java james/project/trunk/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/checkscript.test james/project/trunk/protocols/managesieve/src/test/java/org/apache/james/managesieve/util/ james/project/trunk/protocols/managesieve/src/test/java/org/apache/james/managesieve/util/ParserUtilsTest.java Modified: james/project/trunk/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/ManageSieveFileTest.java james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/jsieve/Parser.java james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCore.java james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCoreToLine.java james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/ParserUtils.java Added: james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/CheckScriptTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/CheckScriptTest.java?rev=1720586&view=auto ============================================================================== --- james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/CheckScriptTest.java (added) +++ james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/CheckScriptTest.java Thu Dec 17 15:01:23 2015 @@ -0,0 +1,47 @@ +/**************************************************************** + * 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.james.mpt.testsuite; + +import com.google.inject.Inject; +import org.apache.james.mpt.host.ManageSieveHostSystem; +import org.junit.Before; +import org.junit.Test; + +import java.util.Locale; + +public class CheckScriptTest extends ManageSieveMPTTest { + + @Inject + private static ManageSieveHostSystem hostSystem; + + public CheckScriptTest() throws Exception { + super(hostSystem); + } + + @Before + public void setUp() throws Exception { + super.setUp(); + } + + @Test + public void checkScriptShouldWork() throws Exception { + scriptTest("checkscript", Locale.US); + } +} Added: james/project/trunk/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/checkscript.test URL: http://svn.apache.org/viewvc/james/project/trunk/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/checkscript.test?rev=1720586&view=auto ============================================================================== --- james/project/trunk/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/checkscript.test (added) +++ james/project/trunk/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/checkscript.test Thu Dec 17 15:01:23 2015 @@ -0,0 +1,53 @@ +################################################################ +# 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. # +################################################################ + +C: CHECKSCRIPT +S: NO " is an invalid size literal : it should be at least 4 char looking like \{_\+\}" + +C: CHECKSCRIPT unquoted +S: NO "unquoted is an invalid size literal : it should be at least 4 char looking like .*" + +C: CHECKSCRIPT {31+} +S: NO "Missing argument: script content" + +C: CHECKSCRIPT {31+} +C: #comment +C: InvalidSieveCommand +C: +S: NO + +C: AUTHENTICATE "PLAIN" +S: \+ "" +C: user password +S: OK authentication successfull + +C: CHECKSCRIPT {110+} +C: require ["fileinto"]; +C: +C: if envelope :contains "to" "tmartin+sent" { +C: fileinto "INBOX.sent"; +C: } +S: OK + +C: CHECKSCRIPT {31+} +C: #comment +C: InvalidSieveCommand +C: +S: NO "Syntax Error: org.apache.jsieve.parser.generated.ParseException: Encountered "<EOF>" at line 2, column 19. + Modified: james/project/trunk/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/ManageSieveFileTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/ManageSieveFileTest.java?rev=1720586&r1=1720585&r2=1720586&view=diff ============================================================================== --- james/project/trunk/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/ManageSieveFileTest.java (original) +++ james/project/trunk/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/ManageSieveFileTest.java Thu Dec 17 15:01:23 2015 @@ -21,6 +21,7 @@ package org.apache.james.mpt.managesieve import org.apache.james.mpt.testsuite.AuthenticateTest; import org.apache.james.mpt.testsuite.CapabilityTest; +import org.apache.james.mpt.testsuite.CheckScriptTest; import org.apache.james.mpt.testsuite.DeleteScriptTest; import org.apache.james.mpt.testsuite.GetScriptTest; import org.apache.james.mpt.testsuite.HaveSpaceTest; @@ -50,7 +51,8 @@ import org.junit.runners.Suite; SetActiveTest.class, GetScriptTest.class, DeleteScriptTest.class, - RenameScriptTest.class + RenameScriptTest.class, + CheckScriptTest.class }) public class ManageSieveFileTest { } Modified: james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/jsieve/Parser.java URL: http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/jsieve/Parser.java?rev=1720586&r1=1720585&r2=1720586&view=diff ============================================================================== --- james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/jsieve/Parser.java (original) +++ james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/jsieve/Parser.java Thu Dec 17 15:01:23 2015 @@ -32,29 +32,13 @@ import org.apache.jsieve.ConfigurationMa import org.apache.jsieve.SieveFactory; import org.apache.jsieve.parser.generated.ParseException; -/** - * <code>Parser</code> - */ public class Parser implements SieveParser { private static final List<String> EMPTY_WARNINGS = new ArrayList<String>(0); - private SieveFactory _sieveFactory = null; + private SieveFactory sieveFactory = null; - /** - * Creates a new instance of Parser. - * - */ - public Parser() { - super(); - } - - /** - * Creates a new instance of Parser. - * - */ public Parser(ConfigurationManager manager) { - this(); setConfigurationManager(manager); } @@ -65,22 +49,16 @@ public class Parser implements SievePars */ @Resource(name = "jsieveconfigurationmanager") public void setConfigurationManager(ConfigurationManager manager) { - _sieveFactory = manager.build(); + sieveFactory = manager.build(); } - /** - * @see org.apache.james.managesieve.api.SieveParser#getExtensions() - */ public List<String> getExtensions() { - return _sieveFactory.getExtensions(); + return sieveFactory.getExtensions(); } - /** - * @see org.apache.james.managesieve.api.SieveParser#parse(java.lang.String) - */ public List<String> parse(String content) throws SyntaxException { try { - _sieveFactory.parse(new ByteArrayInputStream(content.getBytes())); + sieveFactory.parse(new ByteArrayInputStream(content.getBytes())); } catch (ParseException ex) { throw new SyntaxException(ex); } Modified: james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCore.java URL: http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCore.java?rev=1720586&r1=1720585&r2=1720586&view=diff ============================================================================== --- james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCore.java (original) +++ james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCore.java Thu Dec 17 15:01:23 2015 @@ -116,10 +116,24 @@ public class LineToCore{ } public List<String> checkScript(Session session, String args) throws ArgumentException, AuthenticationRequiredException, SyntaxException { - if (args.trim().isEmpty()) { - throw new ArgumentException("Missing argument: script content"); + Iterator<String> firstLine = Splitter.on("\r\n").split(args.trim()).iterator(); + Iterator<String> arguments = Splitter.on(' ').split(firstLine.next().trim()).iterator(); + + + if (! arguments.hasNext()) { + throw new ArgumentException("Missing argument: script size"); + } else { + ParserUtils.getSize(arguments.next()); + } + if (arguments.hasNext()) { + throw new ArgumentException("Extra arguments not supported"); + } else { + String content = Joiner.on("\r\n").join(firstLine); + if (Strings.isNullOrEmpty(content)) { + throw new ArgumentException("Missing argument: script content"); + } + return core.checkScript(session, content); } - return core.checkScript(session, args); } public void haveSpace(Session session, String args) throws AuthenticationRequiredException, QuotaExceededException, ArgumentException, UserNotFoundException, StorageException { @@ -153,7 +167,6 @@ public class LineToCore{ } public List<String> putScript(Session session, String args) throws AuthenticationRequiredException, SyntaxException, QuotaExceededException, ArgumentException { - System.out.println("args" + args + "<-"); Iterator<String> firstLine = Splitter.on("\r\n").split(args.trim()).iterator(); Iterator<String> arguments = Splitter.on(' ').split(firstLine.next().trim()).iterator(); Modified: james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCoreToLine.java URL: http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCoreToLine.java?rev=1720586&r1=1720585&r2=1720586&view=diff ============================================================================== --- james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCoreToLine.java (original) +++ james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCoreToLine.java Thu Dec 17 15:01:23 2015 @@ -135,13 +135,12 @@ public class LineToCoreToLine { } catch (ArgumentException ex) { return "NO \"" + ex.getMessage() + "\""; } catch (SyntaxException ex) { - return "NO \"Syntax Error: " + ex.getMessage() + "\""; + return Joiner.on("\r\n").join(Splitter.on('\n').split("NO \"Syntax Error: " + ex.getMessage() + "\"")); } } public String deleteScript(Session session, String args) { try { - System.out.println("Yoloooooooo"); lineToCore.deleteScript(session, args); } catch (AuthenticationRequiredException ex) { return "NO"; Modified: james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/ParserUtils.java URL: http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/ParserUtils.java?rev=1720586&r1=1720585&r2=1720586&view=diff ============================================================================== --- james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/ParserUtils.java (original) +++ james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/ParserUtils.java Thu Dec 17 15:01:23 2015 @@ -20,10 +20,8 @@ package org.apache.james.managesieve.util; -import com.google.common.base.Splitter; import org.apache.james.managesieve.api.ArgumentException; -import java.util.Iterator; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -32,12 +30,10 @@ public class ParserUtils { private static final Pattern SCRIPT_NAME_REGEX = Pattern.compile("[^\\s\"']+|\"[^\"]*\"|'[^']*'"); public static long getSize(String args) throws ArgumentException { - System.out.println("<<<" + args + ">>>>"); - if (args.length() > 3 + if (args != null && args.length() > 3 && args.charAt(0) == '{' && args.charAt(args.length() - 1) == '}' && args.charAt(args.length() - 2) == '+' ) { - System.out.println("yolooo"); try { return Long.parseLong(args.substring(1, args.length() - 2)); } catch (NumberFormatException e) { @@ -62,10 +58,12 @@ public class ParserUtils { public static String unquote(String quoted) { String result = quoted; - if (quoted.startsWith("\"") && quoted.endsWith("\"")) { - result = quoted.substring(1, quoted.length() - 1); - } else if (quoted.startsWith("'") && quoted.endsWith("'")) { - result = quoted.substring(1, quoted.length() - 1); + if (quoted != null) { + if (quoted.startsWith("\"") && quoted.endsWith("\"")) { + result = quoted.substring(1, quoted.length() - 1); + } else if (quoted.startsWith("'") && quoted.endsWith("'")) { + result = quoted.substring(1, quoted.length() - 1); + } } return result; } Added: james/project/trunk/protocols/managesieve/src/test/java/org/apache/james/managesieve/util/ParserUtilsTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/test/java/org/apache/james/managesieve/util/ParserUtilsTest.java?rev=1720586&view=auto ============================================================================== --- james/project/trunk/protocols/managesieve/src/test/java/org/apache/james/managesieve/util/ParserUtilsTest.java (added) +++ james/project/trunk/protocols/managesieve/src/test/java/org/apache/james/managesieve/util/ParserUtilsTest.java Thu Dec 17 15:01:23 2015 @@ -0,0 +1,144 @@ +/* + * 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.james.managesieve.util; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.apache.james.managesieve.api.ArgumentException; +import org.junit.Test; + +public class ParserUtilsTest { + + @Test(expected = ArgumentException.class) + public void getSizeShouldThrowOnNullInput() throws Exception { + ParserUtils.getSize(null); + } + + @Test(expected = ArgumentException.class) + public void getSizeShouldThrowOnEmptyInput() throws Exception { + ParserUtils.getSize(""); + } + + @Test(expected = ArgumentException.class) + public void getSizeShouldThrowOnMalformedData1() throws Exception { + ParserUtils.getSize("abc"); + } + + @Test(expected = ArgumentException.class) + public void getSizeShouldThrowOnMalformedData2() throws Exception { + ParserUtils.getSize("{ab"); + } + + @Test(expected = ArgumentException.class) + public void getSizeShouldThrowOnMalformedData3() throws Exception { + ParserUtils.getSize("{ab}"); + } + + @Test(expected = ArgumentException.class) + public void getSizeShouldThrowOnMalformedData4() throws Exception { + ParserUtils.getSize("{ab+}"); + } + + @Test(expected = ArgumentException.class) + public void getSizeShouldThrowOnMalformedData5() throws Exception { + ParserUtils.getSize("{ab125+}"); + } + + @Test + public void getSizeShouldWork() throws Exception { + assertThat(ParserUtils.getSize("{45+}")).isEqualTo(45); + } + + @Test(expected = ArgumentException.class) + public void getSizeShouldThrowOnExtraArguments() throws Exception { + ParserUtils.getSize("{45+} extra"); + } + + @Test + public void unquoteShouldReturnNullOnNullInput() { + assertThat(ParserUtils.unquote(null)).isEqualTo(null); + } + + @Test + public void unquoteShouldReturnEmptyStringOnEmptyInput() { + assertThat(ParserUtils.unquote("")).isEqualTo(""); + } + + @Test + public void unquoteShouldNotUnquoteUnquotedQuotes() { + assertThat(ParserUtils.unquote("a")).isEqualTo("a"); + } + + @Test + public void unquoteShouldNotUnquoteNonStartingQuotes() { + assertThat(ParserUtils.unquote("a\"")).isEqualTo("a\""); + } + + @Test + public void unquoteShouldNotUnquoteNonEndingQuotes() { + assertThat(ParserUtils.unquote("\"a")).isEqualTo("\"a"); + } + + @Test + public void unquoteShouldNotUnquoteQuotesThatDoNotEnglobeWallString() { + assertThat(ParserUtils.unquote("a\"b\"c")).isEqualTo("a\"b\"c"); + } + + @Test + public void unquoteShouldNotUnquoteQuotesThatDoNotEnglobeWallString1() { + assertThat(ParserUtils.unquote("\"b\"c")).isEqualTo("\"b\"c"); + } + + @Test + public void unquoteShouldNotUnquoteQuotesThatDoNotEnglobeWallString2() { + assertThat(ParserUtils.unquote("a\"b\"")).isEqualTo("a\"b\""); + } + + @Test + public void unquoteShouldWorkWithDoubleQuote() { + assertThat(ParserUtils.unquote("\"a\"")).isEqualTo("a"); + } + + @Test + public void unquoteShouldNotUnquoteNonTrimmedData() { + assertThat(ParserUtils.unquote(" \"a\"")).isEqualTo(" \"a\""); + } + + @Test + public void unquoteShouldManageSingleQuotes() { + assertThat(ParserUtils.unquote("a'")).isEqualTo("a'"); + } + + @Test + public void unquoteShouldManageSingleQuotes1() { + assertThat(ParserUtils.unquote("'a")).isEqualTo("'a"); + } + + @Test + public void unquoteShouldManageSingleQuotes2() { + assertThat(ParserUtils.unquote("a'b")).isEqualTo("a'b"); + } + + @Test + public void unquoteShouldWorkWithSingleQuotes() { + assertThat(ParserUtils.unquote("'a'")).isEqualTo("a"); + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org