Author: bago
Date: Tue Oct  6 17:52:22 2009
New Revision: 822375

URL: http://svn.apache.org/viewvc?rev=822375&view=rev
Log:
Some more test for the main library.

Added:
    
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MessageTest.java   
(with props)
    
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MockPublicKeyRecordRetriever.java
   (with props)
    
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetrieverTest.java
   (with props)
    
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/PublicKeyRecordTest.java
   (with props)
    james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/QPTest.java   
(with props)
    
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordImplTest.java
   (with props)
    
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordTest.java
   (with props)

Added: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MessageTest.java
URL: 
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MessageTest.java?rev=822375&view=auto
==============================================================================
--- 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MessageTest.java 
(added)
+++ 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MessageTest.java 
Tue Oct  6 17:52:22 2009
@@ -0,0 +1,132 @@
+/****************************************************************
+ * 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.jdkim;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.james.mime4j.MimeException;
+import org.apache.james.mime4j.field.UnstructuredField;
+
+public class MessageTest extends TestCase {
+
+       public void testMessage() throws IOException, MimeException {
+               String m = "";
+               new Message(new ByteArrayInputStream(m.getBytes()));
+       }
+
+       public void testMessageInputStream() throws IOException, MimeException {
+               String m = "Subject: test\r\n\r\nbody";
+               new Message(new ByteArrayInputStream(m.getBytes()));
+       }
+
+       public void testGetBodyInputStream() throws IOException, MimeException {
+               String text = "Subject: test\r\n\r\nbody";
+               Message m = new Message(new 
ByteArrayInputStream(text.getBytes()));
+               InputStream is = m.getBodyInputStream();
+               ByteArrayOutputStream bos = new ByteArrayOutputStream();
+               byte[] buff = new byte[200];
+               int read;
+               while ((read = is.read(buff)) > 0) {
+                       bos.write(buff, 0, read);
+               }
+               assertEquals("body", new String(bos.toByteArray()));
+       }
+
+       public void testAddField() throws MimeException {
+               Message m = new Message();
+               m.addField(UnstructuredField.parse("Subject: test\r\n"));
+               m.addField(UnstructuredField.parse("Subject: test2\r\n"));
+               String f = m.getField("Subject");
+               assertEquals("Subject: test\r\n", f);
+       }
+
+       public void testGetFields() throws MimeException {
+               Message m = new Message();
+               m.addField(UnstructuredField.parse("Subject: test\r\n"));
+               m.addField(UnstructuredField.parse("Subject: test2\r\n"));
+               m.addField(UnstructuredField.parse("From: test2\r\n"));
+               List f = m.getFields();
+               List expects = new LinkedList();
+               expects.add("Subject: test\r\n");
+               expects.add("Subject: test2\r\n");
+               expects.add("From: test2\r\n");
+               for (Iterator i = f.iterator(); i.hasNext(); ) {
+                       String field = (String) i.next();
+                       assertTrue(expects.remove(field));
+               }
+               assertEquals(0, expects.size());
+       }
+
+       /*
+       public void testGetField() throws MimeException, IOException {
+               String text = "Subject: test\r\n\r\nbody";
+               Headers m = new Message(new 
ByteArrayInputStream(text.getBytes()));
+               Field f = m.getField("Subject");
+               assertEquals(" test", f.getBody());
+       }
+       */
+
+       public void testGetFieldsString() throws MimeException {
+               Message m = new Message();
+               m.addField(UnstructuredField.parse("Subject: test\r\n"));
+               m.addField(UnstructuredField.parse("subject: test2\r\n"));
+               m.addField(UnstructuredField.parse("From: test2\r\n"));
+               List f = m.getFields("Subject");
+               List expects = new LinkedList();
+               expects.add("Subject: test\r\n");
+               expects.add("subject: test2\r\n");
+               for (Iterator i = f.iterator(); i.hasNext(); ) {
+                       String field = (String) i.next();
+                       assertTrue(expects.remove(field));
+               }
+               assertEquals(0, expects.size());
+       }
+
+       public void testIterator() throws MimeException {
+               Message m = new Message();
+               m.addField(UnstructuredField.parse("Subject: test\r\n"));
+               m.addField(UnstructuredField.parse("subject: test2\r\n"));
+               m.addField(UnstructuredField.parse("From: test2\r\n"));
+               Iterator i = m.iterator();
+               String field = (String) i.next();
+               assertEquals("Subject: test\r\n", field);
+               field = (String) i.next();
+               assertEquals("subject: test2\r\n", field);
+               field = (String) i.next();
+               assertEquals("From: test2\r\n", field);
+       }
+
+       public void testToString() throws MimeException {
+               Message m = new Message();
+               m.addField(UnstructuredField.parse("Subject: test\r\n"));
+               m.setBodyInputStream(new 
ByteArrayInputStream("body".getBytes()));
+               String expected = "Subject: test\r\n\r\nbody";
+               assertEquals(expected, m.toString());   
+       }
+
+}

Propchange: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MessageTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MessageTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MockPublicKeyRecordRetriever.java
URL: 
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MockPublicKeyRecordRetriever.java?rev=822375&view=auto
==============================================================================
--- 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MockPublicKeyRecordRetriever.java
 (added)
+++ 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MockPublicKeyRecordRetriever.java
 Tue Oct  6 17:52:22 2009
@@ -0,0 +1,64 @@
+/****************************************************************
+ * 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.jdkim;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * This is a mock public key record retriever that store the "registry" in a 
local map.
+ */
+public class MockPublicKeyRecordRetriever implements
+               PublicKeyRecordRetriever {
+       private static final String _DOMAINKEY = "._domainkey.";
+       private Map/* String, List<String> */ records = new HashMap();
+       
+       public void addRecord(String selector, String token, String record) {
+               String key = selector+_DOMAINKEY+token;
+               List l = (List) records.get(key);
+               if (l == null) {
+                       l = new LinkedList();
+                       records.put(key, l);
+               }
+               if (record != null) {
+                       l.add(record);
+               }
+       }
+       
+       public MockPublicKeyRecordRetriever() { 
+               
+       }
+       
+       public MockPublicKeyRecordRetriever(String record, CharSequence 
selector, CharSequence token) { 
+               addRecord(selector.toString(), token.toString(), record);
+       }
+
+       public List getRecords(CharSequence methodAndOptions, CharSequence 
selector, CharSequence token)
+                       throws TempFailException, PermFailException {
+               if ("dns/txt".equals(methodAndOptions)) {
+                       String search = selector+_DOMAINKEY+token;
+                       List res = (List) records.get(search);
+                       if (res == null || res.size() > 0) return res;
+                       else throw new TempFailException("Timout or servfail");
+               } else throw new PermFailException("Unsupported method");
+       }
+}
\ No newline at end of file

Propchange: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MockPublicKeyRecordRetriever.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MockPublicKeyRecordRetriever.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetrieverTest.java
URL: 
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetrieverTest.java?rev=822375&view=auto
==============================================================================
--- 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetrieverTest.java
 (added)
+++ 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetrieverTest.java
 Tue Oct  6 17:52:22 2009
@@ -0,0 +1,82 @@
+/****************************************************************
+ * 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.jdkim;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+public class MultiplexingPublicKeyRecordRetrieverTest extends TestCase {
+
+       private PublicKeyRecordRetriever myMethodRetriever = new 
PublicKeyRecordRetriever() {
+
+               public List getRecords(CharSequence methodAndOption,
+                               CharSequence selector, CharSequence token)
+                               throws TempFailException, PermFailException {
+                       List l = new ArrayList();
+                       l.add(selector.toString());
+                       l.add(token.toString());
+                       return l;
+               }
+               
+       };
+
+       public void testMultiplexingPublicKeyRecordRetriever() {
+               MultiplexingPublicKeyRecordRetriever pkrr = new 
MultiplexingPublicKeyRecordRetriever();
+               try {
+                       pkrr.getRecords("method", "selector", "token");
+                       fail("method is unknown");
+               } catch (FailException e) {
+               }
+       }
+
+       public void 
testMultiplexingPublicKeyRecordRetrieverStringPublicKeyRecordRetriever() throws 
TempFailException, PermFailException {
+               MultiplexingPublicKeyRecordRetriever pkrr = new 
MultiplexingPublicKeyRecordRetriever("mymethod", myMethodRetriever);
+               check(pkrr, "mymethod");
+       }
+
+       private void check(MultiplexingPublicKeyRecordRetriever pkrr, String 
method)
+                       throws TempFailException, PermFailException {
+               List l = pkrr.getRecords(method, "selector", "token");
+               Iterator i = l.iterator();
+               assertEquals("selector", i.next());
+               assertEquals("token", i.next());
+               try {
+                       l = pkrr.getRecords("anothermethod", "selector", 
"token");
+                       fail("anothermethod is not declared");
+               } catch (FailException e) {
+               }
+       }
+
+       public void testAddRetriever() throws TempFailException, 
PermFailException {
+               MultiplexingPublicKeyRecordRetriever pkrr = new 
MultiplexingPublicKeyRecordRetriever();
+               pkrr.addRetriever("mymethod", myMethodRetriever);
+               check(pkrr, "mymethod");
+       }
+
+       public void testAddRetrieverWithOptions() throws TempFailException, 
PermFailException {
+               MultiplexingPublicKeyRecordRetriever pkrr = new 
MultiplexingPublicKeyRecordRetriever();
+               pkrr.addRetriever("mymethod", myMethodRetriever);
+               check(pkrr, "mymethod/option");
+       }
+
+}

Propchange: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetrieverTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetrieverTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/PublicKeyRecordTest.java
URL: 
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/PublicKeyRecordTest.java?rev=822375&view=auto
==============================================================================
--- 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/PublicKeyRecordTest.java
 (added)
+++ 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/PublicKeyRecordTest.java
 Tue Oct  6 17:52:22 2009
@@ -0,0 +1,262 @@
+/****************************************************************
+ * 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.jdkim;
+
+import java.math.BigInteger;
+import java.security.PublicKey;
+import java.security.interfaces.RSAKey;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import org.apache.james.jdkim.tagvalue.PublicKeyRecordImpl;
+import org.apache.james.jdkim.tagvalue.SignatureRecordImpl;
+
+import junit.framework.TestCase;
+
+public class PublicKeyRecordTest extends TestCase {
+
+       public void testValidate() {
+               PublicKeyRecord pkr = new PublicKeyRecordImpl("");
+               try {
+                       pkr.validate();
+                       fail("Expected failure: missing mandatory parameters");
+               } catch (IllegalStateException e) {
+               }
+               pkr = new PublicKeyRecordImpl("k=rsa; p=XXXXXXXX=;");
+               pkr.validate();
+               pkr = new PublicKeyRecordImpl("v=DKIM1; k=rsa; p=XXXXXX=");
+               pkr.validate();
+               pkr = new PublicKeyRecordImpl(" v=DKIM1; k=rsa; p=XXXXXX=");
+               pkr.validate();
+               pkr = new PublicKeyRecordImpl("k=rsa; v=DKIM1; p=XXXXXX=");
+               try {
+                       pkr.validate();
+                       fail("Expected failure: v should be the first");
+               } catch (IllegalStateException e) {
+               }
+               pkr = new PublicKeyRecordImpl("v=DKIM2; k=rsa; p=XXXXXX=");
+               try {
+                       pkr.validate();
+                       fail("Expected failure: wrong version");
+               } catch (IllegalStateException e) {
+               }
+               pkr = new PublicKeyRecordImpl("v=DKIM1; k=rsa; p=");
+               try {
+                       pkr.validate();
+                       fail("Expected failure: revoked key");
+               } catch (IllegalStateException e) {
+               }
+       }
+
+       public void testIsHashMethodSupported() {
+               PublicKeyRecord pkr = new PublicKeyRecordImpl("k=rsa; 
p=XXXXXXXX=;");
+               pkr.validate();
+               assertTrue(pkr.isHashMethodSupported("sha1"));
+               assertTrue(pkr.isHashMethodSupported("sha256"));
+               pkr = new PublicKeyRecordImpl("k=rsa; h=sha1:sha256; 
p=XXXXXXXX=;");
+               pkr.validate();
+               assertTrue(pkr.isHashMethodSupported("sha1"));
+               assertFalse(pkr.isHashMethodSupported("sha128"));
+               assertTrue(pkr.isHashMethodSupported("sha256"));
+       }
+
+       public void testIsKeyTypeSupported() {
+               PublicKeyRecord pkr = new PublicKeyRecordImpl("k=rsa; 
p=XXXXXXXX=;");
+               pkr.validate();
+               assertTrue(pkr.isKeyTypeSupported("rsa"));
+               assertFalse(pkr.isKeyTypeSupported("dsa"));
+       }
+
+       public void testGetAcceptableHashMethods() {
+               PublicKeyRecord pkr = new PublicKeyRecordImpl("k=rsa; 
h=sha1:sha256; p=XXXXXXXX=;");
+               pkr.validate();
+               List methods = pkr.getAcceptableHashMethods();
+               assertEquals("[sha1, sha256]", methods.toString());
+               pkr = new PublicKeyRecordImpl("k=rsa; p=XXXXXXXX=;");
+               pkr.validate();
+               methods = pkr.getAcceptableHashMethods();
+               assertNull(methods);
+       }
+
+       public void testGetAcceptableKeyTypes() {
+               PublicKeyRecord pkr = new PublicKeyRecordImpl("k=rsa; 
h=sha1:sha256; p=XXXXXXXX=;");
+               pkr.validate();
+               List methods = pkr.getAcceptableKeyTypes();
+               assertEquals("[rsa]", methods.toString());
+               pkr = new PublicKeyRecordImpl("k=rsa:dsa; p=XXXXXXXX=;");
+               pkr.validate();
+               methods = pkr.getAcceptableKeyTypes();
+               assertEquals("[rsa, dsa]", methods.toString());
+       }
+
+       public void testGetGranularityPattern() {
+               PublicKeyRecord pkr = new PublicKeyRecordImpl("k=rsa; 
h=sha1:sha256; p=XXXXXXXX=;");
+               pkr.validate();
+               Pattern pattern = pkr.getGranularityPattern();
+               assertEquals("^\\Q\\E.*\\Q\\E$", pattern.pattern());
+               assertTrue(pattern.matcher("something").matches());
+               assertTrue(pattern.matcher("").matches());
+               pkr = new PublicKeyRecordImpl("k=rsa; g=; h=sha1:sha256; 
p=XXXXXXXX=;");
+               pkr.validate();
+               pattern = pkr.getGranularityPattern();
+               assertEquals("@", pattern.pattern());
+               assertFalse(pattern.matcher("something").matches());
+               assertFalse(pattern.matcher("").matches());
+               pkr = new PublicKeyRecordImpl("k=rsa; g=some*; h=sha1:sha256; 
p=XXXXXXXX=;");
+               pkr.validate();
+               pattern = pkr.getGranularityPattern();
+               assertTrue(pattern.matcher("something").matches());
+               assertTrue(pattern.matcher("some").matches());
+               assertFalse(pattern.matcher("som").matches());
+               assertFalse(pattern.matcher("awesome").matches());
+               assertEquals("^\\Qsome\\E.*\\Q\\E$", pattern.pattern());
+               pkr = new PublicKeyRecordImpl("k=rsa; g=*+test; h=sha1:sha256; 
p=XXXXXXXX=;");
+               pkr.validate();
+               pattern = pkr.getGranularityPattern();
+               assertEquals("^\\Q\\E.*\\Q+test\\E$", pattern.pattern());
+               assertTrue(pattern.matcher("a+test").matches());
+               assertTrue(pattern.matcher("+test").matches());
+               assertFalse(pattern.matcher("atest").matches());
+               assertFalse(pattern.matcher("+tested").matches());
+               pkr = new PublicKeyRecordImpl("k=rsa; g=test; h=sha1:sha256; 
p=XXXXXXXX=;");
+               pkr.validate();
+               pattern = pkr.getGranularityPattern();
+               assertEquals("^\\Qtest\\E$", pattern.pattern());
+               assertTrue(pattern.matcher("test").matches());
+               assertFalse(pattern.matcher("atest").matches());
+               assertFalse(pattern.matcher("testa").matches());
+               try {
+                       pkr = new PublicKeyRecordImpl("k=rsa; g=*\\+test; 
h=sha1:sha256; p=XXXXXXXX=;");
+                       pkr.validate();
+                       pattern = pkr.getGranularityPattern();
+                       fail("Expected syntax error");
+               } catch ( IllegalStateException e) {
+               }
+               try {
+                       pkr = new PublicKeyRecordImpl("k=rsa; g=*test*; 
h=sha1:sha256; p=XXXXXXXX=;");
+                       pkr.validate();
+                       pattern = pkr.getGranularityPattern();
+                       fail("Expected syntax error");
+               } catch ( IllegalStateException e) {
+               }
+       }
+
+       public void testGetPublicKey() {
+               PublicKeyRecord pkr = new PublicKeyRecordImpl("k=rsa; t=y; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+               pkr.validate();
+               PublicKey pk = pkr.getPublicKey();
+               assertEquals("RSA", pk.getAlgorithm());
+               assertEquals("X.509", pk.getFormat());
+               assertEquals(new 
BigInteger("140815480285950232210124449496973988135931539914762288985377502488754711434253259186192434865594456027796377309280714060984552676169392598862819043219650259702261370701494928576447797673342985377518637829874968725582762257956980427968667812066816497848410406856165942400151628259779523949079651036806330485849"),
 ((RSAKey) pk).getModulus());
+
+               try {
+                       pkr = new PublicKeyRecordImpl("k=dsa; t=y; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+                       pkr.validate();
+                       pk = pkr.getPublicKey();
+                       fail("Expected invalid key spec. DSA is not supported");
+               } catch (IllegalStateException e) {
+               }
+
+               try {
+                       pkr = new PublicKeyRecordImpl("k=unknown; t=y; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+                       pkr.validate();
+                       pk = pkr.getPublicKey();
+                       fail("Expected invalid algorythm. 'unknown' is not 
supported");
+               } catch (IllegalStateException e) {
+               }
+       }
+
+       public void testApply() {
+               PublicKeyRecord pkr = new PublicKeyRecordImpl("k=rsa; t=y; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+               pkr.validate();
+               pkr.apply(new SignatureRecordImpl("v=1; a=rsa-sha256; 
c=relaxed/relaxed; d=gmail.com; s=gamma; 
h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type;
 bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; 
b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
+               try {
+                       pkr.apply(new SignatureRecordImpl("v=1; a=dsa-sha256; 
c=relaxed/relaxed; d=gmail.com; s=gamma; 
h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type;
 bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; 
b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
+                       fail("This is not a signature for that key");
+               } catch (IllegalStateException e) {
+               }
+               pkr = new PublicKeyRecordImpl("k=rsa; t=y:s; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+               pkr.validate();
+               pkr.apply(new SignatureRecordImpl("v=1; a=rsa-sha256; 
c=relaxed/relaxed; i=t...@gmail.com; d=gmail.com; s=gamma; 
h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type;
 bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; 
b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
+               try {
+                       pkr.apply(new SignatureRecordImpl("v=1; a=rsa-sha256; 
c=relaxed/relaxed; i=t...@subdomain.gmail.com; d=gmail.com; s=gamma; 
h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type;
 bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; 
b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
+                       fail("This is not a signature for that key");
+               } catch (IllegalStateException e) {
+               }
+               pkr = new PublicKeyRecordImpl("k=rsa; g=test*; t=y; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+               pkr.validate();
+               pkr.apply(new SignatureRecordImpl("v=1; a=rsa-sha256; 
c=relaxed/relaxed; i=t...@gmail.com; d=gmail.com; s=gamma; 
h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type;
 bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; 
b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
+               try {
+                       pkr.apply(new SignatureRecordImpl("v=1; a=rsa-sha256; 
c=relaxed/relaxed; i=...@subdomain.gmail.com; d=gmail.com; s=gamma; 
h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type;
 bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; 
b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
+                       fail("This is not a signature for that key");
+               } catch (IllegalStateException e) {
+               }
+               pkr = new PublicKeyRecordImpl("k=rsa; g=test*; t=y; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+               pkr.validate();
+
+               pkr = new PublicKeyRecordImpl("k=rsa; h=sha1; t=y; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+               pkr.validate();
+               try {
+                       pkr.apply(new SignatureRecordImpl("v=1; a=rsa-sha256; 
c=relaxed/relaxed; d=gmail.com; s=gamma; 
h=domainkey-signature:mime-version:received:date:message-id:subject:from:to:content-type;
 bh=AbPsrGRdyVjM2e5ZZdhQA/aLe305f2bPvPRohUxrGjo=; 
b=ksNsfQJv20M9/Vf66sMJT1WHM/fUfcqli1NfkyxSOjr8jlNTH4JNCGacb2neWuwMN4C4TFXqMR8BENkn+XrCV1FjrlW1mCxlLDilVypP/uqqq04KzJpVyJG6zZLd/0DeknSLN6sDGKdCvIdS+YpHEhUxoEuf6QizCs8PTXhnJiA="));
+                       fail("This hash method is not supported for that 
publick key");
+               } catch (IllegalStateException e) {
+               }
+       }
+
+       public void testGetFlags() {
+               PublicKeyRecord pkr = new PublicKeyRecordImpl("k=rsa; t=y:s; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+               pkr.validate();
+               List flags = pkr.getFlags();
+               assertEquals("[y, s]", flags.toString());
+               pkr = new PublicKeyRecordImpl("k=rsa; t=y; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+               pkr.validate();
+               flags = pkr.getFlags();
+               assertEquals("[y]", flags.toString());
+               pkr = new PublicKeyRecordImpl("k=rsa; t=; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+               pkr.validate();
+               flags = pkr.getFlags();
+               assertEquals("[]", flags.toString());
+       }
+
+       public void testIsTesting() {
+               PublicKeyRecord pkr = new PublicKeyRecordImpl("k=rsa; t=y:s; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+               pkr.validate();
+               assertTrue(pkr.isTesting());
+               pkr = new PublicKeyRecordImpl("k=rsa; t=y; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+               pkr.validate();
+               assertTrue(pkr.isTesting());
+               pkr = new PublicKeyRecordImpl("k=rsa; t=; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+               pkr.validate();
+               assertFalse(pkr.isTesting());
+       }
+
+       public void testIsDenySubdomains() {
+               PublicKeyRecord pkr = new PublicKeyRecordImpl("k=rsa; t=y:s; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+               pkr.validate();
+               assertTrue(pkr.isDenySubdomains());
+               pkr = new PublicKeyRecordImpl("k=rsa; t=y; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+               pkr.validate();
+               assertFalse(pkr.isDenySubdomains());
+               pkr = new PublicKeyRecordImpl("k=rsa; t=; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+               pkr.validate();
+               assertFalse(pkr.isDenySubdomains());
+       }
+
+}

Propchange: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/PublicKeyRecordTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/PublicKeyRecordTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/QPTest.java
URL: 
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/QPTest.java?rev=822375&view=auto
==============================================================================
--- james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/QPTest.java 
(added)
+++ james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/QPTest.java Tue 
Oct  6 17:52:22 2009
@@ -0,0 +1,94 @@
+/****************************************************************
+ * 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.jdkim;
+
+import junit.framework.TestCase;
+
+public class QPTest extends TestCase {
+       
+       public void testDecode() {
+               assertEquals("",CodecUtil.dkimQuotedPrintableDecode(""));
+               assertEquals("@",CodecUtil.dkimQuotedPrintableDecode("=40"));
+               
assertEquals("\r\n",CodecUtil.dkimQuotedPrintableDecode("=0D=0A"));
+               
assertEquals("\0CIAO\0",CodecUtil.dkimQuotedPrintableDecode("=00CIAO=00"));
+               
assertEquals("thisisatest",CodecUtil.dkimQuotedPrintableDecode("this\r\n\tis\r\n
 a\r\n  \t test"));
+       }
+       
+       public void testWhiteSpaces() {
+               
assertEquals("thisisatest",CodecUtil.dkimQuotedPrintableDecode("this is a 
test"));
+               
assertEquals("thisisatest",CodecUtil.dkimQuotedPrintableDecode("this\r\n is a 
test"));
+       }
+       
+       public void testInvalid() {
+               try {
+                       CodecUtil.dkimQuotedPrintableDecode("=");
+                       fail("invalid sequence parsed.");
+               } catch (IllegalArgumentException e) {
+               }
+               try {
+                       CodecUtil.dkimQuotedPrintableDecode("==");
+                       fail("invalid sequence parsed.");
+               } catch (IllegalArgumentException e) {
+               }
+               try {
+                       CodecUtil.dkimQuotedPrintableDecode("=2 3");
+                       fail("invalid sequence parsed.");
+               } catch (IllegalArgumentException e) {
+               }
+               try {
+                       CodecUtil.dkimQuotedPrintableDecode("=3");
+                       fail("invalid sequence parsed.");
+               } catch (IllegalArgumentException e) {
+               }
+               try {
+                       CodecUtil.dkimQuotedPrintableDecode("=3a");
+                       fail("invalid sequence parsed.");
+               } catch (IllegalArgumentException e) {
+               }
+               try {
+                       CodecUtil.dkimQuotedPrintableDecode("==20");
+                       fail("invalid sequence parsed.");
+               } catch (IllegalArgumentException e) {
+               }
+               try {
+                       CodecUtil.dkimQuotedPrintableDecode("=20=");
+                       fail("invalid sequence parsed.");
+               } catch (IllegalArgumentException e) {
+               }
+               try {
+                       CodecUtil.dkimQuotedPrintableDecode("=3x");
+                       fail("invalid sequence parsed.");
+               } catch (IllegalArgumentException e) {
+               }
+               try {
+                       CodecUtil.dkimQuotedPrintableDecode("this\r\nis a 
test");
+                       fail("invalid sequence parsed.");
+               } catch (IllegalArgumentException e) {
+               }
+       }
+       
+       // TODO check bytes > 128
+       /*
+       public void test8bit() {
+               
assertEquals("PROVA\144CIAO\144",Main.dkimQuotedPrintableDecode("PROVA=90CIAO=90"));
+       }
+       */
+
+}

Propchange: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/QPTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/QPTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordImplTest.java
URL: 
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordImplTest.java?rev=822375&view=auto
==============================================================================
--- 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordImplTest.java
 (added)
+++ 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordImplTest.java
 Tue Oct  6 17:52:22 2009
@@ -0,0 +1,76 @@
+/****************************************************************
+ * 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.jdkim;
+
+import org.apache.james.jdkim.tagvalue.SignatureRecordImpl;
+
+import junit.framework.TestCase;
+
+public class SignatureRecordImplTest extends TestCase {
+
+       public void testWrongBase64Encoding() {
+               SignatureRecord sr = new SignatureRecordImpl("v=1; bh=0012=GG; 
b==GG;");
+               try {
+                       sr.getBodyHash();
+                       fail("expected failure");
+               } catch (Exception e) {
+                       
assertTrue(e.getMessage().toLowerCase().contains("decod"));
+               }
+               try {
+                       sr.getSignature();
+                       fail("expected failure");
+               } catch (Exception e) {
+                       
assertTrue(e.getMessage().toLowerCase().contains("decod"));
+               }
+       }
+       
+       public void testWrongHashSyntaxes() {
+               SignatureRecord sr = new SignatureRecordImpl("v=1; 
a=nothyphenedword;");
+               try {
+                       sr.getHashAlgo();
+                       fail("expected failure");
+               } catch (Exception e) {
+                       
assertTrue(e.getMessage().toLowerCase().contains("hash"));
+               }
+               try {
+                       sr.getHashMethod();
+                       fail("expected failure");
+               } catch (Exception e) {
+                       
assertTrue(e.getMessage().toLowerCase().contains("hash"));
+               }
+               try {
+                       sr.getHashAlgo();
+                       fail("expected failure");
+               } catch (Exception e) {
+                       
assertTrue(e.getMessage().toLowerCase().contains("hash"));
+               }
+       }
+       
+       public void testExpired() {
+               SignatureRecord sr = new SignatureRecordImpl("v=1; c=simple; 
h=from:to; s=select; d=example.com; a=rsa-sha1; x=0; bh=abcdef; b=1235345987;");
+               try {
+                       sr.validate();
+                       fail("expected failure");
+               } catch (Exception e) {
+                       assertTrue(e.getMessage().contains("expired"));
+               }
+       }
+       
+}

Propchange: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordImplTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordImplTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordTest.java
URL: 
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordTest.java?rev=822375&view=auto
==============================================================================
--- 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordTest.java
 (added)
+++ 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordTest.java
 Tue Oct  6 17:52:22 2009
@@ -0,0 +1,99 @@
+/****************************************************************
+ * 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.jdkim;
+
+import org.apache.james.jdkim.tagvalue.SignatureRecordImpl;
+
+import junit.framework.TestCase;
+
+public class SignatureRecordTest extends TestCase {
+       
+       public void testBasic() {
+               SignatureRecord sign = new SignatureRecordImpl("v=1; 
a=rsa-sha256; c=relaxed/relaxed;\r\n"
+                       +"        d=gmail.com; s=beta;\r\n"
+                       +"        
h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type;\r\n"
+                       +"        
bh=9sd6eO/xnGLInYGPFN86r9q27iClGpwfkl4PBc5XEuQ=;\r\n"
+                       +"        
b=tGQtBQg1sO+JKopOylApWLngylEqeMcXwCEUQN+S2PSpi9c1G9Nm5df9pMShus3iFaQb0PPvTfpw++cAC8/N0p3Gi/lVLc+Yh7xWEIPZ3Nxd3xqTQy7grIkBpV0q6559dEhhfFoEyLS0OK/IrqFIUVDRIMnsMjimXV7u+Sgoi7Q=");
+               sign.validate();
+       }
+
+       public void testWrongOrMissingVersion() {
+               try {
+                       SignatureRecord sign = new 
SignatureRecordImpl("a=rsa-sha1; c=relaxed/relaxed;\r\n"
+                                       +"        d=gmail.com; s=beta;\r\n"
+                                       +"        
h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type;\r\n"
+                                       +"        
b=Kw/TqnjB4L5ZC7DX1ibiNkuIw630uHZvzuozn/e6yTm3U8ObWEz/rJK5GO8RSrF56JrCA/xo8W2CGmyNmpQYbEpLl5P9/NcJSYUmln/O6GSa4Usyv4FdEU4FVjkyW0ToGFHNkw9Mm0urveA4Lcfk9gClJczXnvGBdiv/bkVBEJk=");
+                       sign.validate();
+                       fail("expected error on missing v=");
+               } catch (IllegalStateException e) {
+               }
+               try {
+                       SignatureRecord sign = new SignatureRecordImpl("v=2; 
a=rsa-sha256; c=relaxed/relaxed;\r\n"
+                                       +"        d=gmail.com; s=beta;\r\n"
+                                       +"        
h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type;\r\n"
+                                       +"        
bh=9sd6eO/xnGLInYGPFN86r9q27iClGpwfkl4PBc5XEuQ=;\r\n"
+                                       +"        
b=tGQtBQg1sO+JKopOylApWLngylEqeMcXwCEUQN+S2PSpi9c1G9Nm5df9pMShus3iFaQb0PPvTfpw++cAC8/N0p3Gi/lVLc+Yh7xWEIPZ3Nxd3xqTQy7grIkBpV0q6559dEhhfFoEyLS0OK/IrqFIUVDRIMnsMjimXV7u+Sgoi7Q=");
+                       sign.validate();
+                       fail("expected error on wrong v=");
+               } catch (IllegalStateException e) {
+               }
+       }
+       
+       
+       public void testMissingRequired() {
+               try {
+                       SignatureRecord sign = new SignatureRecordImpl("v=1; 
a=rsa-sha256; c=relaxed/relaxed;\r\n"
+                               +"        d=gmail.com; s=beta;\r\n"
+                               +"        
h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type;\r\n"
+                               +"        
b=tGQtBQg1sO+JKopOylApWLngylEqeMcXwCEUQN+S2PSpi9c1G9Nm5df9pMShus3iFaQb0PPvTfpw++cAC8/N0p3Gi/lVLc+Yh7xWEIPZ3Nxd3xqTQy7grIkBpV0q6559dEhhfFoEyLS0OK/IrqFIUVDRIMnsMjimXV7u+Sgoi7Q=");
+                       sign.validate();
+                       fail("expected error on missing bh=");
+               } catch (IllegalStateException e) {
+               }
+       }
+
+       public void testDomainMismatch() {
+               try {
+                       SignatureRecord sign = new SignatureRecordImpl("v=1; 
a=rsa-sha256; c=relaxed/relaxed;\r\n"
+                               +"        d=gmail.com; s=beta; 
i...@agmail.com;\r\n"
+                               +"        
h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type;\r\n"
+                               +"        
bh=9sd6eO/xnGLInYGPFN86r9q27iClGpwfkl4PBc5XEuQ=;\r\n"
+                               +"        
b=tGQtBQg1sO+JKopOylApWLngylEqeMcXwCEUQN+S2PSpi9c1G9Nm5df9pMShus3iFaQb0PPvTfpw++cAC8/N0p3Gi/lVLc+Yh7xWEIPZ3Nxd3xqTQy7grIkBpV0q6559dEhhfFoEyLS0OK/IrqFIUVDRIMnsMjimXV7u+Sgoi7Q=");
+                       sign.validate();
+                       fail("expected error on domain mismatch");
+               } catch (IllegalStateException e) {
+               }
+       }
+
+       public void testMissingFrom() {
+               try {
+                       SignatureRecord sign = new SignatureRecordImpl("v=1; 
a=rsa-sha256; c=relaxed/relaxed;\r\n"
+                               +"        d=gmail.com; s=beta; 
i...@subdomain.gmail.com;\r\n"
+                               +"        
h=domainkey-signature:received:received:message-id:date:fram:to:subject:mime-version:content-type;\r\n"
+                               +"        
bh=9sd6eO/xnGLInYGPFN86r9q27iClGpwfkl4PBc5XEuQ=;\r\n"
+                               +"        
b=tGQtBQg1sO+JKopOylApWLngylEqeMcXwCEUQN+S2PSpi9c1G9Nm5df9pMShus3iFaQb0PPvTfpw++cAC8/N0p3Gi/lVLc+Yh7xWEIPZ3Nxd3xqTQy7grIkBpV0q6559dEhhfFoEyLS0OK/IrqFIUVDRIMnsMjimXV7u+Sgoi7Q=");
+                       sign.validate();
+                       fail("expected error on missing 'from' header");
+               } catch (IllegalStateException e) {
+               }
+       }
+
+
+}

Propchange: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/SignatureRecordTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain



---------------------------------------------------------------------
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