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