|
1 | 1 | package org.jenkinsci.plugins.gitclient.verifier; |
2 | 2 |
|
3 | 3 | import static org.hamcrest.MatcherAssert.assertThat; |
| 4 | +import static org.hamcrest.Matchers.hasItem; |
4 | 5 | import static org.hamcrest.Matchers.is; |
5 | 6 | import static org.jenkinsci.plugins.gitclient.verifier.KnownHostsTestUtil.nonGitHubHost; |
6 | 7 | import static org.jenkinsci.plugins.gitclient.verifier.KnownHostsTestUtil.runKnownHostsTests; |
|
12 | 13 | import hudson.model.TaskListener; |
13 | 14 | import java.io.File; |
14 | 15 | import java.time.Duration; |
| 16 | +import java.util.ArrayList; |
| 17 | +import java.util.List; |
| 18 | +import java.util.logging.Handler; |
| 19 | +import java.util.logging.Level; |
| 20 | +import java.util.logging.LogRecord; |
| 21 | +import java.util.logging.Logger; |
15 | 22 | import org.awaitility.Awaitility; |
16 | 23 | import org.junit.jupiter.api.BeforeEach; |
17 | 24 | import org.junit.jupiter.api.Test; |
@@ -39,6 +46,38 @@ void assignVerifiers() throws Exception { |
39 | 46 | fakeKnownHosts = knownHostsTestUtil.createFakeKnownHosts(FILE_CONTENT); |
40 | 47 | } |
41 | 48 |
|
| 49 | + @Test |
| 50 | + void missingKnownHostsShouldLogWarning() throws Exception { |
| 51 | + assumeTrue(runKnownHostsTests()); |
| 52 | + File folder = new File(testFolder, "folder"); |
| 53 | + File missingKnownHosts = new File(folder, "non_existent_known_hosts"); |
| 54 | + KnownHostsFileVerifier knownHostsFileVerifier = spy(new KnownHostsFileVerifier()); |
| 55 | + when(knownHostsFileVerifier.getKnownHostsFile()).thenReturn(missingKnownHosts); |
| 56 | + |
| 57 | + Logger logger = Logger.getLogger(KnownHostsFileVerifier.class.getName()); |
| 58 | + LogHandler handler = new LogHandler(); |
| 59 | + handler.setLevel(Level.ALL); |
| 60 | + logger.setUseParentHandlers(false); |
| 61 | + logger.addHandler(handler); |
| 62 | + logger.setLevel(Level.ALL); |
| 63 | + KnownHostsTestUtil.connectToHost( |
| 64 | + nonGitHubHost(), |
| 65 | + 22, |
| 66 | + missingKnownHosts, |
| 67 | + knownHostsFileVerifier.forJGit(StreamBuildListener.fromStdout()), |
| 68 | + "ssh-ed25519", |
| 69 | + s -> { |
| 70 | + assertThat(s.isOpen(), is(true)); |
| 71 | + Awaitility.await().atMost(Duration.ofSeconds(37)).until(() -> s.getServerKey() != null); |
| 72 | + assertThat(KnownHostsTestUtil.checkKeys(s), is(false)); |
| 73 | + return true; |
| 74 | + }) |
| 75 | + .close(); |
| 76 | + assertThat( |
| 77 | + handler.getMessages(), |
| 78 | + hasItem("Verifying host keys with known hosts file, but known hosts file was not found")); |
| 79 | + } |
| 80 | + |
42 | 81 | @Test |
43 | 82 | void connectWhenHostKeyNotInKnownHostsFileForOtherHostNameThenShouldFail() throws Exception { |
44 | 83 | assumeTrue(runKnownHostsTests()); |
@@ -114,4 +153,26 @@ void testVerifyHostKeyOptionWithDefaultFile() throws Exception { |
114 | 153 | assertThat( |
115 | 154 | verifier.forCliGit(TaskListener.NULL).getVerifyHostKeyOption(null), is("-o StrictHostKeyChecking=yes")); |
116 | 155 | } |
| 156 | + |
| 157 | + private static class LogHandler extends Handler { |
| 158 | + |
| 159 | + private List<String> messages = new ArrayList<>(); |
| 160 | + |
| 161 | + @Override |
| 162 | + public void publish(LogRecord lr) { |
| 163 | + messages.add(lr.getMessage()); |
| 164 | + } |
| 165 | + |
| 166 | + @Override |
| 167 | + public void flush() {} |
| 168 | + |
| 169 | + @Override |
| 170 | + public void close() throws SecurityException { |
| 171 | + messages = new ArrayList<>(); |
| 172 | + } |
| 173 | + |
| 174 | + List<String> getMessages() { |
| 175 | + return messages; |
| 176 | + } |
| 177 | + } |
117 | 178 | } |
0 commit comments