1 package com.atlassian.asap.core.keys.publickey;
2
3 import com.atlassian.asap.core.keys.KeyProvider;
4 import com.atlassian.asap.core.keys.PemReader;
5 import org.apache.http.client.HttpClient;
6 import org.junit.Test;
7 import org.junit.runner.RunWith;
8 import org.mockito.InjectMocks;
9 import org.mockito.Mock;
10 import org.mockito.runners.MockitoJUnitRunner;
11
12 import java.security.PublicKey;
13
14 import static org.hamcrest.Matchers.hasSize;
15 import static org.hamcrest.Matchers.instanceOf;
16 import static org.hamcrest.Matchers.is;
17 import static org.junit.Assert.assertThat;
18
19 @RunWith(MockitoJUnitRunner.class)
20 public class PublicKeyProviderFactoryTest {
21 @Mock
22 private PemReader pemReader;
23 @Mock
24 private HttpClient httpClient;
25
26 @InjectMocks
27 private PublicKeyProviderFactory factory;
28
29 @Test(expected = IllegalArgumentException.class)
30 public void shouldRejectUnknownSchemes() {
31 factory.createPublicKeyProvider("unknown://baseurl");
32 }
33
34 @Test(expected = IllegalArgumentException.class)
35 public void shouldRejectInsecureHttp() {
36 factory.createPublicKeyProvider("http://example.test/");
37 }
38
39 @Test
40 public void shouldCreateHttpsProvider() {
41 KeyProvider<PublicKey> provider = factory.createPublicKeyProvider("https://example.test/");
42 assertThat(provider, instanceOf(HttpPublicKeyProvider.class));
43 }
44
45 @Test
46 public void shouldCreateFileProvider() {
47 KeyProvider<PublicKey> provider = factory.createPublicKeyProvider("file:///some/location/");
48 assertThat(provider, instanceOf(FilePublicKeyProvider.class));
49 }
50
51 @Test
52 public void shouldCreateClasspathProvider() {
53 KeyProvider<PublicKey> provider = factory.createPublicKeyProvider("classpath:/package/");
54 assertThat(provider, instanceOf(ClasspathPublicKeyProvider.class));
55 assertThat(((ClasspathPublicKeyProvider) provider).getClasspathBase(), is("/package/"));
56 }
57
58 @Test
59 public void shouldCreateMirroredKeyProvider() {
60 KeyProvider<PublicKey> provider = factory.createPublicKeyProvider("file:///some | https://test/");
61 assertThat(provider, instanceOf(MirroredKeyProvider.class));
62 assertThat(((MirroredKeyProvider) provider).getMirrors(), hasSize(2));
63 }
64
65 @Test
66 public void shouldCreateChainedKeyProvider() {
67 KeyProvider<PublicKey> provider = factory.createPublicKeyProvider("file:///some , https://test/");
68 assertThat(provider, instanceOf(ChainedKeyProvider.class));
69 assertThat(((ChainedKeyProvider) provider).getKeyProviderChain(), hasSize(2));
70 }
71
72 @Test(expected = IllegalArgumentException.class)
73 public void shouldThrowWhenBaseUrlDoesNotContainLeadingWhitespaceForChainedProviders() {
74 factory.createPublicKeyProvider("file:///some, https://test/");
75 }
76
77 @Test(expected = IllegalArgumentException.class)
78 public void shouldThrowWhenBaseUrlDoesNotContainTrailingWhitespaceForChainedProviders() {
79 factory.createPublicKeyProvider("file:///some ,https://test/");
80 }
81
82 @Test(expected = IllegalArgumentException.class)
83 public void shouldThrowWhenBaseUrlDoesNotContainLeadingAndTrailingWhitespaceForChainedProviders() {
84 factory.createPublicKeyProvider("file:///some,https://test/");
85 }
86
87 @Test(expected = IllegalArgumentException.class)
88 public void shouldThrowWhenBaseUrlDoesNotContainLeadingWhitespaceForMirroredProviders() {
89 factory.createPublicKeyProvider("file:///some| https://test/");
90 }
91
92 @Test(expected = IllegalArgumentException.class)
93 public void shouldThrowWhenBaseUrlDoesNotContainTrailingWhitespaceForMirroredProviders() {
94 factory.createPublicKeyProvider("file:///some |https://test/");
95 }
96
97 @Test(expected = IllegalArgumentException.class)
98 public void shouldThrowWhenBaseUrlDoesNotContainLeadingAndTrailingWhitespaceForMirroredProviders() {
99 factory.createPublicKeyProvider("file:///some|https://test/");
100 }
101
102 @Test(expected = IllegalArgumentException.class)
103 public void shouldThrowWhenSingletonBaseUrlDoesNotHaveSchema() {
104 factory.createPublicKeyProvider("/relative/uri");
105 }
106
107 @Test(expected = IllegalArgumentException.class)
108 public void shouldThrowWhenSingletonBaseUrlCannotBeParsedAsUri() {
109 factory.createPublicKeyProvider("123:foo");
110 }
111
112 @Test
113 public void shouldHandleEmptyBaseUrl() {
114 KeyProvider<PublicKey> provider = factory.createPublicKeyProvider("");
115 assertThat(provider, instanceOf(ChainedKeyProvider.class));
116 assertThat(((ChainedKeyProvider) provider).getKeyProviderChain(), hasSize(0));
117 }
118 }