From db647eb944626a6fb0e6085e4886083b90ea7248 Mon Sep 17 00:00:00 2001 From: Greg Schueler Date: Thu, 16 Jan 2014 12:01:58 -0800 Subject: [PATCH] Support api v9 uuidOption for jobs import #8 --- .../org/rundeck/api/DefaultJobsImport.java | 10 +++ .../java/org/rundeck/api/RundeckClient.java | 4 + .../org/rundeck/api/RundeckJobsImport.java | 6 ++ .../rundeck/api/RundeckJobsImportBuilder.java | 6 ++ .../domain/RundeckJobsUUIDImportBehavior.java | 9 +++ .../org/rundeck/api/RundeckClientTest.java | 78 +++++++++++++++++++ .../import_jobs_uuid_param_preserve_v9.yaml | 23 ++++++ .../import_jobs_uuid_param_remove_v9.yaml | 23 ++++++ 8 files changed, 159 insertions(+) create mode 100644 src/main/java/org/rundeck/api/domain/RundeckJobsUUIDImportBehavior.java create mode 100644 src/test/resources/betamax/tapes/import_jobs_uuid_param_preserve_v9.yaml create mode 100644 src/test/resources/betamax/tapes/import_jobs_uuid_param_remove_v9.yaml diff --git a/src/main/java/org/rundeck/api/DefaultJobsImport.java b/src/main/java/org/rundeck/api/DefaultJobsImport.java index d4d4010..5671451 100644 --- a/src/main/java/org/rundeck/api/DefaultJobsImport.java +++ b/src/main/java/org/rundeck/api/DefaultJobsImport.java @@ -1,6 +1,7 @@ package org.rundeck.api; import org.rundeck.api.domain.RundeckJobsImportMethod; +import org.rundeck.api.domain.RundeckJobsUUIDImportBehavior; import java.io.InputStream; @@ -11,6 +12,7 @@ public class DefaultJobsImport implements RundeckJobsImport{ private InputStream stream; private FileType fileType; private RundeckJobsImportMethod importMethod; + private RundeckJobsUUIDImportBehavior uuidImportBehavior; private String project; public InputStream getStream() { @@ -44,4 +46,12 @@ public class DefaultJobsImport implements RundeckJobsImport{ public void setProject(final String project) { this.project = project; } + + public RundeckJobsUUIDImportBehavior getUuidImportBehavior() { + return uuidImportBehavior; + } + + public void setUuidImportBehavior(RundeckJobsUUIDImportBehavior uuidImportBehavior) { + this.uuidImportBehavior = uuidImportBehavior; + } } diff --git a/src/main/java/org/rundeck/api/RundeckClient.java b/src/main/java/org/rundeck/api/RundeckClient.java index 2d97f9c..4edd396 100644 --- a/src/main/java/org/rundeck/api/RundeckClient.java +++ b/src/main/java/org/rundeck/api/RundeckClient.java @@ -869,6 +869,10 @@ public class RundeckClient implements Serializable { .param("format", rundeckJobsImport.getFileType()) .param("dupeOption", rundeckJobsImport.getImportMethod()) .attach("xmlBatch", rundeckJobsImport.getStream()); + if(null!=rundeckJobsImport.getUuidImportBehavior()) { + //API v9 + request.param("uuidOption", rundeckJobsImport.getUuidImportBehavior()); + } if(null!=rundeckJobsImport.getProject()) { //API v8 request.param("project", rundeckJobsImport.getProject()); diff --git a/src/main/java/org/rundeck/api/RundeckJobsImport.java b/src/main/java/org/rundeck/api/RundeckJobsImport.java index dd31eb7..fe70e84 100644 --- a/src/main/java/org/rundeck/api/RundeckJobsImport.java +++ b/src/main/java/org/rundeck/api/RundeckJobsImport.java @@ -1,6 +1,7 @@ package org.rundeck.api; import org.rundeck.api.domain.RundeckJobsImportMethod; +import org.rundeck.api.domain.RundeckJobsUUIDImportBehavior; import java.io.InputStream; @@ -25,6 +26,11 @@ public interface RundeckJobsImport { * @return */ public RundeckJobsImportMethod getImportMethod(); + /** + * Return the import behavior + * @return + */ + public RundeckJobsUUIDImportBehavior getUuidImportBehavior(); /** * Return the project name diff --git a/src/main/java/org/rundeck/api/RundeckJobsImportBuilder.java b/src/main/java/org/rundeck/api/RundeckJobsImportBuilder.java index 2e94f75..69f8f24 100644 --- a/src/main/java/org/rundeck/api/RundeckJobsImportBuilder.java +++ b/src/main/java/org/rundeck/api/RundeckJobsImportBuilder.java @@ -1,6 +1,7 @@ package org.rundeck.api; import org.rundeck.api.domain.RundeckJobsImportMethod; +import org.rundeck.api.domain.RundeckJobsUUIDImportBehavior; import java.io.InputStream; @@ -20,6 +21,7 @@ public class RundeckJobsImportBuilder { jobsImport.setFileType(original.getFileType()); jobsImport.setProject(original.getProject()); jobsImport.setImportMethod(original.getImportMethod()); + jobsImport.setUuidImportBehavior(original.getUuidImportBehavior()); } /** @@ -58,6 +60,10 @@ public class RundeckJobsImportBuilder { jobsImport.setImportMethod(behavior); return this; } + public RundeckJobsImportBuilder setUUIDImportBehavior(final RundeckJobsUUIDImportBehavior behavior) { + jobsImport.setUuidImportBehavior(behavior); + return this; + } public RundeckJobsImport build() { final RundeckJobsImport built = jobsImport; diff --git a/src/main/java/org/rundeck/api/domain/RundeckJobsUUIDImportBehavior.java b/src/main/java/org/rundeck/api/domain/RundeckJobsUUIDImportBehavior.java new file mode 100644 index 0000000..9a4a1b6 --- /dev/null +++ b/src/main/java/org/rundeck/api/domain/RundeckJobsUUIDImportBehavior.java @@ -0,0 +1,9 @@ +package org.rundeck.api.domain; + +/** + * $INTERFACE is ... User: greg Date: 1/16/14 Time: 11:38 AM + */ +public enum RundeckJobsUUIDImportBehavior { + PRESERVE, + REMOVE +} diff --git a/src/test/java/org/rundeck/api/RundeckClientTest.java b/src/test/java/org/rundeck/api/RundeckClientTest.java index 8abfc6c..6865f1a 100644 --- a/src/test/java/org/rundeck/api/RundeckClientTest.java +++ b/src/test/java/org/rundeck/api/RundeckClientTest.java @@ -54,6 +54,7 @@ public class RundeckClientTest { public static final String TEST_TOKEN_3 = "9RdEosesKP3se4oV9EKOd4s3RUeUS3ON"; public static final String TEST_TOKEN_4 = "sN5RRSNvu15DnV6EcNDdc2CkdPcv3s32"; public static final String TEST_TOKEN_5 = "C3O6d5O98Kr6Dpv71sdE4ERdCuU12P6d"; + public static final String TEST_TOKEN_6 = "Do4d3NUD5DKk21DR4sNK755RcPk618vn"; @Rule public Recorder recorder = new Recorder(); @@ -912,6 +913,83 @@ public class RundeckClientTest { Assert.assertEquals("importJobsProjectParamV7", rundeckJob.getName()); Assert.assertEquals("testXYZ", rundeckJob.getProject()); } + /** + * Import jobs, project parameter v7 doesn' use parameter + * @throws Exception + */ + @Test + @Betamax(tape = "import_jobs_uuid_param_remove_v9") + public void importJobsUUIDParamRemoveV9() throws Exception { + final RundeckClient client = createClient(TEST_TOKEN_6, 9); + InputStream stream=new ByteArrayInputStream( + ("\n" + + " \n" + + " testImportUUID\n" + + " INFO\n" + + " \n" + + " \n" + + " echo hi\n" + + " \n" + + " \n" + + " \n" + + " importJobsUUIDParamRemoveV9\n" + + " \n" + + "").getBytes("utf-8")); + + final RundeckJobsImport jobsImport = RundeckJobsImportBuilder.builder() + .setStream(stream) + .setFileType(FileType.XML) + .setJobsImportMethod(RundeckJobsImportMethod.CREATE) + .setUUIDImportBehavior(RundeckJobsUUIDImportBehavior.REMOVE) + .setProject("test") + .build(); + RundeckJobsImportResult rundeckJobsImportResult = client.importJobs(jobsImport); + Assert.assertEquals(0,rundeckJobsImportResult.getFailedJobs().size()); + Assert.assertEquals(0,rundeckJobsImportResult.getSkippedJobs().size()); + Assert.assertEquals(1,rundeckJobsImportResult.getSucceededJobs().size()); + RundeckJob rundeckJob = rundeckJobsImportResult.getSucceededJobs().get(0); + Assert.assertEquals("importJobsUUIDParamRemoveV9", rundeckJob.getName()); + Assert.assertFalse("testImportUUID".equals(rundeckJob.getId())); + Assert.assertEquals("b33c8bb1-4dfc-4661-a890-4164b264cc4a", rundeckJob.getId()); + } + /** + * Import jobs, project parameter v7 doesn' use parameter + * @throws Exception + */ + @Test + @Betamax(tape = "import_jobs_uuid_param_preserve_v9") + public void importJobsUUIDParamPreserveV9() throws Exception { + final RundeckClient client = createClient(TEST_TOKEN_6, 9); + InputStream stream=new ByteArrayInputStream( + ("\n" + + " \n" + + " testImportUUID\n" + + " INFO\n" + + " \n" + + " \n" + + " echo hi\n" + + " \n" + + " \n" + + " \n" + + " importJobsUUIDParamPreserveV9\n" + + " \n" + + "").getBytes("utf-8")); + + final RundeckJobsImport jobsImport = RundeckJobsImportBuilder.builder() + .setStream(stream) + .setFileType(FileType.XML) + .setJobsImportMethod(RundeckJobsImportMethod.CREATE) + .setUUIDImportBehavior(RundeckJobsUUIDImportBehavior.PRESERVE) + .setProject("test") + .build(); + RundeckJobsImportResult rundeckJobsImportResult = client.importJobs(jobsImport); + Assert.assertEquals(0,rundeckJobsImportResult.getFailedJobs().size()); + Assert.assertEquals(0,rundeckJobsImportResult.getSkippedJobs().size()); + Assert.assertEquals(1,rundeckJobsImportResult.getSucceededJobs().size()); + RundeckJob rundeckJob = rundeckJobsImportResult.getSucceededJobs().get(0); + Assert.assertEquals("importJobsUUIDParamPreserveV9", rundeckJob.getName()); + Assert.assertEquals("testImportUUID", rundeckJob.getId()); + } /** * Running executions for all projects using API v9 * @throws Exception diff --git a/src/test/resources/betamax/tapes/import_jobs_uuid_param_preserve_v9.yaml b/src/test/resources/betamax/tapes/import_jobs_uuid_param_preserve_v9.yaml new file mode 100644 index 0000000..517189d --- /dev/null +++ b/src/test/resources/betamax/tapes/import_jobs_uuid_param_preserve_v9.yaml @@ -0,0 +1,23 @@ +!tape +name: import_jobs_uuid_param_preserve_v9 +interactions: +- recorded: 2014-01-16T19:48:16.361Z + request: + method: POST + uri: http://rundeck.local:4440/api/9/jobs/import?format=xml&dupeOption=create&uuidOption=preserve&project=test + headers: + Content-Type: multipart/form-data; boundary=Vv9SewZI5E_1GRc0505bncu0VK9ZyEST8frI5x + Host: rundeck.local:4440 + Proxy-Connection: Keep-Alive + Transfer-Encoding: chunked + User-Agent: RunDeck API Java Client 9 + X-RunDeck-Auth-Token: Do4d3NUD5DKk21DR4sNK755RcPk618vn + response: + status: 200 + headers: + Content-Type: text/xml;charset=UTF-8 + Expires: Thu, 01 Jan 1970 00:00:00 GMT + Server: Jetty(7.6.0.v20120127) + Set-Cookie: JSESSIONID=1xnx5xlw417u9yjo2k4r2azlz;Path=/ + body: "\n \n \n testImportUUID\n importJobsUUIDParamPreserveV9\n \n\ + \ test\n http://dignan.local:4440/scheduledExecution/show/testImportUUID\n \n \n \n \n" diff --git a/src/test/resources/betamax/tapes/import_jobs_uuid_param_remove_v9.yaml b/src/test/resources/betamax/tapes/import_jobs_uuid_param_remove_v9.yaml new file mode 100644 index 0000000..b91861f --- /dev/null +++ b/src/test/resources/betamax/tapes/import_jobs_uuid_param_remove_v9.yaml @@ -0,0 +1,23 @@ +!tape +name: import_jobs_uuid_param_remove_v9 +interactions: +- recorded: 2014-01-16T19:48:16.054Z + request: + method: POST + uri: http://rundeck.local:4440/api/9/jobs/import?format=xml&dupeOption=create&uuidOption=remove&project=test + headers: + Content-Type: multipart/form-data; boundary=g4k7Bv2F-yGqChdM2JJnQlCIXgmcZhb + Host: rundeck.local:4440 + Proxy-Connection: Keep-Alive + Transfer-Encoding: chunked + User-Agent: RunDeck API Java Client 9 + X-RunDeck-Auth-Token: Do4d3NUD5DKk21DR4sNK755RcPk618vn + response: + status: 200 + headers: + Content-Type: text/xml;charset=UTF-8 + Expires: Thu, 01 Jan 1970 00:00:00 GMT + Server: Jetty(7.6.0.v20120127) + Set-Cookie: JSESSIONID=1cc5yr3jhdhxs1d9zt0cxdt84z;Path=/ + body: "\n \n \n b33c8bb1-4dfc-4661-a890-4164b264cc4a\n importJobsUUIDParamRemoveV9\n\ + \ \n test\n http://dignan.local:4440/scheduledExecution/show/b33c8bb1-4dfc-4661-a890-4164b264cc4a\n \n \n \n \n"