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

Reply via email to