You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ba...@apache.org on 2009/10/11 17:35:33 UTC

svn commit: r824090 [3/4] - in /james/jdkim/trunk: ./ mailets/src/main/java/org/apache/james/jdkim/mailets/ mailets/src/test/java/org/apache/james/jdkim/mailets/ main/src/main/java/org/apache/james/jdkim/ main/src/main/java/org/apache/james/jdkim/api/ ...

Modified: james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/TagValue.java
URL: http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/TagValue.java?rev=824090&r1=824089&r2=824090&view=diff
==============================================================================
--- james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/TagValue.java (original)
+++ james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/TagValue.java Sun Oct 11 15:35:32 2009
@@ -29,197 +29,237 @@
 import java.util.regex.Pattern;
 
 /**
- * This class handle a tag=value list string as defined by DKIM specification
- * It also supports mandatoryTags and default values as a commodity to subclasses.
+ * This class handle a tag=value list string as defined by DKIM specification It
+ * also supports mandatoryTags and default values as a commodity to subclasses.
  */
 public class TagValue {
-	
-	private static final boolean DEBUG = false;
-	protected static final boolean VALIDATION = true;
-
-	private static Pattern tagPattern = Pattern.compile("^[A-Za-z][A-Za-z0-9_]*$");
-	private static final String tval = "[^; \t\r\n]+";
-	// validate value chars
-	private static Pattern valuePattern = Pattern.compile("^("+tval+"((\r\n[\t ]|[\t ])+"+tval+")*)?$");
-	
-	// we may use a TreeMap because we may need to know original order.
-	protected Map/* String, CharSequence */ tagValues;
-	
-	protected Set/* String */ mandatoryTags = new HashSet();
-	protected Map/* String, CharSequence */ defaults = new HashMap();
-	
-	
-	protected CharSequence trimFWS(CharSequence data, int tStart, int tStop, boolean trimWSP) {
-		if (DEBUG) System.out.println("1["+data+"]"+tStart+"|"+tStop+"="+data.subSequence(tStart, tStop+1)+"]");
-		// rimozione di FWS a inizio selezione
-		while (tStart < tStop && (data.charAt(tStart) == ' ' || data.charAt(tStart) == '\t') || 
-				(tStart < tStop - 2 && data.charAt(tStart) == '\r' && data.charAt(tStart+1) == '\n' && (data.charAt(tStart+2) == ' ' || data.charAt(tStart+2) == '\t'))) {
-			if (data.charAt(tStart) == '\r') tStart += 3;
-			else tStart++;
-		}
-
-		if (DEBUG) System.out.println("2["+data+"]"+tStart+"|"+tStop+"="+data.subSequence(tStart, tStop+1)+"]");
-		// rimozione di FWS a fine selezione.
-		while (tStart < tStop && (data.charAt(tStop) == ' ' || data.charAt(tStop) == '\t')) {
-			tStop--;
-			if ((tStart <= tStop-1 && data.charAt(tStop) == '\n' && data.charAt(tStop-1) == '\r') || (tStart < tStop && (data.charAt(tStop) == ' ' || data.charAt(tStop) == '\t'))) {
-				if (data.charAt(tStop) == '\n') tStop -= 2;
-				else tStop--;
-			}
-		}
-
-		if (DEBUG) System.out.println("3["+data+"]"+tStart+"|"+tStop+"="+data.subSequence(tStart, tStop+1)+"]");
-		if (trimWSP) {
-			return trimWSP(data, tStart, tStop);
-		} else {
-			return data.subSequence(tStart, tStop+1);
-		}
-	}
-	
-	private CharSequence trimWSP(CharSequence data, int vStart, int vStop) {
-		if (vStop < vStart-1) throw new IllegalArgumentException("Stop must be >= than start");
-		while (vStart <= vStop && (data.charAt(vStart) == ' ' || data.charAt(vStart) == '\t')) vStart++;
-		while (vStart <= vStop && (data.charAt(vStop) == ' ' || data.charAt(vStop) == '\t')) vStop--;
-		return data.subSequence(vStart, vStop+1);
-	}
-	
-	public TagValue(String data) {
-		init();
-		parse(data);
-	}
-	
-	protected void init() {
-		// extensions may override this to use TreeMaps in order to keep track of orders
-		tagValues = new HashMap();
-	}
-
-	/**
-	 * subclasses have to make sure tagValues is initialized during init().
-	 * @param data the string to be parsed
-	 */
-	protected void parse(String data) {
-		for (int i = 0; i < data.length(); i++) {
-			int equal = data.indexOf('=', i);
-			if (equal == -1) {
-				// TODO check whether this is correct or not
-				// this allow FWS/WSP after the final ";"
-				String rest = data.substring(i);
-				if (rest.length() > 0 && trimFWS(rest, 0, rest.length()-1, true).length() > 0) {
-					throw new IllegalStateException("Unexpected termination at position "+i+": "+data);
-				}
-				i = data.length();
-				continue;
-			}
-			// we could start from "equals" but we start from "i" in 
-			// order to spot invalid values before validation.
-			int next = data.indexOf(';', i);
-			if (next == -1) {
-				next = data.length();
-			}
-			
-			if (equal > next) {
-				throw new IllegalStateException("Found ';' before '=' in "+data);
-			}
-			
-			CharSequence tag = trimFWS(data, i, equal-1, true).toString();
-			if (VALIDATION && !tagPattern.matcher(tag).matches()) {
-				throw new IllegalStateException("Syntax error in tag: "+tag);
-			}
-			String tagString = tag.toString();
-			if (tagValues.containsKey(tagString)) {
-				throw new IllegalStateException("Syntax error (duplicate tag): "+tag);
-			}
-
-			CharSequence value = trimFWS(data, equal+1, next-1, true);
-			if (VALIDATION && !valuePattern.matcher(value).matches()) {
-				throw new IllegalStateException("Syntax error in value: "+value);
-			}
-			
-			tagValues.put(tagString, value);
-			i = next;
-		}
-	}
-	
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = prime * result
-				+ ((tagValues == null) ? 0 : tagValues.hashCode());
-		return result;
-	}
-
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (obj == null)
-			return false;
-		if (getClass() != obj.getClass())
-			return false;
-		TagValue other = (TagValue) obj;
-		if (tagValues == null) {
-			if (other.tagValues != null)
-				return false;
-		} else if (!tagValues.equals(other.tagValues))
-			return false;
-		return true;
-	}
-
-	public Set getTags() {
-		return tagValues.keySet();
-	}
-	
-	protected CharSequence getValue(String key) {
-		CharSequence val = (CharSequence) tagValues.get(key);
-		if (val == null) return getDefault(key);
-		else return val;
-	}
-
-	protected CharSequence getDefault(String key) {
-		return (CharSequence) defaults.get(key);
-	}
-	
-	public void validate() {
-		// check mandatory fields
-		for (Iterator i = mandatoryTags.iterator(); i.hasNext(); ) {
-			String tag = (String) i.next();
-			if (getValue(tag)==null) throw new IllegalStateException("Missing mandatory tag: "+tag);
-		}
-	}
-
-	protected List stringToColonSeparatedList(String h, Pattern pattern) {
-		List headers = new ArrayList();
-		for (int i = 0; i < h.length(); i++) {
-			int p = h.indexOf(':', i);
-			if (p == -1) p = h.length();
-			CharSequence cs = trimFWS(h, i, p-1, false);
-			if (VALIDATION) {
-				if (!pattern.matcher(cs).matches()) throw new IllegalStateException("Syntax error in field name: "+cs);
-			}
-			headers.add(cs);
-			i = p;
-		}
-		return headers;
-	}
-
-	protected boolean isInListCaseInsensitive(CharSequence hash, List hashes) {
-		for (Iterator i = hashes.iterator(); i.hasNext(); ) {
-			CharSequence suppHash = (CharSequence) i.next();
-			if (hash.toString().equalsIgnoreCase(suppHash.toString())) return true;
-		}
-		return false;
-	}
-
-	public String toString() {
-		StringBuffer res = new StringBuffer();
-		Set s = getTags();
-		for (Iterator i = s.iterator(); i.hasNext(); ) {
-			String tag = (String) i.next();
-			res.append(tag);
-			res.append("=");
-			res.append(getValue(tag));
-			res.append("; ");
-		}
-		return res.toString();
-	}
+
+    private static final boolean DEBUG = false;
+    protected static final boolean VALIDATION = true;
+
+    private static Pattern tagPattern = Pattern
+            .compile("^[A-Za-z][A-Za-z0-9_]*$");
+    private static final String tval = "[^; \t\r\n]+";
+    // validate value chars
+    private static Pattern valuePattern = Pattern.compile("^(" + tval
+            + "((\r\n[\t ]|[\t ])+" + tval + ")*)?$");
+
+    // we may use a TreeMap because we may need to know original order.
+    protected Map/* String, CharSequence */tagValues;
+
+    protected Set/* String */mandatoryTags = new HashSet();
+    protected Map/* String, CharSequence */defaults = new HashMap();
+
+    protected CharSequence trimFWS(CharSequence data, int tStart, int tStop,
+            boolean trimWSP) {
+        if (DEBUG)
+            System.out.println("1[" + data + "]" + tStart + "|" + tStop + "="
+                    + data.subSequence(tStart, tStop + 1) + "]");
+        // rimozione di FWS a inizio selezione
+        while (tStart < tStop
+                && (data.charAt(tStart) == ' ' || data.charAt(tStart) == '\t')
+                || (tStart < tStop - 2 && data.charAt(tStart) == '\r'
+                        && data.charAt(tStart + 1) == '\n' && (data
+                        .charAt(tStart + 2) == ' ' || data.charAt(tStart + 2) == '\t'))) {
+            if (data.charAt(tStart) == '\r')
+                tStart += 3;
+            else
+                tStart++;
+        }
+
+        if (DEBUG)
+            System.out.println("2[" + data + "]" + tStart + "|" + tStop + "="
+                    + data.subSequence(tStart, tStop + 1) + "]");
+        // rimozione di FWS a fine selezione.
+        while (tStart < tStop
+                && (data.charAt(tStop) == ' ' || data.charAt(tStop) == '\t')) {
+            tStop--;
+            if ((tStart <= tStop - 1 && data.charAt(tStop) == '\n' && data
+                    .charAt(tStop - 1) == '\r')
+                    || (tStart < tStop && (data.charAt(tStop) == ' ' || data
+                            .charAt(tStop) == '\t'))) {
+                if (data.charAt(tStop) == '\n')
+                    tStop -= 2;
+                else
+                    tStop--;
+            }
+        }
+
+        if (DEBUG)
+            System.out.println("3[" + data + "]" + tStart + "|" + tStop + "="
+                    + data.subSequence(tStart, tStop + 1) + "]");
+        if (trimWSP) {
+            return trimWSP(data, tStart, tStop);
+        } else {
+            return data.subSequence(tStart, tStop + 1);
+        }
+    }
+
+    private CharSequence trimWSP(CharSequence data, int vStart, int vStop) {
+        if (vStop < vStart - 1)
+            throw new IllegalArgumentException("Stop must be >= than start");
+        while (vStart <= vStop
+                && (data.charAt(vStart) == ' ' || data.charAt(vStart) == '\t'))
+            vStart++;
+        while (vStart <= vStop
+                && (data.charAt(vStop) == ' ' || data.charAt(vStop) == '\t'))
+            vStop--;
+        return data.subSequence(vStart, vStop + 1);
+    }
+
+    public TagValue(String data) {
+        init();
+        parse(data);
+    }
+
+    protected void init() {
+        // extensions may override this to use TreeMaps in order to keep track
+        // of orders
+        tagValues = new HashMap();
+    }
+
+    /**
+     * subclasses have to make sure tagValues is initialized during init().
+     * 
+     * @param data
+     *                the string to be parsed
+     */
+    protected void parse(String data) {
+        for (int i = 0; i < data.length(); i++) {
+            int equal = data.indexOf('=', i);
+            if (equal == -1) {
+                // TODO check whether this is correct or not
+                // this allow FWS/WSP after the final ";"
+                String rest = data.substring(i);
+                if (rest.length() > 0
+                        && trimFWS(rest, 0, rest.length() - 1, true).length() > 0) {
+                    throw new IllegalStateException(
+                            "Unexpected termination at position " + i + ": "
+                                    + data);
+                }
+                i = data.length();
+                continue;
+            }
+            // we could start from "equals" but we start from "i" in
+            // order to spot invalid values before validation.
+            int next = data.indexOf(';', i);
+            if (next == -1) {
+                next = data.length();
+            }
+
+            if (equal > next) {
+                throw new IllegalStateException("Found ';' before '=' in "
+                        + data);
+            }
+
+            CharSequence tag = trimFWS(data, i, equal - 1, true).toString();
+            if (VALIDATION && !tagPattern.matcher(tag).matches()) {
+                throw new IllegalStateException("Syntax error in tag: " + tag);
+            }
+            String tagString = tag.toString();
+            if (tagValues.containsKey(tagString)) {
+                throw new IllegalStateException(
+                        "Syntax error (duplicate tag): " + tag);
+            }
+
+            CharSequence value = trimFWS(data, equal + 1, next - 1, true);
+            if (VALIDATION && !valuePattern.matcher(value).matches()) {
+                throw new IllegalStateException("Syntax error in value: "
+                        + value);
+            }
+
+            tagValues.put(tagString, value);
+            i = next;
+        }
+    }
+
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result
+                + ((tagValues == null) ? 0 : tagValues.hashCode());
+        return result;
+    }
+
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        TagValue other = (TagValue) obj;
+        if (tagValues == null) {
+            if (other.tagValues != null)
+                return false;
+        } else if (!tagValues.equals(other.tagValues))
+            return false;
+        return true;
+    }
+
+    public Set getTags() {
+        return tagValues.keySet();
+    }
+
+    protected CharSequence getValue(String key) {
+        CharSequence val = (CharSequence) tagValues.get(key);
+        if (val == null)
+            return getDefault(key);
+        else
+            return val;
+    }
+
+    protected CharSequence getDefault(String key) {
+        return (CharSequence) defaults.get(key);
+    }
+
+    public void validate() {
+        // check mandatory fields
+        for (Iterator i = mandatoryTags.iterator(); i.hasNext();) {
+            String tag = (String) i.next();
+            if (getValue(tag) == null)
+                throw new IllegalStateException("Missing mandatory tag: " + tag);
+        }
+    }
+
+    protected List stringToColonSeparatedList(String h, Pattern pattern) {
+        List headers = new ArrayList();
+        for (int i = 0; i < h.length(); i++) {
+            int p = h.indexOf(':', i);
+            if (p == -1)
+                p = h.length();
+            CharSequence cs = trimFWS(h, i, p - 1, false);
+            if (VALIDATION) {
+                if (!pattern.matcher(cs).matches())
+                    throw new IllegalStateException(
+                            "Syntax error in field name: " + cs);
+            }
+            headers.add(cs);
+            i = p;
+        }
+        return headers;
+    }
+
+    protected boolean isInListCaseInsensitive(CharSequence hash, List hashes) {
+        for (Iterator i = hashes.iterator(); i.hasNext();) {
+            CharSequence suppHash = (CharSequence) i.next();
+            if (hash.toString().equalsIgnoreCase(suppHash.toString()))
+                return true;
+        }
+        return false;
+    }
+
+    public String toString() {
+        StringBuffer res = new StringBuffer();
+        Set s = getTags();
+        for (Iterator i = s.iterator(); i.hasNext();) {
+            String tag = (String) i.next();
+            res.append(tag);
+            res.append("=");
+            res.append(getValue(tag));
+            res.append("; ");
+        }
+        return res.toString();
+    }
 
 }

Modified: james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/DKIMVerifierTest.java
URL: http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/DKIMVerifierTest.java?rev=824090&r1=824089&r2=824090&view=diff
==============================================================================
--- james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/DKIMVerifierTest.java (original)
+++ james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/DKIMVerifierTest.java Sun Oct 11 15:35:32 2009
@@ -27,42 +27,74 @@
 
 public class DKIMVerifierTest extends TestCase {
 
-	public void testApply() {
-		PublicKeyRecord pkr = new PublicKeyRecordImpl("k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
-		pkr.validate();
-		DKIMVerifier.apply(pkr, 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 {
-			DKIMVerifier.apply(pkr, 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();
-		DKIMVerifier.apply(pkr, new SignatureRecordImpl("v=1; a=rsa-sha256; c=relaxed/relaxed; i=test@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 {
-			DKIMVerifier.apply(pkr, new SignatureRecordImpl("v=1; a=rsa-sha256; c=relaxed/relaxed; i=test@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();
-		DKIMVerifier.apply(pkr, new SignatureRecordImpl("v=1; a=rsa-sha256; c=relaxed/relaxed; i=test@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 {
-			DKIMVerifier.apply(pkr, new SignatureRecordImpl("v=1; a=rsa-sha256; c=relaxed/relaxed; i=bad@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 {
-			DKIMVerifier.apply(pkr, 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 testApply() {
+        PublicKeyRecord pkr = new PublicKeyRecordImpl(
+                "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+        pkr.validate();
+        DKIMVerifier
+                .apply(
+                        pkr,
+                        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 {
+            DKIMVerifier
+                    .apply(
+                            pkr,
+                            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();
+        DKIMVerifier
+                .apply(
+                        pkr,
+                        new SignatureRecordImpl(
+                                "v=1; a=rsa-sha256; c=relaxed/relaxed; i=test@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 {
+            DKIMVerifier
+                    .apply(
+                            pkr,
+                            new SignatureRecordImpl(
+                                    "v=1; a=rsa-sha256; c=relaxed/relaxed; i=test@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();
+        DKIMVerifier
+                .apply(
+                        pkr,
+                        new SignatureRecordImpl(
+                                "v=1; a=rsa-sha256; c=relaxed/relaxed; i=test@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 {
+            DKIMVerifier
+                    .apply(
+                            pkr,
+                            new SignatureRecordImpl(
+                                    "v=1; a=rsa-sha256; c=relaxed/relaxed; i=bad@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 {
+            DKIMVerifier
+                    .apply(
+                            pkr,
+                            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) {
+        }
+    }
 
 }

Modified: james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/FileBasedTest.java
URL: http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/FileBasedTest.java?rev=824090&r1=824089&r2=824090&view=diff
==============================================================================
--- james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/FileBasedTest.java (original)
+++ james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/FileBasedTest.java Sun Oct 11 15:35:32 2009
@@ -37,112 +37,251 @@
  */
 public class FileBasedTest extends TestCase {
 
-	private File file;
+    private File file;
 
-	public FileBasedTest(String testName) {
-		this(testName, FileBasedTestSuite.getFile(testName));
-	}
-
-	public FileBasedTest(String name, File testFile) {
-		super(name);
-		this.file = testFile;
-	}
-
-	protected void runTest() throws Throwable {
-		MimeTokenStream stream = new MimeTokenStream();
-		stream.setRecursionMode(MimeTokenStream.M_FLAT);
-
-		InputStream is = new FileInputStream(file);
-		// String msgoutFile = file.getAbsolutePath().substring(0,
-		// file.getAbsolutePath().lastIndexOf('.')) + ".out";
-
-		MockPublicKeyRecordRetriever pkr = new MockPublicKeyRecordRetriever();
-		pkr
-				.addRecord(
-						"domk",
-						"brainlounge.de",
-						"t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMxdtsTy8K7yEHt+7DB4XH70Rd6v7rp2qai7gM1meDzlrwDlMzUi0mQC+dMY+AzmCE1jLNXAr3JL6kT8vD7KQai8avwGQzmlU3d0Z7etqTj1ttJQZxUTPM18bM3wVqc6h3Dppqx7kY91Td50r9MXBbu+DkhL1+RCfcPQxEvEf74QIDAQAB");
-		pkr
-				.addRecord(
-						"dkim",
-						"paypal.it",
-						"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD3j+gKW1qBM+psRHXAdR7tI9QcKW0Ii723AzyTO4nrVmuJoKWHLoEEQw/Nc4XF7iyhfadorjqZZ9f+qDXQiKPyLJyVXs0qLrnJQ9BWlQP0xIiz7CTcoHwEhJ1XwgUI/2V6bNghMrnK2yiR/Vqt5lV5kx4+n1656EefGuOTuNmIWwIDAQAB");
-		pkr
-				.addRecord(
-						"default",
-						"gfkresearch.com",
-						"t=y; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAM26TUEN/IatWRhSiguj8RyDmeFRQJG8gaNjdaOOJ3AZuGeCG1W9NwlkgDv7UxUUx3AIkFbU/wsDFMe/RGItcK5vKEkUP0roJ1fCTtYsfTHhmnhXyJsmj0eDvbwDg6BzfwIDAQAB");
-		pkr.addRecord("2007-00", "kitterman.com", "v=DKIM1; g=*; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCp9+s7hHTlMje842UBfd8nBYvX0I1CJzltQJ9bLGAKHbyCBTKei/dYuuDICKArbcVZ+05UbJzxU6cstPOaEoPM+FMD/lUiGpJYLYUuzRP7Pd82YHKoAZbYflGYTck2e7x8vB7l8WeEgRJ0cJdHm871HbQmv67LZiN+9donmjl93wIDAQAB;");
-		pkr.addRecord("beta", "gmail.com", "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC69TURXN3oNfz+G/m3g5rt4P6nsKmVgU1D6cw2X6BnxKJNlQKm10f8tMx6P6bN7juTR1BeD8ubaGqtzm2rWK4LiMJqhoQcwQziGbK1zp/MkdXZEWMCflLY6oUITrivK7JNOLXtZbdxJG2y/RAHGswKKyVhSP9niRsZF/IBr5p8uQIDAQAB");
-		pkr.addRecord("gamma", "gmail.com", "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
-		pkr.addRecord("beta", "google.com", "k=rsa; t=y; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMs93oc95ObA7OEQEbqjIy6YvRj1u3yVGTzQ3wkwRQTWx1fhvNQenPNFklaL+Tw9XFYUc3f8eY0hs3WUNQ+t+I0CAwEAAQ==");
-		pkr.addRecord("beta", "googlegroups.com", "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDs66DgKyXSlBvNCbi158TgsBzqh/n7GqCa2QwIORpNbndjlK8qaR9mb8gH9KG1S3ahZybrZT1N268dgF2VDWV14h1fpPMIj6KKoX6uzGomzIVdeGPmjZ7o3ZUaxHUWvwIEGlNv400xzBToSU44sXqQIwH5l08anWYw3sq9xBrI5wIDAQAB");
-		pkr.addRecord("gamma", "googlemail.com", "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
-		pkr.addRecord("s768", "t.contactlab.it", "k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAMUUS6qlVpzbGQ3SCsGwpuVlC6gtw+BXMkFhm+jd57GXPtwpbOgr+UaHlbq6OnFAgrHxVx55RrSsTxixw0t0ePGkdBHjE7fURGphf+Mr1gzhvvLO6j1f1/60zvQPyay5UQIDAQAB");
-		pkr.addRecord("s768", "contactlab.it", "k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAMUUS6qlVpzbGQ3SCsGwpuVlC6gtw+BXMkFhm+jd57GXPtwpbOgr+UaHlbq6OnFAgrHxVx55RrSsTxixw0t0ePGkdBHjE7fURGphf+Mr1gzhvvLO6j1f1/60zvQPyay5UQIDAQAB");
-		pkr.addRecord("emailroi", "mediapost.com", "g=; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC61RrUNTIcNbf/+f5Co2V37GMvPQdbUVyjgvLXrUKAXeJDwYVumAtE9BovuDZNYxcgG2oy7mkcZX/3rBF2SJX9Cp5yw0axuMpzkuzPQq26h+2+MLuvtJtfDIaHgNeEJOjMeq7s9RFQHRr9g26lkZQTRAob8YevaA9KHiNNyIaZuQIDAQAB;");
-		pkr.addRecord("dkim_s1024", "aweber.com", "v=DKIM1; k=rsa; h=sha1; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRAeDcyfWZQQ9sv+qRMQVTda/9yyYMo9qdI+h3i4U68+rrEruEoxLaa0JJw6OwFXzQ9x9raHZjroHsySzzQbIiZLj9o4IoCqpt5v0xd45+ABhQM6DyzHZDgIFcMtYIzEjaKLzkVpNeS9qr8Cra7CLtSqCbdAjGyUgVLveHrxNP9wIDAQAB");
-		pkr.addRecord("itunes", "new-music.itunes.com", "v=DKIM1; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMTdhQ9CBNvwYGPkggikcMqT90O4JAzPfxtPaeJ1CgfTlXk0GL3OTz1nfeN3w2ybTpIKYRLrW23Qppaunpb/3dMCAwEAAQ==;");
-		pkr.addRecord("lima", "yahoogroups.com", "k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAL10WHRWMSb9Tnl+k4Kzpc18rDCTpDT1pbK0xwkdZIZkaP8NB75qa/S57xccZlIwbI22Ooy/IY+8WxQtvE2z4WLLNOf9hkMeicUH48TGkEoCAcaSjJz/b3NMrOy9l1U7gQIDAP//");
-		pkr.addRecord("s1024", "yahoo.co.in", "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB; n=A 1024 bit key;");
-		pkr.addRecord("k1", "adidasnewsletter.com", "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3VqSTEgEkHtfDiMCzoYtY1wjcArcmb+efQJfzX4zJA60IEA/NmOaHP8Gu02vscLbJWT/mwGlZwr2Q53g9VMQOyoODD5ju1EwJwlioVQ1W7xSjogMTz8yzmWhcMUzXQOu/iD+7sdJP0+k7pCumPMbxEeN33At7HxoYVCSkNdUB9QIDAQAB");
-		pkr.addRecord("200505", "yahoo-email.com", "t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDaMFcW5fNoye1Xo7BT/lKCHThjn1QaVdcxoAy7Y1m2tXnR3X+qUxFRaoyReTVlxfO8vaIPSbJ2Pm6+sZkC0lH/6Ok+i0RDhtd7bq9oLFKclfMGQlphBB185c1zDKNTs7GyAyjSM7pEzx5Dai+YTE9/+GYhdbEWmGBS9TsXnTCKPQIDAQAB");
-		pkr.addRecord("v1", "alerts.hp.com", "k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAPSCrSVhxHa6F3EpDjnw6xdpfTv8sNz5Plbl3b3Zqq9WVVg2j5+748EkwtvzQlA6TQuZIOrpSHJkP0nEyCR5GatNasOKPWFO47VSLFO9AJbsc34eGUUTF49bBIACiE4b9wIDAQAB");
-		pkr.addRecord("v1", "rodale.delivery.net", "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWWvSsm60Wx178Y7pET3m/UZaof+qtRxZa8RXfyTIiGYMXJFwHgd3VrTLF6xmoCyRC1kfv3k7nPujkGFydBCoRK/vCN/1e4yHAsSwh/ElTO5dqylvP77PJyiaME582m4wXf095NBXJZlHUlXb7SWDdmCeU5uXfcR0EJU0eRewflQIDAQAB");
-		pkr.addRecord("domk", "brainlounge.de", "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMxdtsTy8K7yEHt+7DB4XH70Rd6v7rp2qai7gM1meDzlrwDlMzUi0mQC+dMY+AzmCE1jLNXAr3JL6kT8vD7KQai8avwGQzmlU3d0Z7etqTj1ttJQZxUTPM18bM3wVqc6h3Dppqx7kY91Td50r9MXBbu+DkhL1+RCfcPQxEvEf74QIDAQAB");
-		pkr.addRecord("spop", "newsletters.play.com", "g=; k=rsa; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOaOtP9KfyxvWET0yXoL2ugcas2SjoBZ+40oZ6/twAEtW224fcuvOFiNS+XpPq5LNW96NYAuxJPBlwLoYlHRUQkCAwEAAQ==");
-		pkr.addRecord("ironport-dkim", "ironport.com", "p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJqzyi+tkPHw4hrcTSJBXTh3m2koCKP0+J6/r+yVVg7VoRKPz/tguE+M6fF0oqLk5Fci+tE8HFS3HLkl0au17CcCAwEAAQ==;");
-		pkr.addRecord("smtp-out", "abv.bg", "g=*; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPShtI1XjhVGpVrKyBuFP5K0jqFqy5gC8GujqF9lTCN/Epg/kObBOORSVAZ0DRawBHyRWDcscPwK8MhzQb2ZjRKGGK1L6OqaDQL5y9o0f2dqtuwMzGqJyaIL4Wrs3v0YbqD1w4G6pq/5NxfPpKyKqAbiCTGrutCo/dQaRF/YjPnQIDAQAB");
-		pkr.addRecord("rte02", "amazon.co.uk", "p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ8ZPV/qBm64HtL09YSynw1kPGlSPb0ZGiqcKuXfMh36SZhzj0ejzl4gktXsaA7P1G59gsxtl47q58aFkDV/sfMCAwEAAQ==;");
-		pkr.addRecord("bnpparibas.com", "bnpparibas.com", "t=y; k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhANNNDEMXsk1tiHUpJyNQjjRvO2FtxvD0+JcRiugSUpHysjlKpU8mghN7U12veeN8msqyIen4XExVIIQiJ8xNM3RSaqijRdfvP/8BKHB8jvMyeK6WXJa/epUXvEbc1LDbqQIDAQAB;");
-		pkr.addRecord("dkim", "paypal.it", "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD3j+gKW1qBM+psRHXAdR7tI9QcKW0Ii723AzyTO4nrVmuJoKWHLoEEQw/Nc4XF7iyhfadorjqZZ9f+qDXQiKPyLJyVXs0qLrnJQ9BWlQP0xIiz7CTcoHwEhJ1XwgUI/2V6bNghMrnK2yiR/Vqt5lV5kx4+n1656EefGuOTuNmIWwIDAQAB");
-		pkr.addRecord("emarsys2007", "reply.ebay.it", "t=y; k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAN0+C5B9PA1ZtdxRvF5hmETzHwQ2NvEmpHILm4afsY16Gw2JVEmwGuXUmyAmbAdQjERKbll1mFQ+9oPcmpr4uwcPHRfE6b2s8V4YK7vofxKJjZ+3PK6jtP4FMHXso/C1+wIDAQAB;");
-		pkr.addRecord("q1-2009b", "facebookmail.com", "k=rsa; t=s; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKrBYvYESXSgiYzKNufh9WG8cktn2yrmdqGs9uz8VL6Mz44GuX8xJAQjpmPObe6p2vfTMWeztKEudwY6ei7UcZMCAwEAAQ==");
-		pkr.addRecord("spop", "em.fileplanet.com", "g=; k=rsa; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALsyVo5aJtEzBm5p3+7N/7d0HfczMgJnsqapraAgMe+K2ng9gWsXvAugwh1/OlhzkA69ZCFck47qSN/wGFDwEFUCAwEAAQ==");
-		pkr.addRecord("default", "bouncemanager.it", "v=DKIM1; g=*; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDUekin7hdVzGRw3k0iKRyg0MSj1PeC94A7wzOT0L9cQW0fIEeIM07bmAwbc4MgXnScPGiZnhPDVNxO40YUNbR9JOc+EoESSErWUCHeNYm7dyPG1aVEvfUT+OKprEwFldAdSv9c/C92otFdlWd8lSTuYiE1qNHhQim+7kzdV7SEUQIDAQAB");
-		pkr.addRecord("default", "gfkresearch.com", "t=y; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAM26TUEN/IatWRhSiguj8RyDmeFRQJG8gaNjdaOOJ3AZuGeCG1W9NwlkgDv7UxUUx3AIkFbU/wsDFMe/RGItcK5vKEkUP0roJ1fCTtYsfTHhmnhXyJsmj0eDvbwDg6BzfwIDAQAB");
-		pkr.addRecord("key1", "listrak.com", "k=rsa; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAPM8yO1kwQBzUUq6PP0epEshX1Vm7ThUrCddHgCn3b0llq8NRvGw5eOQBKySYngTkYyd5M0fImghDxxDsAnC9DsCAwEAAQ==");
-		pkr.addRecord("mail", "emailsadvertiser.com", "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrf8/zzjRv85obYOx6GQjjNba/ m9uNLWKA53vHJNm/y69jM8+3rJr5eAAEJWpt7czNVkrWzwztfYRvai5Bs2Yvv5hS WbKl6Zr93s7I1HBn7MjCFZFW/MWeqlIydj+D8Zyy6ASqb9dYjD8qcLnncUse72du 6fEdEo/CR++P9x6sxwIDAQAB");
-		pkr.addRecord("proddkim", "linkedin.com", "v=DKIM1; t=y:s; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAM+u1MLWZz+wOnU/C53PqLT4ITdkq+TC1xkWcoRMXq2FVH1kvXRxtqfbL4k5vYh7JVQ6nPrS+ldEpIbJzVaxhP5Kggi4SNfdf8GdbpGXcJj6SHKRFb8Mryp0ilk2XecLcQIDAQAB;");
-		pkr.addRecord("s1024", "yahoo.com", "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB; n=A 1024 bit key;");
-		pkr.addRecord("pmta", "myspace.com", "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChRebhcm4h8BkIYHRxg1GlKLsDkwdrqkFJ8f88xHQ5Gf3NH4I4e06M3XQ+B4tWWK/rX0srwXFgrJPzKZK+x7gN89nmqyM+NNaM+Wm2C0GjTpx6639zK3bAAGYCm0L9lGD7PgDxpWok+YogH0Ml4acEwDw/cnhErAWAnX8doPliawIDAQAB");
-
-		try {
-			new DKIMVerifier(pkr).verify(is);
-			if (getName().startsWith("FAIL_")) fail("Expected failure");
-		} catch (PermFailException e) {
-			e.printStackTrace();
-			if (!getName().startsWith("FAIL_")) fail(e.getMessage());
-		}
-	}
-
-	public static Test suite() throws IOException {
-		return new FileBasedTestSuite();
-	}
-
-	static class FileBasedTestSuite extends TestSuite {
-
-		private static final File TESTS_FOLDER = new File(
-				"main\\src\\test\\resources\\org\\apache\\james\\jdkim\\corpus");
-
-		public FileBasedTestSuite() throws IOException {
-			super();
-			File dir = TESTS_FOLDER;
-			File[] files = dir.listFiles();
-
-			if (files != null) for (int i = 0; i < files.length; i++) {
-				File f = files[i];
-				if (f.getName().toLowerCase().endsWith(".eml")) {
-					addTest(new FileBasedTest(f.getName().substring(0,
-							f.getName().length() - 4), f));
-				}
-			}
-		}
-
-		public static File getFile(String name) {
-			return new File(TESTS_FOLDER.getAbsolutePath() + File.separator
-					+ name + ".eml");
-		}
+    public FileBasedTest(String testName) {
+        this(testName, FileBasedTestSuite.getFile(testName));
+    }
+
+    public FileBasedTest(String name, File testFile) {
+        super(name);
+        this.file = testFile;
+    }
+
+    protected void runTest() throws Throwable {
+        MimeTokenStream stream = new MimeTokenStream();
+        stream.setRecursionMode(MimeTokenStream.M_FLAT);
+
+        InputStream is = new FileInputStream(file);
+        // String msgoutFile = file.getAbsolutePath().substring(0,
+        // file.getAbsolutePath().lastIndexOf('.')) + ".out";
+
+        MockPublicKeyRecordRetriever pkr = new MockPublicKeyRecordRetriever();
+        pkr
+                .addRecord(
+                        "domk",
+                        "brainlounge.de",
+                        "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMxdtsTy8K7yEHt+7DB4XH70Rd6v7rp2qai7gM1meDzlrwDlMzUi0mQC+dMY+AzmCE1jLNXAr3JL6kT8vD7KQai8avwGQzmlU3d0Z7etqTj1ttJQZxUTPM18bM3wVqc6h3Dppqx7kY91Td50r9MXBbu+DkhL1+RCfcPQxEvEf74QIDAQAB");
+        pkr
+                .addRecord(
+                        "dkim",
+                        "paypal.it",
+                        "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD3j+gKW1qBM+psRHXAdR7tI9QcKW0Ii723AzyTO4nrVmuJoKWHLoEEQw/Nc4XF7iyhfadorjqZZ9f+qDXQiKPyLJyVXs0qLrnJQ9BWlQP0xIiz7CTcoHwEhJ1XwgUI/2V6bNghMrnK2yiR/Vqt5lV5kx4+n1656EefGuOTuNmIWwIDAQAB");
+        pkr
+                .addRecord(
+                        "default",
+                        "gfkresearch.com",
+                        "t=y; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAM26TUEN/IatWRhSiguj8RyDmeFRQJG8gaNjdaOOJ3AZuGeCG1W9NwlkgDv7UxUUx3AIkFbU/wsDFMe/RGItcK5vKEkUP0roJ1fCTtYsfTHhmnhXyJsmj0eDvbwDg6BzfwIDAQAB");
+        pkr
+                .addRecord(
+                        "2007-00",
+                        "kitterman.com",
+                        "v=DKIM1; g=*; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCp9+s7hHTlMje842UBfd8nBYvX0I1CJzltQJ9bLGAKHbyCBTKei/dYuuDICKArbcVZ+05UbJzxU6cstPOaEoPM+FMD/lUiGpJYLYUuzRP7Pd82YHKoAZbYflGYTck2e7x8vB7l8WeEgRJ0cJdHm871HbQmv67LZiN+9donmjl93wIDAQAB;");
+        pkr
+                .addRecord(
+                        "beta",
+                        "gmail.com",
+                        "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC69TURXN3oNfz+G/m3g5rt4P6nsKmVgU1D6cw2X6BnxKJNlQKm10f8tMx6P6bN7juTR1BeD8ubaGqtzm2rWK4LiMJqhoQcwQziGbK1zp/MkdXZEWMCflLY6oUITrivK7JNOLXtZbdxJG2y/RAHGswKKyVhSP9niRsZF/IBr5p8uQIDAQAB");
+        pkr
+                .addRecord(
+                        "gamma",
+                        "gmail.com",
+                        "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+        pkr
+                .addRecord(
+                        "beta",
+                        "google.com",
+                        "k=rsa; t=y; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMs93oc95ObA7OEQEbqjIy6YvRj1u3yVGTzQ3wkwRQTWx1fhvNQenPNFklaL+Tw9XFYUc3f8eY0hs3WUNQ+t+I0CAwEAAQ==");
+        pkr
+                .addRecord(
+                        "beta",
+                        "googlegroups.com",
+                        "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDs66DgKyXSlBvNCbi158TgsBzqh/n7GqCa2QwIORpNbndjlK8qaR9mb8gH9KG1S3ahZybrZT1N268dgF2VDWV14h1fpPMIj6KKoX6uzGomzIVdeGPmjZ7o3ZUaxHUWvwIEGlNv400xzBToSU44sXqQIwH5l08anWYw3sq9xBrI5wIDAQAB");
+        pkr
+                .addRecord(
+                        "gamma",
+                        "googlemail.com",
+                        "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIhyR3oItOy22ZOaBrIVe9m/iME3RqOJeasANSpg2YTHTYV+Xtp4xwf5gTjCmHQEMOs0qYu0FYiNQPQogJ2t0Mfx9zNu06rfRBDjiIU9tpx2T+NGlWZ8qhbiLo5By8apJavLyqTLavyPSrvsx0B3YzC63T4Age2CDqZYA+OwSMWQIDAQAB");
+        pkr
+                .addRecord(
+                        "s768",
+                        "t.contactlab.it",
+                        "k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAMUUS6qlVpzbGQ3SCsGwpuVlC6gtw+BXMkFhm+jd57GXPtwpbOgr+UaHlbq6OnFAgrHxVx55RrSsTxixw0t0ePGkdBHjE7fURGphf+Mr1gzhvvLO6j1f1/60zvQPyay5UQIDAQAB");
+        pkr
+                .addRecord(
+                        "s768",
+                        "contactlab.it",
+                        "k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAMUUS6qlVpzbGQ3SCsGwpuVlC6gtw+BXMkFhm+jd57GXPtwpbOgr+UaHlbq6OnFAgrHxVx55RrSsTxixw0t0ePGkdBHjE7fURGphf+Mr1gzhvvLO6j1f1/60zvQPyay5UQIDAQAB");
+        pkr
+                .addRecord(
+                        "emailroi",
+                        "mediapost.com",
+                        "g=; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC61RrUNTIcNbf/+f5Co2V37GMvPQdbUVyjgvLXrUKAXeJDwYVumAtE9BovuDZNYxcgG2oy7mkcZX/3rBF2SJX9Cp5yw0axuMpzkuzPQq26h+2+MLuvtJtfDIaHgNeEJOjMeq7s9RFQHRr9g26lkZQTRAob8YevaA9KHiNNyIaZuQIDAQAB;");
+        pkr
+                .addRecord(
+                        "dkim_s1024",
+                        "aweber.com",
+                        "v=DKIM1; k=rsa; h=sha1; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRAeDcyfWZQQ9sv+qRMQVTda/9yyYMo9qdI+h3i4U68+rrEruEoxLaa0JJw6OwFXzQ9x9raHZjroHsySzzQbIiZLj9o4IoCqpt5v0xd45+ABhQM6DyzHZDgIFcMtYIzEjaKLzkVpNeS9qr8Cra7CLtSqCbdAjGyUgVLveHrxNP9wIDAQAB");
+        pkr
+                .addRecord(
+                        "itunes",
+                        "new-music.itunes.com",
+                        "v=DKIM1; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMTdhQ9CBNvwYGPkggikcMqT90O4JAzPfxtPaeJ1CgfTlXk0GL3OTz1nfeN3w2ybTpIKYRLrW23Qppaunpb/3dMCAwEAAQ==;");
+        pkr
+                .addRecord(
+                        "lima",
+                        "yahoogroups.com",
+                        "k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAL10WHRWMSb9Tnl+k4Kzpc18rDCTpDT1pbK0xwkdZIZkaP8NB75qa/S57xccZlIwbI22Ooy/IY+8WxQtvE2z4WLLNOf9hkMeicUH48TGkEoCAcaSjJz/b3NMrOy9l1U7gQIDAP//");
+        pkr
+                .addRecord(
+                        "s1024",
+                        "yahoo.co.in",
+                        "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB; n=A 1024 bit key;");
+        pkr
+                .addRecord(
+                        "k1",
+                        "adidasnewsletter.com",
+                        "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3VqSTEgEkHtfDiMCzoYtY1wjcArcmb+efQJfzX4zJA60IEA/NmOaHP8Gu02vscLbJWT/mwGlZwr2Q53g9VMQOyoODD5ju1EwJwlioVQ1W7xSjogMTz8yzmWhcMUzXQOu/iD+7sdJP0+k7pCumPMbxEeN33At7HxoYVCSkNdUB9QIDAQAB");
+        pkr
+                .addRecord(
+                        "200505",
+                        "yahoo-email.com",
+                        "t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDaMFcW5fNoye1Xo7BT/lKCHThjn1QaVdcxoAy7Y1m2tXnR3X+qUxFRaoyReTVlxfO8vaIPSbJ2Pm6+sZkC0lH/6Ok+i0RDhtd7bq9oLFKclfMGQlphBB185c1zDKNTs7GyAyjSM7pEzx5Dai+YTE9/+GYhdbEWmGBS9TsXnTCKPQIDAQAB");
+        pkr
+                .addRecord(
+                        "v1",
+                        "alerts.hp.com",
+                        "k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAPSCrSVhxHa6F3EpDjnw6xdpfTv8sNz5Plbl3b3Zqq9WVVg2j5+748EkwtvzQlA6TQuZIOrpSHJkP0nEyCR5GatNasOKPWFO47VSLFO9AJbsc34eGUUTF49bBIACiE4b9wIDAQAB");
+        pkr
+                .addRecord(
+                        "v1",
+                        "rodale.delivery.net",
+                        "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWWvSsm60Wx178Y7pET3m/UZaof+qtRxZa8RXfyTIiGYMXJFwHgd3VrTLF6xmoCyRC1kfv3k7nPujkGFydBCoRK/vCN/1e4yHAsSwh/ElTO5dqylvP77PJyiaME582m4wXf095NBXJZlHUlXb7SWDdmCeU5uXfcR0EJU0eRewflQIDAQAB");
+        pkr
+                .addRecord(
+                        "domk",
+                        "brainlounge.de",
+                        "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMxdtsTy8K7yEHt+7DB4XH70Rd6v7rp2qai7gM1meDzlrwDlMzUi0mQC+dMY+AzmCE1jLNXAr3JL6kT8vD7KQai8avwGQzmlU3d0Z7etqTj1ttJQZxUTPM18bM3wVqc6h3Dppqx7kY91Td50r9MXBbu+DkhL1+RCfcPQxEvEf74QIDAQAB");
+        pkr
+                .addRecord(
+                        "spop",
+                        "newsletters.play.com",
+                        "g=; k=rsa; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOaOtP9KfyxvWET0yXoL2ugcas2SjoBZ+40oZ6/twAEtW224fcuvOFiNS+XpPq5LNW96NYAuxJPBlwLoYlHRUQkCAwEAAQ==");
+        pkr
+                .addRecord(
+                        "ironport-dkim",
+                        "ironport.com",
+                        "p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJqzyi+tkPHw4hrcTSJBXTh3m2koCKP0+J6/r+yVVg7VoRKPz/tguE+M6fF0oqLk5Fci+tE8HFS3HLkl0au17CcCAwEAAQ==;");
+        pkr
+                .addRecord(
+                        "smtp-out",
+                        "abv.bg",
+                        "g=*; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPShtI1XjhVGpVrKyBuFP5K0jqFqy5gC8GujqF9lTCN/Epg/kObBOORSVAZ0DRawBHyRWDcscPwK8MhzQb2ZjRKGGK1L6OqaDQL5y9o0f2dqtuwMzGqJyaIL4Wrs3v0YbqD1w4G6pq/5NxfPpKyKqAbiCTGrutCo/dQaRF/YjPnQIDAQAB");
+        pkr
+                .addRecord(
+                        "rte02",
+                        "amazon.co.uk",
+                        "p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ8ZPV/qBm64HtL09YSynw1kPGlSPb0ZGiqcKuXfMh36SZhzj0ejzl4gktXsaA7P1G59gsxtl47q58aFkDV/sfMCAwEAAQ==;");
+        pkr
+                .addRecord(
+                        "bnpparibas.com",
+                        "bnpparibas.com",
+                        "t=y; k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhANNNDEMXsk1tiHUpJyNQjjRvO2FtxvD0+JcRiugSUpHysjlKpU8mghN7U12veeN8msqyIen4XExVIIQiJ8xNM3RSaqijRdfvP/8BKHB8jvMyeK6WXJa/epUXvEbc1LDbqQIDAQAB;");
+        pkr
+                .addRecord(
+                        "dkim",
+                        "paypal.it",
+                        "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD3j+gKW1qBM+psRHXAdR7tI9QcKW0Ii723AzyTO4nrVmuJoKWHLoEEQw/Nc4XF7iyhfadorjqZZ9f+qDXQiKPyLJyVXs0qLrnJQ9BWlQP0xIiz7CTcoHwEhJ1XwgUI/2V6bNghMrnK2yiR/Vqt5lV5kx4+n1656EefGuOTuNmIWwIDAQAB");
+        pkr
+                .addRecord(
+                        "emarsys2007",
+                        "reply.ebay.it",
+                        "t=y; k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAN0+C5B9PA1ZtdxRvF5hmETzHwQ2NvEmpHILm4afsY16Gw2JVEmwGuXUmyAmbAdQjERKbll1mFQ+9oPcmpr4uwcPHRfE6b2s8V4YK7vofxKJjZ+3PK6jtP4FMHXso/C1+wIDAQAB;");
+        pkr
+                .addRecord(
+                        "q1-2009b",
+                        "facebookmail.com",
+                        "k=rsa; t=s; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKrBYvYESXSgiYzKNufh9WG8cktn2yrmdqGs9uz8VL6Mz44GuX8xJAQjpmPObe6p2vfTMWeztKEudwY6ei7UcZMCAwEAAQ==");
+        pkr
+                .addRecord(
+                        "spop",
+                        "em.fileplanet.com",
+                        "g=; k=rsa; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALsyVo5aJtEzBm5p3+7N/7d0HfczMgJnsqapraAgMe+K2ng9gWsXvAugwh1/OlhzkA69ZCFck47qSN/wGFDwEFUCAwEAAQ==");
+        pkr
+                .addRecord(
+                        "default",
+                        "bouncemanager.it",
+                        "v=DKIM1; g=*; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDUekin7hdVzGRw3k0iKRyg0MSj1PeC94A7wzOT0L9cQW0fIEeIM07bmAwbc4MgXnScPGiZnhPDVNxO40YUNbR9JOc+EoESSErWUCHeNYm7dyPG1aVEvfUT+OKprEwFldAdSv9c/C92otFdlWd8lSTuYiE1qNHhQim+7kzdV7SEUQIDAQAB");
+        pkr
+                .addRecord(
+                        "default",
+                        "gfkresearch.com",
+                        "t=y; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAM26TUEN/IatWRhSiguj8RyDmeFRQJG8gaNjdaOOJ3AZuGeCG1W9NwlkgDv7UxUUx3AIkFbU/wsDFMe/RGItcK5vKEkUP0roJ1fCTtYsfTHhmnhXyJsmj0eDvbwDg6BzfwIDAQAB");
+        pkr
+                .addRecord(
+                        "key1",
+                        "listrak.com",
+                        "k=rsa; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAPM8yO1kwQBzUUq6PP0epEshX1Vm7ThUrCddHgCn3b0llq8NRvGw5eOQBKySYngTkYyd5M0fImghDxxDsAnC9DsCAwEAAQ==");
+        pkr
+                .addRecord(
+                        "mail",
+                        "emailsadvertiser.com",
+                        "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrf8/zzjRv85obYOx6GQjjNba/ m9uNLWKA53vHJNm/y69jM8+3rJr5eAAEJWpt7czNVkrWzwztfYRvai5Bs2Yvv5hS WbKl6Zr93s7I1HBn7MjCFZFW/MWeqlIydj+D8Zyy6ASqb9dYjD8qcLnncUse72du 6fEdEo/CR++P9x6sxwIDAQAB");
+        pkr
+                .addRecord(
+                        "proddkim",
+                        "linkedin.com",
+                        "v=DKIM1; t=y:s; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAM+u1MLWZz+wOnU/C53PqLT4ITdkq+TC1xkWcoRMXq2FVH1kvXRxtqfbL4k5vYh7JVQ6nPrS+ldEpIbJzVaxhP5Kggi4SNfdf8GdbpGXcJj6SHKRFb8Mryp0ilk2XecLcQIDAQAB;");
+        pkr
+                .addRecord(
+                        "s1024",
+                        "yahoo.com",
+                        "k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB; n=A 1024 bit key;");
+        pkr
+                .addRecord(
+                        "pmta",
+                        "myspace.com",
+                        "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChRebhcm4h8BkIYHRxg1GlKLsDkwdrqkFJ8f88xHQ5Gf3NH4I4e06M3XQ+B4tWWK/rX0srwXFgrJPzKZK+x7gN89nmqyM+NNaM+Wm2C0GjTpx6639zK3bAAGYCm0L9lGD7PgDxpWok+YogH0Ml4acEwDw/cnhErAWAnX8doPliawIDAQAB");
+
+        try {
+            new DKIMVerifier(pkr).verify(is);
+            if (getName().startsWith("FAIL_"))
+                fail("Expected failure");
+        } catch (PermFailException e) {
+            e.printStackTrace();
+            if (!getName().startsWith("FAIL_"))
+                fail(e.getMessage());
+        }
+    }
+
+    public static Test suite() throws IOException {
+        return new FileBasedTestSuite();
+    }
+
+    static class FileBasedTestSuite extends TestSuite {
+
+        private static final File TESTS_FOLDER = new File(
+                "main\\src\\test\\resources\\org\\apache\\james\\jdkim\\corpus");
+
+        public FileBasedTestSuite() throws IOException {
+            super();
+            File dir = TESTS_FOLDER;
+            File[] files = dir.listFiles();
+
+            if (files != null)
+                for (int i = 0; i < files.length; i++) {
+                    File f = files[i];
+                    if (f.getName().toLowerCase().endsWith(".eml")) {
+                        addTest(new FileBasedTest(f.getName().substring(0,
+                                f.getName().length() - 4), f));
+                    }
+                }
+        }
+
+        public static File getFile(String name) {
+            return new File(TESTS_FOLDER.getAbsolutePath() + File.separator
+                    + name + ".eml");
+        }
 
-	}
+    }
 }
\ No newline at end of file

Modified: 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=824090&r1=824089&r2=824090&view=diff
==============================================================================
--- james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MessageTest.java (original)
+++ james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MessageTest.java Sun Oct 11 15:35:32 2009
@@ -34,87 +34,85 @@
 
 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("Subject", "Subject: test\r\n");
-		m.addField("Subject", "Subject: test2\r\n");
-		List f = m.getFields("Subject");
-		assertEquals(2, f.size());
-		assertEquals("Subject: test\r\n", f.get(0));
-		assertEquals("Subject: test2\r\n", f.get(1));
-	}
-
-	public void testGetFields() throws MimeException {
-		Message m = new Message();
-		m.addField("Subject", "Subject: test\r\n");
-		m.addField("Subject", "Subject: test2\r\n");
-		m.addField("From", "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("Subject", "Subject: test\r\n");
-		m.addField("subject", "subject: test2\r\n");
-		m.addField("From", "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 testToString() throws MimeException {
-		Message m = new Message();
-		m.addField("Subject", "Subject: test\r\n");
-		m.setBodyInputStream(new ByteArrayInputStream("body".getBytes()));
-		String expected = "Subject: test\r\n\r\nbody";
-		assertEquals(expected, m.toString());	
-	}
+    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("Subject", "Subject: test\r\n");
+        m.addField("Subject", "Subject: test2\r\n");
+        List f = m.getFields("Subject");
+        assertEquals(2, f.size());
+        assertEquals("Subject: test\r\n", f.get(0));
+        assertEquals("Subject: test2\r\n", f.get(1));
+    }
+
+    public void testGetFields() throws MimeException {
+        Message m = new Message();
+        m.addField("Subject", "Subject: test\r\n");
+        m.addField("Subject", "Subject: test2\r\n");
+        m.addField("From", "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("Subject", "Subject: test\r\n");
+        m.addField("subject", "subject: test2\r\n");
+        m.addField("From", "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 testToString() throws MimeException {
+        Message m = new Message();
+        m.addField("Subject", "Subject: test\r\n");
+        m.setBodyInputStream(new ByteArrayInputStream("body".getBytes()));
+        String expected = "Subject: test\r\n\r\nbody";
+        assertEquals(expected, m.toString());
+    }
 
 }

Modified: 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=824090&r1=824089&r2=824090&view=diff
==============================================================================
--- james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MockPublicKeyRecordRetriever.java (original)
+++ james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MockPublicKeyRecordRetriever.java Sun Oct 11 15:35:32 2009
@@ -29,40 +29,45 @@
 import org.apache.james.jdkim.exceptions.TempFailException;
 
 /**
- * This is a mock public key record retriever that store the "registry" in a local 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");
-	}
+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

Modified: 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=824090&r1=824089&r2=824090&view=diff
==============================================================================
--- james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetrieverTest.java (original)
+++ james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MultiplexingPublicKeyRecordRetrieverTest.java Sun Oct 11 15:35:32 2009
@@ -33,56 +33,59 @@
 
 public class MultiplexingPublicKeyRecordRetrieverTest extends TestCase {
 
-	private PublicKeyRecordRetriever myMethodRetriever = new PublicKeyRecordRetriever() {
+    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");
-	}
+        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");
+    }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org