From 097b65a0e9c8ccfa36f4904f03eb268e93825e0c Mon Sep 17 00:00:00 2001 From: David Kieras Date: Tue, 19 Sep 2023 12:55:45 -0500 Subject: [PATCH 1/4] fix(PI-2365): Jenkins auth-matrix plugin was updated, causing issues with the NowSecure Integration --- pom.xml | 341 +++++++++--------- .../auto/jenkins/plugin/NSAutoPlugin.java | 19 +- .../lib/auto-circleci-plugin-1.1.0.jar | Bin 34877 -> 0 bytes .../lib/auto-circleci-plugin-1.2.1.jar | Bin 0 -> 35562 bytes 4 files changed, 183 insertions(+), 177 deletions(-) delete mode 100644 src/main/webapp/WEB-INF/lib/auto-circleci-plugin-1.1.0.jar create mode 100644 src/main/webapp/WEB-INF/lib/auto-circleci-plugin-1.2.1.jar diff --git a/pom.xml b/pom.xml index 8f99bff..b9105b9 100644 --- a/pom.xml +++ b/pom.xml @@ -1,172 +1,177 @@ - 4.0.0 - - org.jenkins-ci.plugins - plugin - 3.4 - - - io.jenkins.plugins - nowsecure-auto-security-test - 1.26-SNAPSHOT - hpi - - 2.7.3 - 8 - - NowSecure Auto Plugin - Send an Android or iOS applications to NowSecure Auto for Mobile Application Security Testing - - - MIT License - https://opensource.org/licenses/MIT - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - install-jar - install - - copy - - - - - com.nowsecure - auto-circleci-plugin - 0.4 - jar - true - - - ${project.build.directory}/dist/lib - true - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - true - - - - - - - - src/main/resources - true - - **/jversion.txt - - - - src/main/resources - false - - **/jversion.txt - - - - - - - com.nowsecure - auto-circleci-plugin - 1.1.0 - system - ${project.basedir}/src/main/webapp/WEB-INF/lib/auto-circleci-plugin-1.1.0.jar - - - com.googlecode.json-simple - json-simple - 1.1 - - - org.jenkins-ci.plugins - structs - 1.7 - - - org.jenkins-ci.plugins.workflow - workflow-step-api - 2.12 - test - - - org.jenkins-ci.plugins.workflow - workflow-cps - 2.39 - test - - - org.jenkins-ci.plugins.workflow - workflow-job - 2.11.2 - test - - - org.jenkins-ci.plugins.workflow - workflow-basic-steps - 2.6 - test - - - org.jenkins-ci.plugins.workflow - workflow-durable-task-step - 2.13 - test - - - org.jenkins-ci.plugins.workflow - workflow-api - 2.20 - test - - - org.jenkins-ci.plugins.workflow - workflow-support - 2.14 - test - - + 4.0.0 + + org.jenkins-ci.plugins + plugin + 3.4 + + + io.jenkins.plugins + nowsecure-auto-security-test + 1.26-SNAPSHOT + hpi + + 2.7.3 + 8 + 1.2.1 + + NowSecure Auto Plugin + Send an Android or iOS applications to NowSecure Auto for Mobile Application Security Testing + + + MIT License + https://opensource.org/licenses/MIT + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + install-jar + install + + copy + + + + + com.nowsecure + auto-circleci-plugin + ${auto-circleci-plugin.version} + jar + true + + + ${project.build.directory}/dist/lib + true + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + true + + + + + + + + src/main/resources + true + + **/jversion.txt + + + + src/main/resources + false + + **/jversion.txt + + + + + + + com.nowsecure + auto-circleci-plugin + ${auto-circleci-plugin.version} + system + ${project.basedir}/src/main/webapp/WEB-INF/lib/auto-circleci-plugin-${auto-circleci-plugin.version}.jar + + + com.googlecode.json-simple + json-simple + 1.1 + + + org.jenkins-ci.plugins + structs + 1.7 + + + org.jenkins-ci.plugins.workflow + workflow-step-api + 2.12 + test + + + org.jenkins-ci.plugins.workflow + workflow-cps + 2.39 + test + + + org.jenkins-ci.plugins.workflow + workflow-job + 2.11.2 + test + + + org.jenkins-ci.plugins.workflow + workflow-basic-steps + 2.6 + test + + + org.jenkins-ci.plugins.workflow + workflow-durable-task-step + 2.13 + test + + + org.jenkins-ci.plugins.workflow + workflow-api + 2.20 + test + + + org.jenkins-ci.plugins.workflow + workflow-support + 2.14 + test + + - - - bhatti - NowSecure, Inc. - info@nowsecure.com - - + + + bhatti + NowSecure, Inc. + info@nowsecure.com + + - - scm:git:git://github.com/jenkinsci/${project.artifactId}-plugin.git - scm:git:git@github.com:jenkinsci/${project.artifactId}-plugin.git - https://github.com/jenkinsci/${project.artifactId}-plugin - HEAD - - https://wiki.jenkins.io/display/JENKINS/NowSecure+AUTO+Jenkins+Plugin - - - repo.jenkins-ci.org - https://repo.jenkins-ci.org/public/ - - - - - repo.jenkins-ci.org - https://repo.jenkins-ci.org/public/ - - - + + scm:git:git://github.com/jenkinsci/${project.artifactId}-plugin.git + scm:git:git@github.com:jenkinsci/${project.artifactId}-plugin.git + https://github.com/jenkinsci/${project.artifactId}-plugin + HEAD + + https://wiki.jenkins.io/display/JENKINS/NowSecure+AUTO+Jenkins+Plugin + + + repo.jenkins-ci.org + https://repo.jenkins-ci.org/public/ + + + + + repo.jenkins-ci.org + https://repo.jenkins-ci.org/public/ + + + localrepo + file:///${env.HOME}/.m2/repository + + + \ No newline at end of file diff --git a/src/main/java/com/nowsecure/auto/jenkins/plugin/NSAutoPlugin.java b/src/main/java/com/nowsecure/auto/jenkins/plugin/NSAutoPlugin.java index 49667ee..5761cb5 100644 --- a/src/main/java/com/nowsecure/auto/jenkins/plugin/NSAutoPlugin.java +++ b/src/main/java/com/nowsecure/auto/jenkins/plugin/NSAutoPlugin.java @@ -80,7 +80,7 @@ public class NSAutoPlugin extends Builder implements SimpleBuildStep, NSAutoPara private ProxySettings proxySettings = new ProxySettings(); private boolean debug; private boolean proxyEnabled; - private Boolean validateDnsUrlConnection = true; + private Boolean validateDnsUrlConnectionEnabled = true; private static class Logger implements NSAutoLogger, Serializable { private static final long serialVersionUID = 1L; @@ -132,7 +132,7 @@ public void debug(String msg) { @DataBoundConstructor public NSAutoPlugin(String apiUrl, String group, String binaryName, String description, boolean waitForResults, int waitMinutes, boolean breakBuildOnScore, int scoreThreshold, String apiKey, boolean useBuildEndpoint, - boolean validateDnsUrlConnection) { + boolean validateDnsUrlConnectionEnabled) { this.apiUrl = apiUrl; this.group = group; this.binaryName = binaryName; @@ -143,7 +143,7 @@ public NSAutoPlugin(String apiUrl, String group, String binaryName, String descr this.scoreThreshold = scoreThreshold; this.apiKey = apiKey; this.useBuildEndpoint = useBuildEndpoint; - this.validateDnsUrlConnection = validateDnsUrlConnection; + this.validateDnsUrlConnectionEnabled = validateDnsUrlConnectionEnabled; } /* @@ -362,17 +362,18 @@ public void setProxyEnabled(boolean proxyEnabled) { this.proxyEnabled = proxyEnabled; } + @Override public boolean isValidateDnsUrlConnectionEnabled() { - if (validateDnsUrlConnection == null) { - validateDnsUrlConnection = true; + if (validateDnsUrlConnectionEnabled == null) { + validateDnsUrlConnectionEnabled = true; } - return validateDnsUrlConnection; + return validateDnsUrlConnectionEnabled; } @DataBoundSetter - public void setValidateDnsUrlConnectionEnabled(boolean validateDnsUrlConnection) { - this.validateDnsUrlConnection = validateDnsUrlConnection; + public void setValidateDnsUrlConnectionEnabled(boolean validateDnsUrlConnectionEnabled) { + this.validateDnsUrlConnectionEnabled = validateDnsUrlConnectionEnabled; } @SuppressWarnings("deprecation") @@ -496,7 +497,7 @@ private static Map execute(final TaskListener listener, ParamsAd } - @Symbol({ "apiKey", "apiUrl", "binaryName", "group", "artifactsDir" }) + @Symbol({"NowSecure-Auto-Plugin"}) @Extension public static final class DescriptorImpl extends BuildStepDescriptor { public FormValidation doValidateParams(@QueryParameter("apiKey") String apiKey, diff --git a/src/main/webapp/WEB-INF/lib/auto-circleci-plugin-1.1.0.jar b/src/main/webapp/WEB-INF/lib/auto-circleci-plugin-1.1.0.jar deleted file mode 100644 index db209ab905a1cc05f8ba4cdbc206b747064ab0f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34877 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 literal 0 HcmV?d00001 From c3a1e27364b8946489a00ade4576fc9936207ce3 Mon Sep 17 00:00:00 2001 From: David Kieras Date: Wed, 20 Sep 2023 11:44:10 -0500 Subject: [PATCH 2/4] fix(PI-2365): Jenkins auth-matrix plugin was updated, causing issues with the NowSecure Integration fix for unpublished artifact --- .gitignore | 91 ++++++++++++++++++ pom.xml | 12 ++- .../1.2.1}/auto-circleci-plugin-1.2.1.jar | Bin .../1.2.1/auto-circleci-plugin-1.2.1.pom | 6 ++ 4 files changed, 105 insertions(+), 4 deletions(-) create mode 100644 .gitignore rename src/{main/webapp/WEB-INF/lib => repository/com/nowsecure/auto-circleci-plugin/1.2.1}/auto-circleci-plugin-1.2.1.jar (100%) create mode 100644 src/repository/com/nowsecure/auto-circleci-plugin/1.2.1/auto-circleci-plugin-1.2.1.pom diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..29cfcb1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,91 @@ +############################## +## Previously not committed +############################## +nextBuildNumber + +############################## +## Java +############################## +.mtj.tmp/ +*.class +*.jar +!auto-circleci-plugin*.jar +*.war +*.ear +*.nar +hs_err_pid* +replay_pid* + +############################## +## Maven +############################## +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +pom.xml.bak +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar + +############################## +## Gradle +############################## +bin/ +build/ +.gradle +.gradletasknamecache +gradle-app.setting +!gradle-wrapper.jar + +############################## +## IntelliJ +############################## +out/ +.idea/ +.idea_modules/ +*.iml +*.ipr +*.iws + +############################## +## Eclipse +############################## +.settings/ +bin/ +tmp/ +.metadata +.classpath +.project +*.tmp +*.bak +*.swp +*~.nib +local.properties +.loadpath +.factorypath + +############################## +## NetBeans +############################## +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +nbactions.xml +nb-configuration.xml + +############################## +## Visual Studio Code +############################## +.vscode/ +.code-workspace + +############################## +## OS X +############################## +.DS_Store \ No newline at end of file diff --git a/pom.xml b/pom.xml index b9105b9..aa91495 100644 --- a/pom.xml +++ b/pom.xml @@ -15,6 +15,7 @@ 2.7.3 8 1.2.1 + ${project.basedir}/src/repository/ NowSecure Auto Plugin Send an Android or iOS applications to NowSecure Auto for Mobile Application Security Testing @@ -46,6 +47,7 @@ true + ${auto-circleci-plugin.local.path} ${project.build.directory}/dist/lib true @@ -86,8 +88,6 @@ com.nowsecure auto-circleci-plugin ${auto-circleci-plugin.version} - system - ${project.basedir}/src/main/webapp/WEB-INF/lib/auto-circleci-plugin-${auto-circleci-plugin.version}.jar com.googlecode.json-simple @@ -163,6 +163,10 @@ repo.jenkins-ci.org https://repo.jenkins-ci.org/public/ + + circle-ci + file:///${auto-circleci-plugin.local.path} + @@ -170,8 +174,8 @@ https://repo.jenkins-ci.org/public/ - localrepo - file:///${env.HOME}/.m2/repository + circle-ci + file:///${auto-circleci-plugin.local.path} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/lib/auto-circleci-plugin-1.2.1.jar b/src/repository/com/nowsecure/auto-circleci-plugin/1.2.1/auto-circleci-plugin-1.2.1.jar similarity index 100% rename from src/main/webapp/WEB-INF/lib/auto-circleci-plugin-1.2.1.jar rename to src/repository/com/nowsecure/auto-circleci-plugin/1.2.1/auto-circleci-plugin-1.2.1.jar diff --git a/src/repository/com/nowsecure/auto-circleci-plugin/1.2.1/auto-circleci-plugin-1.2.1.pom b/src/repository/com/nowsecure/auto-circleci-plugin/1.2.1/auto-circleci-plugin-1.2.1.pom new file mode 100644 index 0000000..e02969d --- /dev/null +++ b/src/repository/com/nowsecure/auto-circleci-plugin/1.2.1/auto-circleci-plugin-1.2.1.pom @@ -0,0 +1,6 @@ + + com.nowsecure + auto-circleci-plugin + 1.2.1 + 4.0.0 + \ No newline at end of file From 49860d2ed0efdf75143dfa84229b8b3ca5d13e6a Mon Sep 17 00:00:00 2001 From: David Kieras Date: Wed, 20 Sep 2023 17:18:15 -0500 Subject: [PATCH 3/4] fix(PI-2365): Jenkins auth-matrix plugin was updated, causing issues with the NowSecure Integration attempted fix to change unix paths in unit tests to universal pathing so as to support the Windows Ci...without a Windows machine --- .../jenkins/plugin/ParamsAdapterTest.java | 129 +++++++++++------- 1 file changed, 76 insertions(+), 53 deletions(-) diff --git a/src/test/java/com/nowsecure/auto/jenkins/plugin/ParamsAdapterTest.java b/src/test/java/com/nowsecure/auto/jenkins/plugin/ParamsAdapterTest.java index ecaa187..906dcac 100644 --- a/src/test/java/com/nowsecure/auto/jenkins/plugin/ParamsAdapterTest.java +++ b/src/test/java/com/nowsecure/auto/jenkins/plugin/ParamsAdapterTest.java @@ -1,12 +1,15 @@ package com.nowsecure.auto.jenkins.plugin; import java.io.File; +import java.io.FileWriter; import java.io.IOException; +import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import com.google.common.io.Files; import com.nowsecure.auto.domain.NSAutoParameters; import com.nowsecure.auto.domain.ProxySettings; import com.nowsecure.auto.utils.IOHelper; @@ -14,12 +17,16 @@ import hudson.AbortException; public class ParamsAdapterTest implements NSAutoParameters { - private String token = "token"; + private static final String TEST_IPA_NAME = "test.ipa"; + private static final String TEST_APK_NAME = "test.apk"; + private String url = "https://lab-api.nowsecure.com"; - private File workspace = new File("/tmp"); - private File artifactsDir = new File("/tmp"); - private File file = new File("/tmp/test.apk"); - private String ipa = "/tmp/test.ipa"; + private String token = "token"; + private File workspace; + private File artifactsDir; + private File file; + private File ipaFile; + private File tmpDir; private String username; private String password; private boolean showStatusMessages; @@ -32,20 +39,44 @@ public class ParamsAdapterTest implements NSAutoParameters { @Before public void setup() throws IOException { - new File(ipa).createNewFile(); - } - + tmpDir = Files.createTempDir(); + tmpDir.deleteOnExit(); + artifactsDir = tmpDir; + workspace = tmpDir; + ipaFile = new File(tmpDir.getAbsolutePath() + "/" + TEST_IPA_NAME); + try (FileWriter writer = new FileWriter(ipaFile);) { + //cannot be zero length or verify of file may be false + writer.write("Hello world!"); + } + ipaFile.deleteOnExit(); + file = new File(workspace.getAbsolutePath() + "/" + TEST_APK_NAME); + try (FileWriter writer = new FileWriter(file);) { + //cannot be zero length or verify of file may be false + writer.write("Hello world!"); + } + file.deleteOnExit(); + + } + + @After + public void tearDown() { + ipaFile.delete(); + file.delete(); + tmpDir.delete(); + artifactsDir.delete(); + tmpDir.delete(); + } + @Test public void testConstructor() throws Exception { - File dir = new File("/tmp/archive"); - ParamsAdapter param = new ParamsAdapter(this, "newToken", workspace, dir, ipa, true, true, "pluginName", "bill", + ParamsAdapter param = new ParamsAdapter(this, "newToken", tmpDir, tmpDir, ipaFile.getAbsolutePath(), true, true, "pluginName", "bill", "pass", true, "stop", new ProxySettings(), true); Assert.assertEquals("newToken", param.getApiKey()); Assert.assertNotNull(param.getApiUrl()); Assert.assertEquals("desc", param.getDescription()); Assert.assertEquals("group", param.getGroup()); - Assert.assertEquals(dir, param.getArtifactsDir()); - Assert.assertEquals(new File(ipa), param.getFile()); + Assert.assertEquals(tmpDir, param.getArtifactsDir()); + Assert.assertEquals(ipaFile, param.getFile()); Assert.assertEquals(30, param.getWaitMinutes()); Assert.assertEquals(70, param.getScoreThreshold()); Assert.assertEquals("pass", param.getPassword()); @@ -56,16 +87,15 @@ public void testConstructor() throws Exception { @Test public void testConstructorWithScore() throws Exception { - File dir = new File("/tmp/archive"); - ParamsAdapter param = new ParamsAdapter(this, "newToken", workspace, dir, ipa, true, true, "pluginName", + ParamsAdapter param = new ParamsAdapter(this, "newToken", workspace, tmpDir, ipaFile.getAbsolutePath(), true, true, "pluginName", username, password, showStatusMessages, stopTestsForStatusMessage, new ProxySettings(), false); Assert.assertEquals("newToken", param.getApiKey()); Assert.assertNotNull(param.getApiUrl()); Assert.assertEquals("desc", param.getDescription()); Assert.assertEquals("group", param.getGroup()); - Assert.assertEquals(dir, param.getArtifactsDir()); - Assert.assertEquals(new File(ipa), param.getFile()); + Assert.assertEquals(tmpDir, param.getArtifactsDir()); + Assert.assertEquals(ipaFile, param.getFile()); score = 60; minutes = 40; Assert.assertEquals(40, param.getWaitMinutes()); @@ -74,45 +104,42 @@ public void testConstructorWithScore() throws Exception { @Test public void testConstructorWait() throws Exception { - File dir = new File("/tmp/archive"); - ParamsAdapter param = new ParamsAdapter(this, "newToken", workspace, dir, ipa, false, true, "pluginName", + ParamsAdapter param = new ParamsAdapter(this, "newToken", workspace, tmpDir, ipaFile.getAbsolutePath(), false, true, "pluginName", username, password, showStatusMessages, stopTestsForStatusMessage, new ProxySettings(), true); Assert.assertEquals("newToken", param.getApiKey()); Assert.assertNotNull(param.getApiUrl()); Assert.assertEquals("desc", param.getDescription()); Assert.assertEquals("group", param.getGroup()); - Assert.assertEquals(dir, param.getArtifactsDir()); - Assert.assertEquals(new File(ipa), param.getFile()); + Assert.assertEquals(tmpDir, param.getArtifactsDir()); + Assert.assertEquals(ipaFile, param.getFile()); Assert.assertEquals(30, param.getWaitMinutes()); Assert.assertEquals(0, param.getScoreThreshold()); } @Test public void testConstructorScore() throws Exception { - File dir = new File("/tmp/archive"); - ParamsAdapter param = new ParamsAdapter(this, "newToken", workspace, dir, ipa, true, false, "pluginName", + ParamsAdapter param = new ParamsAdapter(this, "newToken", workspace, tmpDir, ipaFile.getAbsolutePath(), true, false, "pluginName", username, password, showStatusMessages, stopTestsForStatusMessage, new ProxySettings(), false); Assert.assertEquals("newToken", param.getApiKey()); Assert.assertNotNull(param.getApiUrl()); Assert.assertEquals("desc", param.getDescription()); Assert.assertEquals("group", param.getGroup()); - Assert.assertEquals(dir, param.getArtifactsDir()); - Assert.assertEquals(new File(ipa), param.getFile()); + Assert.assertEquals(tmpDir, param.getArtifactsDir()); + Assert.assertEquals(ipaFile, param.getFile()); Assert.assertEquals(0, param.getWaitMinutes()); Assert.assertEquals(0, param.getScoreThreshold()); } @Test public void testConstructorNoWait() throws Exception { - File dir = new File("/tmp/archive"); - ParamsAdapter param = new ParamsAdapter(this, "newToken", workspace, dir, ipa, false, false, "pluginName", + ParamsAdapter param = new ParamsAdapter(this, "newToken", workspace, tmpDir, ipaFile.getAbsolutePath(), false, false, "pluginName", username, password, showStatusMessages, stopTestsForStatusMessage, new ProxySettings(), true); Assert.assertEquals("newToken", param.getApiKey()); Assert.assertNotNull(param.getApiUrl()); Assert.assertEquals("desc", param.getDescription()); Assert.assertEquals("group", param.getGroup()); - Assert.assertEquals(dir, param.getArtifactsDir()); - Assert.assertEquals(new File(ipa), param.getFile()); + Assert.assertEquals(tmpDir, param.getArtifactsDir()); + Assert.assertEquals(ipaFile, param.getFile()); Assert.assertEquals(0, param.getWaitMinutes()); Assert.assertEquals(0, param.getScoreThreshold()); } @@ -120,67 +147,63 @@ public void testConstructorNoWait() throws Exception { @Test(expected = AbortException.class) public void testConstructorNullToken() throws Exception { token = null; - new ParamsAdapter(this, null, new File("/tmp/archive"), new File("/tmp/test.ipa"), "binary ", true, true, null, + new ParamsAdapter(this, null, tmpDir, ipaFile, "binary ", true, true, null, username, password, showStatusMessages, stopTestsForStatusMessage, new ProxySettings(), true); } @Test(expected = AbortException.class) public void testConstructorBinary() throws Exception { token = null; - new ParamsAdapter(this, "xxxx", new File("/tmp/archive"), new File("/tmp/test.ipa"), null, true, true, null, + new ParamsAdapter(this, "xxxx", tmpDir, ipaFile, null, true, true, null, username, password, showStatusMessages, stopTestsForStatusMessage, new ProxySettings(), false); } @Test(expected = AbortException.class) public void testConstructorEmptyToken() throws Exception { token = null; - new ParamsAdapter(this, "", new File("/tmp/archive"), new File("/tmp/test.ipa"), "binary ", true, true, null, + new ParamsAdapter(this, "", tmpDir, ipaFile, "binary ", true, true, null, username, password, showStatusMessages, stopTestsForStatusMessage, new ProxySettings(), true); } @Test public void testHasFile() throws Exception { - File dir = new File("/tmp/tmp"); - dir.mkdirs(); - File file = new File(dir, "tst"); - file.createNewFile(); - Assert.assertTrue(ParamsAdapter.hasFile(file.getParentFile(), new File("."), file.getName(), "name")); - file.delete(); - dir.delete(); + Assert.assertTrue(ParamsAdapter.hasFile(this.file.getParentFile(), new File("."), this.file.getName(), "name")); } @Test public void testHasFileAbsoluteNonExistant() throws Exception { - File dir = new File("/tmp/tmp"); - File file = new File("/tmp/xxx/xxx"); + File differentDir = Files.createTempDir(); + differentDir.deleteOnExit(); + File tmpFile = new File(differentDir, "tmpxxxx"); + tmpFile.createNewFile(); + String tmpFilePath = tmpFile.getAbsolutePath(); + tmpFile.deleteOnExit(); + tmpFile.delete(); + differentDir.delete(); + System.out.println(tmpDir.getAbsolutePath()); + System.out.println(tmpFile.getAbsolutePath()); Assert.assertFalse( - ParamsAdapter.hasFile(file.getParentFile(), new File("/tmpxxxx"), file.getAbsolutePath(), "name")); - file.delete(); - dir.delete(); + ParamsAdapter.hasFile(workspace, tmpDir, tmpFilePath, "name")); } @Test public void testHasFileAbsolute() throws Exception { - File dir = new File("/tmp/tmp"); - dir.mkdirs(); - File file = new File(dir, "tst"); + File file = new File(tmpDir, "tst"); file.createNewFile(); - Assert.assertTrue(ParamsAdapter.hasFile(file.getParentFile(), new File("."), file.getAbsolutePath(), "name")); + file.deleteOnExit(); + Assert.assertTrue(ParamsAdapter.hasFile(tmpDir, new File("."), file.getAbsolutePath(), "name")); file.delete(); - dir.delete(); } @Test public void testHasFileNonExistant() throws Exception { - File dir = new File("/tmp/tmp"); - File file = new File(dir, "tst"); - Assert.assertFalse(ParamsAdapter.hasFile(file.getParentFile(), dir, file.getName(), "name")); - dir.delete(); + File file = new File(tmpDir, "tst"); + Assert.assertFalse(ParamsAdapter.hasFile(file.getParentFile(), tmpDir, file.getName(), "name")); } @Test public void testToString() throws Exception { - ParamsAdapter params = new ParamsAdapter(this, "", new File("/tmp/archive"), new File("/tmp/test.ipa"), + ParamsAdapter params = new ParamsAdapter(this, "", tmpDir, ipaFile, "binary ", true, true, null, username, password, showStatusMessages, stopTestsForStatusMessage, new ProxySettings(), true); Assert.assertNotNull(params.toString()); From 573692fbbe6cfb0207d38332e7b0d8c27bca35b8 Mon Sep 17 00:00:00 2001 From: David Kieras Date: Wed, 20 Sep 2023 17:47:17 -0500 Subject: [PATCH 4/4] fix(PI-2365): Jenkins auth-matrix plugin was updated, causing issues with the NowSecure Integration attempted fix to change env vars that are dependent on Linux so as to support the Windows Ci...without a Windows machine --- .../nowsecure/auto/jenkins/plugin/NSAutoPluginTest.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/nowsecure/auto/jenkins/plugin/NSAutoPluginTest.java b/src/test/java/com/nowsecure/auto/jenkins/plugin/NSAutoPluginTest.java index f8649ef..0e6ccda 100644 --- a/src/test/java/com/nowsecure/auto/jenkins/plugin/NSAutoPluginTest.java +++ b/src/test/java/com/nowsecure/auto/jenkins/plugin/NSAutoPluginTest.java @@ -5,6 +5,7 @@ import java.io.StringWriter; import java.util.Arrays; import java.util.Collection; +import java.util.Map; import java.util.SortedMap; import org.acegisecurity.AccessDeniedException; @@ -147,7 +148,11 @@ protected void removeRun(Run run) { }; Assert.assertNull(NSAutoPlugin.normalize(run, null)); Assert.assertEquals("test", NSAutoPlugin.normalize(run, "test")); - Assert.assertNotEquals("${HOME}", NSAutoPlugin.normalize(run, "${HOME}")); + //if this does not exist, it will pass equals and fails here Is this a control test? Might as well check 'em all + Map envs = System.getenv(); + for (String key : envs.keySet()) { + Assert.assertNotEquals("${" + key + "}", NSAutoPlugin.normalize(run, "${" + key + "}")); + } Assert.assertEquals("${test}", NSAutoPlugin.normalize(run, "${test}")); }