1 package com.atlassian.asap.core.keys.publickey;
2
3 import com.atlassian.asap.api.exception.CannotRetrieveKeyException;
4 import com.atlassian.asap.core.exception.PublicKeyNotFoundException;
5 import com.atlassian.asap.core.exception.PublicKeyRetrievalException;
6 import com.atlassian.asap.core.keys.PemReader;
7 import com.atlassian.asap.core.validator.ValidatedKeyId;
8 import org.junit.Rule;
9 import org.junit.Test;
10 import org.junit.rules.TemporaryFolder;
11 import org.junit.runner.RunWith;
12 import org.mockito.Mock;
13 import org.mockito.runners.MockitoJUnitRunner;
14
15 import java.io.Reader;
16 import java.security.PublicKey;
17
18 import static org.junit.Assert.assertSame;
19 import static org.mockito.Matchers.any;
20 import static org.mockito.Mockito.verify;
21 import static org.mockito.Mockito.when;
22
23 @RunWith(MockitoJUnitRunner.class)
24 public class FilePublicKeyProviderTest {
25 @Rule
26 public TemporaryFolder temporaryFolder = new TemporaryFolder();
27
28 @Mock
29 private PemReader pemReader;
30 @Mock
31 private PublicKey publicKey;
32
33 private FilePublicKeyProvider provider;
34
35 @Test
36 public void shouldReadKeyFromKeyFile() throws Exception {
37 temporaryFolder.newFile("some-key-id");
38
39 when(pemReader.readPublicKey(any(Reader.class))).thenReturn(publicKey);
40
41 provider = new FilePublicKeyProvider(temporaryFolder.getRoot(), pemReader);
42 PublicKey actualKey = provider.getKey(ValidatedKeyId.validate("some-key-id"));
43
44 assertSame(publicKey, actualKey);
45
46 verify(pemReader).readPublicKey(any(Reader.class));
47 }
48
49 @Test(expected = PublicKeyNotFoundException.class)
50 public void shouldFailIfKeyFileDoesNotExist() throws Exception {
51 provider = new FilePublicKeyProvider(temporaryFolder.getRoot(), pemReader);
52 provider.getKey(ValidatedKeyId.validate("some-key-id"));
53 }
54
55 @Test(expected = PublicKeyNotFoundException.class)
56 public void shouldFailIfKeyFileIsActuallyADirectory() throws Exception {
57 temporaryFolder.newFolder("some-key-id");
58
59 provider = new FilePublicKeyProvider(temporaryFolder.getRoot(), pemReader);
60 provider.getKey(ValidatedKeyId.validate("some-key-id"));
61 }
62
63 @Test(expected = PublicKeyRetrievalException.class)
64 public void shouldFailIfParsingTheKeyFails() throws Exception {
65 temporaryFolder.newFile("some-key-id");
66
67 when(pemReader.readPublicKey(any(Reader.class)))
68 .thenThrow(new CannotRetrieveKeyException("cannot parse!"));
69
70 provider = new FilePublicKeyProvider(temporaryFolder.getRoot(), pemReader);
71 provider.getKey(ValidatedKeyId.validate("some-key-id"));
72 }
73 }