View Javadoc
1   /*
2    * Copyright (C) 2019, 2020 Thomas Wolf <thomas.wolf@paranor.ch> and others
3    *
4    * This program and the accompanying materials are made available under the
5    * terms of the Eclipse Distribution License v. 1.0 which is available at
6    * https://www.eclipse.org/org/documents/edl-v10.php.
7    *
8    * SPDX-License-Identifier: BSD-3-Clause
9    */
10  package org.eclipse.jgit.gpg.bc.internal;
11  
12  import static org.junit.Assert.assertFalse;
13  import static org.junit.Assert.assertTrue;
14  
15  import java.util.Locale;
16  
17  import org.junit.Test;
18  
19  public class BouncyCastleGpgKeyLocatorTest {
20  
21  	private static final String USER_ID = "Heinrich Heine <heinrichh@uni-duesseldorf.de>";
22  
23  	private static boolean match(String userId, String pattern) {
24  		return BouncyCastleGpgKeyLocator.containsSigningKey(userId, pattern);
25  	}
26  
27  	@Test
28  	public void testFullMatch() throws Exception {
29  		assertTrue(match(USER_ID,
30  				"=Heinrich Heine <heinrichh@uni-duesseldorf.de>"));
31  		assertFalse(match(USER_ID, "=Heinrich Heine"));
32  		assertFalse(match(USER_ID, "= "));
33  		assertFalse(match(USER_ID, "=heinrichh@uni-duesseldorf.de"));
34  	}
35  
36  	@Test
37  	public void testEmpty() throws Exception {
38  		assertFalse(match(USER_ID, ""));
39  		assertFalse(match(USER_ID, null));
40  		assertFalse(match("", ""));
41  		assertFalse(match(null, ""));
42  		assertFalse(match(null, null));
43  		assertFalse(match("", "something"));
44  		assertFalse(match(null, "something"));
45  	}
46  
47  	@Test
48  	public void testFullEmail() throws Exception {
49  		assertTrue(match(USER_ID, "<heinrichh@uni-duesseldorf.de>"));
50  		assertTrue(match(USER_ID + " ", "<heinrichh@uni-duesseldorf.de>"));
51  		assertFalse(match(USER_ID, "<>"));
52  		assertFalse(match(USER_ID, "<h>"));
53  		assertFalse(match(USER_ID, "<heinrichh>"));
54  		assertFalse(match(USER_ID, "<uni-duesseldorf>"));
55  		assertFalse(match(USER_ID, "<h@u>"));
56  		assertTrue(match(USER_ID, "<HeinrichH@uni-duesseldorf.de>"));
57  		assertFalse(match(USER_ID.substring(0, USER_ID.length() - 1),
58  				"<heinrichh@uni-duesseldorf.de>"));
59  		assertFalse(match("", "<>"));
60  		assertFalse(match("", "<heinrichh@uni-duesseldorf.de>"));
61  	}
62  
63  	@Test
64  	public void testPartialEmail() throws Exception {
65  		assertTrue(match(USER_ID, "@heinrichh@uni-duesseldorf.de"));
66  		assertTrue(match(USER_ID, "@heinrichh"));
67  		assertTrue(match(USER_ID, "@duesseldorf"));
68  		assertTrue(match(USER_ID, "@uni-d"));
69  		assertTrue(match(USER_ID, "@h"));
70  		assertTrue(match(USER_ID, "@."));
71  		assertTrue(match(USER_ID, "@h@u"));
72  		assertFalse(match(USER_ID, "@ "));
73  		assertFalse(match(USER_ID, "@"));
74  		assertFalse(match(USER_ID, "@Heine"));
75  		assertTrue(match(USER_ID, "@HeinrichH"));
76  		assertTrue(match(USER_ID, "@Heinrich"));
77  		assertFalse(match("", "@"));
78  		assertFalse(match("", "@h"));
79  	}
80  
81  	private void substringTests(String prefix) throws Exception {
82  		assertTrue(match(USER_ID, prefix + "heinrichh@uni-duesseldorf.de"));
83  		assertTrue(match(USER_ID, prefix + "heinrich"));
84  		assertTrue(match(USER_ID, prefix + "HEIN"));
85  		assertTrue(match(USER_ID, prefix + "Heine <"));
86  		assertTrue(match(USER_ID, prefix + "UNI"));
87  		assertTrue(match(USER_ID, prefix + "uni"));
88  		assertTrue(match(USER_ID, prefix + "rich He"));
89  		assertTrue(match(USER_ID, prefix + "h@u"));
90  		assertTrue(match(USER_ID, prefix + USER_ID));
91  		assertTrue(match(USER_ID, prefix + USER_ID.toUpperCase(Locale.ROOT)));
92  		assertFalse(match(USER_ID, prefix + ""));
93  		assertFalse(match(USER_ID, prefix + " "));
94  		assertFalse(match(USER_ID, prefix + "yy"));
95  		assertFalse(match("", prefix + ""));
96  		assertFalse(match("", prefix + "uni"));
97  	}
98  
99  	@Test
100 	public void testSubstringPlain() throws Exception {
101 		substringTests("");
102 	}
103 
104 	@Test
105 	public void testSubstringAsterisk() throws Exception {
106 		substringTests("*");
107 	}
108 
109 	@Test
110 	public void testExplicitFingerprint() throws Exception {
111 		assertFalse(match("John Fade <j.fade@example.com>", "0xfade"));
112 		assertFalse(match("John Fade <0xfade@example.com>", "0xfade"));
113 		assertFalse(match("John Fade <0xfade@example.com>", "0xFADE"));
114 		assertFalse(match("", "0xfade"));
115 	}
116 
117 	@Test
118 	public void testImplicitFingerprint() throws Exception {
119 		assertTrue(match("John Fade <j.fade@example.com>", "fade"));
120 		assertTrue(match("John Fade <0xfade@example.com>", "fade"));
121 		assertTrue(match("John Fade <j.fade@example.com>", "FADE"));
122 		assertTrue(match("John Fade <0xfade@example.com>", "FADE"));
123 	}
124 
125 	@Test
126 	public void testZeroX() throws Exception {
127 		assertTrue(match("John Fade <0xfade@example.com>", "0x"));
128 		assertTrue(match("John Fade <0xfade@example.com>", "*0x"));
129 		assertTrue(match("John Fade <0xfade@example.com>", "*0xfade"));
130 		assertTrue(match("John Fade <0xfade@example.com>", "*0xFADE"));
131 		assertTrue(match("John Fade <0xfade@example.com>", "@0xfade"));
132 		assertTrue(match("John Fade <0xfade@example.com>", "@0xFADE"));
133 		assertFalse(match("", "0x"));
134 	}
135 }