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: [email protected]
For additional commands, e-mail: [email protected]