View Javadoc

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 }