blob: 744620163de3e591b2d35cc6567a5c68b74d7aac [file] [log] [blame]
/*
* Copyright (C) 2019, Thomas Wolf <thomas.wolf@paranor.ch> and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at
* https://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.eclipse.jgit.gpg.bc.internal;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.Locale;
import org.junit.Test;
public class BouncyCastleGpgKeyLocatorTest {
private static final String USER_ID = "Heinrich Heine <heinrichh@uni-duesseldorf.de>";
private static boolean match(String userId, String pattern) {
return BouncyCastleGpgKeyLocator.containsSigningKey(userId, pattern);
}
@Test
public void testFullMatch() throws Exception {
assertTrue(match(USER_ID,
"=Heinrich Heine <heinrichh@uni-duesseldorf.de>"));
assertFalse(match(USER_ID, "=Heinrich Heine"));
assertFalse(match(USER_ID, "= "));
assertFalse(match(USER_ID, "=heinrichh@uni-duesseldorf.de"));
}
@Test
public void testEmpty() throws Exception {
assertFalse(match(USER_ID, ""));
assertFalse(match(USER_ID, null));
assertFalse(match("", ""));
assertFalse(match(null, ""));
assertFalse(match(null, null));
assertFalse(match("", "something"));
assertFalse(match(null, "something"));
}
@Test
public void testFullEmail() throws Exception {
assertTrue(match(USER_ID, "<heinrichh@uni-duesseldorf.de>"));
assertTrue(match(USER_ID + " ", "<heinrichh@uni-duesseldorf.de>"));
assertFalse(match(USER_ID, "<>"));
assertFalse(match(USER_ID, "<h>"));
assertFalse(match(USER_ID, "<heinrichh>"));
assertFalse(match(USER_ID, "<uni-duesseldorf>"));
assertFalse(match(USER_ID, "<h@u>"));
assertFalse(match(USER_ID, "<HeinrichH@uni-duesseldorf.de>"));
assertFalse(match(USER_ID.substring(0, USER_ID.length() - 1),
"<heinrichh@uni-duesseldorf.de>"));
assertFalse(match("", "<>"));
assertFalse(match("", "<heinrichh@uni-duesseldorf.de>"));
}
@Test
public void testPartialEmail() throws Exception {
assertTrue(match(USER_ID, "@heinrichh@uni-duesseldorf.de"));
assertTrue(match(USER_ID, "@heinrichh"));
assertTrue(match(USER_ID, "@duesseldorf"));
assertTrue(match(USER_ID, "@uni-d"));
assertTrue(match(USER_ID, "@h"));
assertTrue(match(USER_ID, "@."));
assertTrue(match(USER_ID, "@h@u"));
assertFalse(match(USER_ID, "@ "));
assertFalse(match(USER_ID, "@"));
assertFalse(match(USER_ID, "@Heine"));
assertFalse(match(USER_ID, "@HeinrichH"));
assertFalse(match(USER_ID, "@Heinrich"));
assertFalse(match("", "@"));
assertFalse(match("", "@h"));
}
private void substringTests(String prefix) throws Exception {
assertTrue(match(USER_ID, prefix + "heinrichh@uni-duesseldorf.de"));
assertTrue(match(USER_ID, prefix + "heinrich"));
assertTrue(match(USER_ID, prefix + "HEIN"));
assertTrue(match(USER_ID, prefix + "Heine <"));
assertTrue(match(USER_ID, prefix + "UNI"));
assertTrue(match(USER_ID, prefix + "uni"));
assertTrue(match(USER_ID, prefix + "rich He"));
assertTrue(match(USER_ID, prefix + "h@u"));
assertTrue(match(USER_ID, prefix + USER_ID));
assertTrue(match(USER_ID, prefix + USER_ID.toUpperCase(Locale.ROOT)));
assertFalse(match(USER_ID, prefix + ""));
assertFalse(match(USER_ID, prefix + " "));
assertFalse(match(USER_ID, prefix + "yy"));
assertFalse(match("", prefix + ""));
assertFalse(match("", prefix + "uni"));
}
@Test
public void testSubstringPlain() throws Exception {
substringTests("");
}
@Test
public void testSubstringAsterisk() throws Exception {
substringTests("*");
}
@Test
public void testExplicitFingerprint() throws Exception {
assertFalse(match("John Fade <j.fade@example.com>", "0xfade"));
assertFalse(match("John Fade <0xfade@example.com>", "0xfade"));
assertFalse(match("", "0xfade"));
}
@Test
public void testImplicitFingerprint() throws Exception {
assertTrue(match("John Fade <j.fade@example.com>", "fade"));
assertTrue(match("John Fade <0xfade@example.com>", "fade"));
assertTrue(match("John Fade <j.fade@example.com>", "FADE"));
assertTrue(match("John Fade <0xfade@example.com>", "FADE"));
}
@Test
public void testZeroX() throws Exception {
assertTrue(match("John Fade <0xfade@example.com>", "0x"));
assertTrue(match("John Fade <0xfade@example.com>", "*0x"));
assertTrue(match("John Fade <0xfade@example.com>", "*0xfade"));
assertTrue(match("John Fade <0xfade@example.com>", "*0xFADE"));
assertTrue(match("John Fade <0xfade@example.com>", "@0xfade"));
assertFalse(match("John Fade <0xfade@example.com>", "@0xFADE"));
assertFalse(match("", "0x"));
}
}