From 3f28dc07e310c4907ded80926188e1ab76089b89 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 5 May 2017 14:07:12 +0200 Subject: [PATCH] Fix race condtion in ssh key generation --- .../trigger/GerritProjectListUpdaterFunctionalTest.java | 2 +- .../plugins/gerrit/trigger/GerritServerHudsonTest.java | 2 +- .../gerrit/trigger/LockedDownGerritEventTest.java | 2 +- .../plugins/gerrit/trigger/api/GerritTriggerApiTest.java | 2 +- .../extensions/GerritTriggeredBuildListenerTest.java | 7 +++---- .../actions/manual/ManualTriggerActionApprovalTest.java | 5 ++--- .../playback/GerritMissedEventsFunctionalTest.java | 2 +- .../gerrit/trigger/spec/BackCompat252HudsonTest.java | 5 ++--- .../gerrit/trigger/spec/SpecGerritTriggerHudsonTest.java | 5 ++--- .../tools/gerrit/gerritevents/mock/SshdServerMock.java | 9 +++++++-- 10 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/GerritProjectListUpdaterFunctionalTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/GerritProjectListUpdaterFunctionalTest.java index 81c71ad10..3bc3565cb 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/GerritProjectListUpdaterFunctionalTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/GerritProjectListUpdaterFunctionalTest.java @@ -73,7 +73,7 @@ public class GerritProjectListUpdaterFunctionalTest { @Before public void setUp() throws Exception { sshKey = SshdServerMock.generateKeyPair(); - System.setProperty(PluginImpl.TEST_SSH_KEYFILE_LOCATION_PROPERTY, sshKey.getPrivateKey().getAbsolutePath()); + server = new SshdServerMock(); sshd = SshdServerMock.startServer(server); // We need to do this so that subsequent calls will be served with another command define later diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/GerritServerHudsonTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/GerritServerHudsonTest.java index 29c8a08d9..523ec3206 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/GerritServerHudsonTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/GerritServerHudsonTest.java @@ -102,6 +102,7 @@ public class GerritServerHudsonTest { @Before public void setUp() throws Exception { sshKey = SshdServerMock.generateKeyPair(); + serverOne = new SshdServerMock(); serverTwo = new SshdServerMock(); sshdOne = SshdServerMock.startServer(serverOne); @@ -114,7 +115,6 @@ public void setUp() throws Exception { serverTwo.returnCommandFor(GERRIT_STREAM_EVENTS, SshdServerMock.CommandMock.class); serverTwo.returnCommandFor("gerrit review.*", SshdServerMock.EofCommandMock.class); serverTwo.returnCommandFor("gerrit version", SshdServerMock.EofCommandMock.class); - System.setProperty(PluginImpl.TEST_SSH_KEYFILE_LOCATION_PROPERTY, sshKey.getPrivateKey().getAbsolutePath()); } /** diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/LockedDownGerritEventTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/LockedDownGerritEventTest.java index b8fd7d20a..47aeb902a 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/LockedDownGerritEventTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/LockedDownGerritEventTest.java @@ -97,7 +97,7 @@ public class LockedDownGerritEventTest { @Before public void setUp() throws Exception { sshKey = SshdServerMock.generateKeyPair(); - System.setProperty(PluginImpl.TEST_SSH_KEYFILE_LOCATION_PROPERTY, sshKey.getPrivateKey().getAbsolutePath()); + server = new SshdServerMock(); sshd = SshdServerMock.startServer(server); server.returnCommandFor("gerrit ls-projects", SshdServerMock.EofCommandMock.class); diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/api/GerritTriggerApiTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/api/GerritTriggerApiTest.java index ccd3ce2b5..369ffa4cc 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/api/GerritTriggerApiTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/api/GerritTriggerApiTest.java @@ -77,13 +77,13 @@ public class GerritTriggerApiTest { @Before public void setUp() throws Exception { sshKey = SshdServerMock.generateKeyPair(); + server = new SshdServerMock(); sshd = SshdServerMock.startServer(server); server.returnCommandFor("gerrit ls-projects", SshdServerMock.EofCommandMock.class); server.returnCommandFor(GERRIT_STREAM_EVENTS, SshdServerMock.CommandMock.class); server.returnCommandFor("gerrit review.*", SshdServerMock.EofCommandMock.class); server.returnCommandFor("gerrit version", SshdServerMock.EofCommandMock.class); - System.setProperty(PluginImpl.TEST_SSH_KEYFILE_LOCATION_PROPERTY, sshKey.getPrivateKey().getAbsolutePath()); } /** diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/extensions/GerritTriggeredBuildListenerTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/extensions/GerritTriggeredBuildListenerTest.java index 0c188e81b..dee507035 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/extensions/GerritTriggeredBuildListenerTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/extensions/GerritTriggeredBuildListenerTest.java @@ -68,8 +68,7 @@ public class GerritTriggeredBuildListenerTest { public final JenkinsRule j = new JenkinsRule(); private SshServer sshd; - @SuppressWarnings("unused") - private SshdServerMock.KeyPairFiles sshKey; + private SshdServerMock server; private static CountDownLatch buildListenerLatch; @@ -81,14 +80,14 @@ public class GerritTriggeredBuildListenerTest { */ @Before public void setUp() throws Exception { - sshKey = SshdServerMock.generateKeyPair(); + SshdServerMock.generateKeyPair(); + server = new SshdServerMock(); sshd = SshdServerMock.startServer(server); server.returnCommandFor("gerrit ls-projects", SshdServerMock.EofCommandMock.class); server.returnCommandFor(GERRIT_STREAM_EVENTS, SshdServerMock.CommandMock.class); server.returnCommandFor("gerrit review.*", SshdServerMock.EofCommandMock.class); server.returnCommandFor("gerrit version", SshdServerMock.EofCommandMock.class); - System.setProperty(PluginImpl.TEST_SSH_KEYFILE_LOCATION_PROPERTY, sshKey.getPrivateKey().getAbsolutePath()); GerritServer gserver = PluginImpl.getFirstServer_(); assertNotNull(gserver); SshdServerMock.configureFor(sshd, gserver); diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/actions/manual/ManualTriggerActionApprovalTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/actions/manual/ManualTriggerActionApprovalTest.java index e504c2dea..b991069d3 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/actions/manual/ManualTriggerActionApprovalTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/actions/manual/ManualTriggerActionApprovalTest.java @@ -66,7 +66,6 @@ public class ManualTriggerActionApprovalTest { private SshdServerMock server; private SshServer sshd; - private SshdServerMock.KeyPairFiles sshKey; /** * Runs before test method. @@ -75,8 +74,8 @@ public class ManualTriggerActionApprovalTest { */ @Before public void setUp() throws Exception { - sshKey = SshdServerMock.generateKeyPair(); - System.setProperty(PluginImpl.TEST_SSH_KEYFILE_LOCATION_PROPERTY, sshKey.getPrivateKey().getAbsolutePath()); + final SshdServerMock.KeyPairFiles sshKey = SshdServerMock.generateKeyPair(); + server = new SshdServerMock(); sshd = SshdServerMock.startServer(server); server.returnCommandFor("gerrit ls-projects", SshdServerMock.EofCommandMock.class); diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/playback/GerritMissedEventsFunctionalTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/playback/GerritMissedEventsFunctionalTest.java index b5d1baded..df8eb1d0d 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/playback/GerritMissedEventsFunctionalTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/playback/GerritMissedEventsFunctionalTest.java @@ -103,7 +103,7 @@ public class GerritMissedEventsFunctionalTest { @Before public void setUp() throws Exception { sshKey = SshdServerMock.generateKeyPair(); - System.setProperty(PluginImpl.TEST_SSH_KEYFILE_LOCATION_PROPERTY, sshKey.getPrivateKey().getAbsolutePath()); + server = new SshdServerMock(); sshd = SshdServerMock.startServer(server); server.returnCommandFor("gerrit ls-projects", SshdServerMock.EofCommandMock.class); diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/BackCompat252HudsonTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/BackCompat252HudsonTest.java index b7847c0a1..43fa16d6f 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/BackCompat252HudsonTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/BackCompat252HudsonTest.java @@ -85,7 +85,6 @@ public class BackCompat252HudsonTest { @Rule public JenkinsRule j = new JenkinsRule(); private SshServer sshd; - private SshdServerMock.KeyPairFiles sshKey; private SshdServerMock server; /** @@ -95,7 +94,8 @@ public class BackCompat252HudsonTest { */ @Before public void setUp() throws Exception { - sshKey = SshdServerMock.generateKeyPair(); + SshdServerMock.generateKeyPair(); + server = new SshdServerMock(); sshd = SshdServerMock.startServer(server); GerritServer gerritServer = PluginImpl.getFirstServer_(); @@ -107,7 +107,6 @@ public void setUp() throws Exception { server.returnCommandFor(GERRIT_STREAM_EVENTS, SshdServerMock.CommandMock.class); server.returnCommandFor("gerrit review.*", SshdServerMock.EofCommandMock.class); server.returnCommandFor("gerrit version", SshdServerMock.EofCommandMock.class); - System.setProperty(PluginImpl.TEST_SSH_KEYFILE_LOCATION_PROPERTY, sshKey.getPrivateKey().getAbsolutePath()); SshdServerMock.configureFor(sshd, PluginImpl.getFirstServer_()); } diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/SpecGerritTriggerHudsonTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/SpecGerritTriggerHudsonTest.java index 58fad4d02..f61a53250 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/SpecGerritTriggerHudsonTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/SpecGerritTriggerHudsonTest.java @@ -89,7 +89,6 @@ public class SpecGerritTriggerHudsonTest { //TODO Fix the SshdServerMock so that asserts can be done on review commands. private SshServer sshd; - private SshdServerMock.KeyPairFiles sshKey; private SshdServerMock serverMock; private GerritServer gerritServer; @@ -100,7 +99,8 @@ public class SpecGerritTriggerHudsonTest { */ @Before public void setUp() throws Exception { - sshKey = SshdServerMock.generateKeyPair(); + SshdServerMock.generateKeyPair(); + serverMock = new SshdServerMock(); sshd = SshdServerMock.startServer(serverMock); serverMock.returnCommandFor("gerrit ls-projects", SshdServerMock.EofCommandMock.class); @@ -109,7 +109,6 @@ public void setUp() throws Exception { serverMock.returnCommandFor("gerrit approve.*", SshdServerMock.EofCommandMock.class); serverMock.returnCommandFor("gerrit version", SshdServerMock.SendVersionCommand.class); serverMock.returnCommandFor("gerrit approve.*", SshdServerMock.EofCommandMock.class); - System.setProperty(PluginImpl.TEST_SSH_KEYFILE_LOCATION_PROPERTY, sshKey.getPrivateKey().getAbsolutePath()); gerritServer = PluginImpl.getFirstServer_(); SshdServerMock.configureFor(sshd, gerritServer, true); } diff --git a/src/test/java/com/sonymobile/tools/gerrit/gerritevents/mock/SshdServerMock.java b/src/test/java/com/sonymobile/tools/gerrit/gerritevents/mock/SshdServerMock.java index efdb52c48..77f625ceb 100644 --- a/src/test/java/com/sonymobile/tools/gerrit/gerritevents/mock/SshdServerMock.java +++ b/src/test/java/com/sonymobile/tools/gerrit/gerritevents/mock/SshdServerMock.java @@ -27,6 +27,7 @@ import com.jcraft.jsch.JSchException; import com.sonyericsson.hudson.plugins.gerrit.trigger.GerritServer; +import com.sonyericsson.hudson.plugins.gerrit.trigger.PluginImpl; import com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config; import com.sonyericsson.hudson.plugins.gerrit.trigger.config.IGerritHudsonTriggerConfig; import org.apache.commons.lang.StringUtils; @@ -447,6 +448,7 @@ public static KeyPairFiles generateKeyPair() throws IOException, InterruptedExce File tmp = new File(System.getProperty("java.io.tmpdir")); File priv = new File(tmp, "jenkins-testkey"); File pub = new File(tmp, "jenkins-testkey.pub"); + final KeyPairFiles sshKey; if (!(priv.exists() && pub.exists())) { if (priv.exists()) { if (!priv.delete()) { @@ -466,11 +468,14 @@ public static KeyPairFiles generateKeyPair() throws IOException, InterruptedExce kpair.writePublicKey(new FileOutputStream(pub), "Test"); System.out.println("Finger print: " + kpair.getFingerPrint()); kpair.dispose(); - return new KeyPairFiles(priv, pub); + sshKey = new KeyPairFiles(priv, pub); } else { System.out.println("Test key-pair seems to already exist."); - return new KeyPairFiles(priv, pub); + sshKey = new KeyPairFiles(priv, pub); } + + System.setProperty(PluginImpl.TEST_SSH_KEYFILE_LOCATION_PROPERTY, sshKey.getPrivateKey().getAbsolutePath()); + return sshKey; } /**