From 0da9be4ef54206ffc47e294c2af513e1faf5bb46 Mon Sep 17 00:00:00 2001 From: Gonzalo do Carmo Norte Date: Wed, 20 Jul 2016 23:48:55 -0500 Subject: [PATCH] Initial commit --- .gitignore | 12 + LICENSE | 201 ++++++++++++++ README.md | 55 ++++ awsS3Plugin-agent/agent.iml | 124 +++++++++ awsS3Plugin-agent/pom.xml | 72 +++++ .../awsS3Plugin/AWSS3AgentBuildRunner.java | 42 +++ .../AWSS3AgentBuildRunnerInfo.java | 40 +++ .../awsS3Plugin/AWSS3BuildProcessAdapter.java | 226 +++++++++++++++ .../AWSS3BuildProcessAdapterHelper.java | 115 ++++++++ .../AgentRunnerBuildParametersModel.java | 85 ++++++ .../awsS3Plugin/adapters/AWSS3Adapter.java | 29 ++ .../adapters/AWSS3DeleteAdapter.java | 39 +++ .../adapters/AWSS3UploadAdapter.java | 31 +++ .../build-agent-plugin-awsS3Plugin.xml | 15 + .../AWSS3AgentBuildRunnerInfoTest.java | 37 +++ .../AWSS3AgentBuildRunnerTest.java | 60 ++++ .../AWSS3BuildProcessAdapterHelperTest.java | 261 ++++++++++++++++++ .../AWSS3BuildProcessAdapterTest.java | 240 ++++++++++++++++ .../adapters/AWSS3DeleteAdapterTest.java | 103 +++++++ .../adapters/AWSS3UploadAdapterTest.java | 98 +++++++ awsS3Plugin-agent/teamcity-plugin.xml | 4 + awsS3Plugin-common/awsS3Plugin-common.iml | 13 + awsS3Plugin-common/common.iml | 12 + awsS3Plugin-common/pom.xml | 11 + .../dcn/teamcity/awsS3Plugin/AppCommon.java | 4 + .../teamcity/awsS3Plugin/PluginConstants.java | 35 +++ awsS3Plugin-server/pom.xml | 57 ++++ awsS3Plugin-server/server.iml | 136 +++++++++ .../awsS3Plugin/AWSS3ParametersValidator.java | 67 +++++ .../teamcity/awsS3Plugin/AWSS3RunType.java | 88 ++++++ .../build-server-plugin-awsS3Plugin.xml | 9 + .../buildServerResources/constants.jsp | 26 ++ .../taskRunnerRunParams.jsp | 144 ++++++++++ .../viewTaskRunnerRunParams.jsp | 42 +++ .../AWSS3ParametersValidatorTest.java | 111 ++++++++ .../awsS3Plugin/AWSS3RunTypeTest.java | 92 ++++++ awsS3Plugin.iml | 12 + build/build.iml | 27 ++ build/plugin-agent-assembly.xml | 35 +++ build/plugin-assembly.xml | 38 +++ build/pom.xml | 104 +++++++ docs/.DS_Store | Bin 0 -> 6148 bytes docs/plugin_preview.png | Bin 0 -> 312053 bytes pom.xml | 54 ++++ teamcity-plugin.xml | 17 ++ 45 files changed, 3023 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 awsS3Plugin-agent/agent.iml create mode 100644 awsS3Plugin-agent/pom.xml create mode 100644 awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3AgentBuildRunner.java create mode 100644 awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3AgentBuildRunnerInfo.java create mode 100644 awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3BuildProcessAdapter.java create mode 100644 awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3BuildProcessAdapterHelper.java create mode 100644 awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AgentRunnerBuildParametersModel.java create mode 100644 awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3Adapter.java create mode 100644 awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3DeleteAdapter.java create mode 100644 awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3UploadAdapter.java create mode 100644 awsS3Plugin-agent/src/main/resources/META-INF/build-agent-plugin-awsS3Plugin.xml create mode 100644 awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3AgentBuildRunnerInfoTest.java create mode 100644 awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3AgentBuildRunnerTest.java create mode 100644 awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3BuildProcessAdapterHelperTest.java create mode 100644 awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3BuildProcessAdapterTest.java create mode 100644 awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3DeleteAdapterTest.java create mode 100644 awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3UploadAdapterTest.java create mode 100644 awsS3Plugin-agent/teamcity-plugin.xml create mode 100644 awsS3Plugin-common/awsS3Plugin-common.iml create mode 100644 awsS3Plugin-common/common.iml create mode 100644 awsS3Plugin-common/pom.xml create mode 100644 awsS3Plugin-common/src/main/java/com/dcn/teamcity/awsS3Plugin/AppCommon.java create mode 100644 awsS3Plugin-common/src/main/java/com/dcn/teamcity/awsS3Plugin/PluginConstants.java create mode 100644 awsS3Plugin-server/pom.xml create mode 100644 awsS3Plugin-server/server.iml create mode 100644 awsS3Plugin-server/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3ParametersValidator.java create mode 100644 awsS3Plugin-server/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3RunType.java create mode 100644 awsS3Plugin-server/src/main/resources/META-INF/build-server-plugin-awsS3Plugin.xml create mode 100644 awsS3Plugin-server/src/main/resources/buildServerResources/constants.jsp create mode 100644 awsS3Plugin-server/src/main/resources/buildServerResources/taskRunnerRunParams.jsp create mode 100644 awsS3Plugin-server/src/main/resources/buildServerResources/viewTaskRunnerRunParams.jsp create mode 100644 awsS3Plugin-server/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3ParametersValidatorTest.java create mode 100644 awsS3Plugin-server/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3RunTypeTest.java create mode 100644 awsS3Plugin.iml create mode 100644 build/build.iml create mode 100644 build/plugin-agent-assembly.xml create mode 100644 build/plugin-assembly.xml create mode 100644 build/pom.xml create mode 100644 docs/.DS_Store create mode 100644 docs/plugin_preview.png create mode 100644 pom.xml create mode 100644 teamcity-plugin.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f560338 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +*.class + +# Package Files # +*.jar +*.war +*.ear + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +target/ +out/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8dada3e --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..7232a7f --- /dev/null +++ b/README.md @@ -0,0 +1,55 @@ +# TeamCity Plugin: Amazon S3 Uploader + +This TeamCity plugin allows to upload content into different Amazon S3 buckets. It also allows to delete the existing content on the bucket before uploading. + +As a Build Runner, it can be set up for each build configuration as a build step, allowing to define different users and/or buckets. + +## Introducing the plugin... + +![Amazon S3 Uploader Preview](docs/plugin_preview.png) + +> This plugin has been tested on TeamCity 9.0.3+ + + +## Installing the Plugin + +- Download the [current version of the plugin](https://drive.google.com/open?id=0BxGdXmEjPnyPa2thM3FCdUh0SmM) + +- Refer to [TeamCity Installing Additional Plugins](https://confluence.jetbrains.com/display/TCD9/Installing+Additional+Plugins) documentation. + +## Before using the Plugin + +- An AWS User is needed. Refer to [Amazon Creating IAM Users](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console) documentation to create a new user if needed and obtain credentials data. + +- The user needs to have the following permissions on the bucket(s): + - List + - Upload/Delete + +## Extending the Plugin + +PRs are always welcomed! + +### How to Build + +- #### Requisites + - Java 7 + - Maven + +- #### Command + mvn package + +## License + +Copyright 2016 Gonzalo G. do Carmo Norte + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/awsS3Plugin-agent/agent.iml b/awsS3Plugin-agent/agent.iml new file mode 100644 index 0000000..65ddb1d --- /dev/null +++ b/awsS3Plugin-agent/agent.iml @@ -0,0 +1,124 @@ + + + + + + + file://$MODULE_DIR$/src/main/resources/META-INF/build-agent-plugin-awsS3Plugin.xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/awsS3Plugin-agent/pom.xml b/awsS3Plugin-agent/pom.xml new file mode 100644 index 0000000..e557ffe --- /dev/null +++ b/awsS3Plugin-agent/pom.xml @@ -0,0 +1,72 @@ + + + 4.0.0 + + + awsS3Plugin + com.dcn.teamcity.awsS3Plugin + 0.1.0 + + + awsS3Plugin-agent + + jar + + + 7.1.0 + + + + + + com.dcn.teamcity.awsS3Plugin + awsS3Plugin-common + 0.1.0 + compile + + + + org.jetbrains.teamcity + agent-api + ${teamcity-version} + provided + + + + org.jetbrains.teamcity.internal + agent + ${teamcity-version} + provided + + + + com.amazonaws + aws-java-sdk-s3 + 1.11.15 + compile + + + + org.jetbrains.teamcity + tests-support + ${teamcity-version} + test + + + + org.testng + testng + ${testng-version} + test + + + + org.mockito + mockito-all + ${mockito-version} + + + + + diff --git a/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3AgentBuildRunner.java b/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3AgentBuildRunner.java new file mode 100644 index 0000000..42f8091 --- /dev/null +++ b/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3AgentBuildRunner.java @@ -0,0 +1,42 @@ +package com.dcn.teamcity.awsS3Plugin; + +import com.dcn.teamcity.awsS3Plugin.adapters.AWSS3Adapter; +import jetbrains.buildServer.ExtensionHolder; +import jetbrains.buildServer.agent.*; +import org.jetbrains.annotations.NotNull; + +/** + * Created by sg0216948 on 7/10/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AWSS3AgentBuildRunner implements AgentBuildRunner { + + protected final ExtensionHolder myExtensionHolder; + private final AWSS3Adapter awsS3Adapter; + private final AWSS3BuildProcessAdapterHelper adapterHelper; + + public AWSS3AgentBuildRunner(@NotNull final ExtensionHolder extensionHolder, + final @NotNull AWSS3Adapter awsS3Adapter, + final @NotNull AWSS3BuildProcessAdapterHelper adapterHelper) { + myExtensionHolder = extensionHolder; + this.awsS3Adapter = awsS3Adapter; + this.adapterHelper = adapterHelper; + } + + @Override + public BuildProcess createBuildProcess(AgentRunningBuild agentRunningBuild, + BuildRunnerContext buildRunnerContext) { + return new AWSS3BuildProcessAdapter(buildRunnerContext.getBuild().getBuildLogger(), + buildRunnerContext.getRunnerParameters(), + agentRunningBuild.getCheckoutDirectory(), + myExtensionHolder, + awsS3Adapter, + adapterHelper); + } + + @Override + public AgentBuildRunnerInfo getRunnerInfo() { + return new AWSS3AgentBuildRunnerInfo(); + } +} \ No newline at end of file diff --git a/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3AgentBuildRunnerInfo.java b/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3AgentBuildRunnerInfo.java new file mode 100644 index 0000000..37cf5d7 --- /dev/null +++ b/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3AgentBuildRunnerInfo.java @@ -0,0 +1,40 @@ +package com.dcn.teamcity.awsS3Plugin; + +import jetbrains.buildServer.agent.AgentBuildRunnerInfo; +import jetbrains.buildServer.agent.BuildAgentConfiguration; + +/** + * Created by sg0216948 on 7/10/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AWSS3AgentBuildRunnerInfo implements AgentBuildRunnerInfo { + + @Override + public String getType() { + return PluginConstants.RUNNER_TYPE; + } + + @Override + public boolean canRun(BuildAgentConfiguration buildAgentConfiguration) { + return true; + } + + @Override + public boolean equals(Object obj) { + return obj != null && + obj instanceof AWSS3AgentBuildRunnerInfo && + this.getType().equals(((AWSS3AgentBuildRunnerInfo) obj).getType()); + } + + @Override + public int hashCode() { + return Long.valueOf((2 * 31 + 3) * 31 + 5).hashCode(); + } + + @Override + public String toString() { + return String.format("[AWSS3AgentBuildRunnerInfo] Type: %s", + this.getType()); + } +} diff --git a/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3BuildProcessAdapter.java b/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3BuildProcessAdapter.java new file mode 100644 index 0000000..c37a1c9 --- /dev/null +++ b/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3BuildProcessAdapter.java @@ -0,0 +1,226 @@ +package com.dcn.teamcity.awsS3Plugin; + +import com.amazonaws.AmazonClientException; +import com.amazonaws.services.s3.AmazonS3; +import com.dcn.teamcity.awsS3Plugin.adapters.AWSS3Adapter; +import jetbrains.buildServer.ExtensionHolder; +import jetbrains.buildServer.RunBuildException; +import jetbrains.buildServer.agent.BuildFinishedStatus; +import jetbrains.buildServer.agent.BuildProcessAdapter; +import jetbrains.buildServer.agent.BuildProgressLogger; +import jetbrains.buildServer.agent.impl.artifacts.ArtifactsCollection; +import org.jetbrains.annotations.NotNull; + +import java.io.File; +import java.util.List; +import java.util.Map; + +/** + * Created by sg0216948 on 7/11/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AWSS3BuildProcessAdapter extends BuildProcessAdapter { + + protected final BuildProgressLogger myLogger; + private volatile boolean hasFinished; + private volatile boolean hasFailed; + private volatile boolean isInterrupted; + private final Map runnerParametersMap; + private final File checkoutDirectory; + private final ExtensionHolder extensionHolder; + private final AWSS3Adapter awsS3Adapter; + private final AWSS3BuildProcessAdapterHelper helper; + private final String TASK_COMPLETED_TEXT = "Done"; + private final String TASK_FAILED_TEXT = "Failed: "; + private final String ERROR_PROXY = "HTTP Proxy URL not valid: '%s'. Skipping..."; + + public AWSS3BuildProcessAdapter(@NotNull final BuildProgressLogger logger, + @NotNull final Map runnerParameters, + @NotNull final File agentCheckoutDirectory, + @NotNull final ExtensionHolder extensionHolder, + @NotNull final AWSS3Adapter awsS3Adapter, + @NotNull final AWSS3BuildProcessAdapterHelper processAdapterHelper) { + myLogger = logger; + hasFinished = false; + hasFailed = false; + runnerParametersMap = runnerParameters; + checkoutDirectory = agentCheckoutDirectory; + this.extensionHolder = extensionHolder; + this.awsS3Adapter = awsS3Adapter; + helper = processAdapterHelper; + } + + + @Override + public void interrupt() { + isInterrupted = true; + } + + @Override + public boolean isInterrupted() { + return isInterrupted; + } + + @Override + public boolean isFinished() { + return hasFinished; + } + + @Override + public @NotNull BuildFinishedStatus waitFor() throws RunBuildException { + while (!isInterrupted() && !hasFinished) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RunBuildException(e); + } + } + return hasFinished ? + hasFailed ? BuildFinishedStatus.FINISHED_FAILED : + BuildFinishedStatus.FINISHED_SUCCESS : + BuildFinishedStatus.INTERRUPTED; + } + + @Override + public void start() throws RunBuildException { + try { + hasFailed = !runProcess(); + hasFinished = true; + } catch (RuntimeException e) { + hasFinished = false; + myLogger.error("Failed: " + e.getMessage()); + } + } + + /** + * @return true is process finished successfully + */ + public boolean runProcess() { + final AgentRunnerBuildParametersModel model = helper.createModel(runnerParametersMap); + + AmazonS3 s3Client = createClient(model.getPublicKey(), model.getPrivateKey(), model.getHttpProxy()); + + emptyBucketIfNeeded(model.getBucketName(), s3Client, model.isEmptyBucketBeforeUpload()); + uploadFilesToBucket(model.getBucketName(), model.getArtifactsPath(), s3Client, model.getHttpHeaderCacheControl()); + + return true; + } + + @NotNull + private AmazonS3 createClient(String publicKey, String privateKey, String httpProxy) { + AmazonS3 s3Client; + if (httpProxy != null) { + try { + s3Client = helper.createClientWithProxy(publicKey, privateKey, httpProxy); + } catch (Exception e) { + myLogger.warning(String.format(ERROR_PROXY, httpProxy)); + s3Client = helper.createClient(publicKey, privateKey); + } + } else { + s3Client = helper.createClient(publicKey, privateKey); + } + return s3Client; + } + + private void uploadFilesToBucket(String bucketName, String sourcePaths, AmazonS3 s3Client, String cacheControlHeader) { + final String TARGET_NAME = "Upload to S3 bucket: " + bucketName; + myLogger.targetStarted(TARGET_NAME); + + int totalCount = 0; + final List myArtifacts = helper.getArtifactsCollections(sourcePaths, extensionHolder, checkoutDirectory); + for (ArtifactsCollection artifactsCollection : myArtifacts) { + int count = 0; + for (Map.Entry fileStringEntry : artifactsCollection.getFilePathMap().entrySet()) { + final File source = fileStringEntry.getKey(); + + uploadFile(bucketName, s3Client, source, fileStringEntry.getValue(), cacheControlHeader); + checkIsInterrupted(); + + count++; + totalCount++; + } + myLogger.message("Uploaded [" + count + "] files for [" + artifactsCollection.getSourcePath() + "] pattern"); + } + + if (totalCount > 0) { + myLogger.message(TASK_COMPLETED_TEXT); + } else { + interrupt(); + final String errorMsg = "No files to upload have been found!"; + myLogger.error(TASK_FAILED_TEXT + errorMsg); + myLogger.logBuildProblem(helper.createBuildProblemData(bucketName, errorMsg)); + } + myLogger.targetFinished(TARGET_NAME); + } + + private void emptyBucketIfNeeded(String bucketName, AmazonS3 s3Client, boolean emptyBucket) { + final String TARGET_NAME = "Empty S3 bucket: " + bucketName; + + myLogger.targetStarted(TARGET_NAME); + if (emptyBucket) { + emptyBucket(bucketName, s3Client); + checkIsInterrupted(); + } else { + myLogger.message("Option not set. Skipping..."); + } + myLogger.targetFinished(TARGET_NAME); + } + + private void uploadFile(String bucketName, AmazonS3 client, File source, String fileStringEntryValue, String cacheControlHeader) { + myLogger.message("Transferring [" + source.getAbsolutePath() + "] to [" + fileStringEntryValue + "]"); + + try { + awsS3Adapter.getUploadAdapter().uploadToBucket(bucketName, client, source, fileStringEntryValue, cacheControlHeader); + myLogger.message("done transferring [" + source.getPath() + "]"); + } catch (AmazonClientException ace) { + interrupt(); + myLogger.error(TASK_FAILED_TEXT + ace.getMessage()); + myLogger.logBuildProblem(helper.createBuildProblemData(bucketName, source.getPath(), ace.getMessage())); + } + } + + protected void checkIsInterrupted() throws RuntimeException { + if (isInterrupted()) { + throw new RuntimeException(); + } + } + + private void emptyBucket(String bucketName, AmazonS3 client) { + try { + awsS3Adapter.getDeleteAdapter().deleteAllContentFromBucket(bucketName, client); + myLogger.message(TASK_COMPLETED_TEXT); + } catch (AmazonClientException ace) { + interrupt(); + myLogger.error(TASK_FAILED_TEXT + ace.getMessage()); + myLogger.logBuildProblem(helper.createBuildProblemData(bucketName, ace.getMessage())); + } + } + + @Override + public int hashCode() { + int a = this.isFinished() ? 1 : 3; + int b = this.isInterrupted() ? 5 : 7; + int c = this.hasFailed ? 11 : 13; + return Long.valueOf((a * 31 + b) * 31 + c).hashCode(); + } + + @Override + public String toString() { + return String.format("[AWSS3BuildProcessAdapter] Finished: %s, failed: %s, interrupted: %s - checkout dir: %s", + this.isFinished(), + this.hasFailed, + this.isInterrupted(), + this.checkoutDirectory.getPath()); + } + + @Override + public boolean equals(Object obj) { + return obj != null && + obj instanceof AWSS3BuildProcessAdapter && + this.isFinished() == ((AWSS3BuildProcessAdapter) obj).isFinished() && + this.hasFailed == ((AWSS3BuildProcessAdapter) obj).hasFailed && + this.isInterrupted() == ((AWSS3BuildProcessAdapter) obj).isInterrupted() && + this.checkoutDirectory.equals(((AWSS3BuildProcessAdapter) obj).checkoutDirectory); + } +} \ No newline at end of file diff --git a/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3BuildProcessAdapterHelper.java b/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3BuildProcessAdapterHelper.java new file mode 100644 index 0000000..b4d2dc4 --- /dev/null +++ b/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3BuildProcessAdapterHelper.java @@ -0,0 +1,115 @@ +package com.dcn.teamcity.awsS3Plugin; + +import com.amazonaws.ClientConfiguration; +import com.amazonaws.Protocol; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3Client; +import com.amazonaws.util.StringUtils; +import jetbrains.buildServer.BuildProblemData; +import jetbrains.buildServer.BuildProblemTypes; +import jetbrains.buildServer.ExtensionHolder; +import jetbrains.buildServer.agent.ArtifactsPreprocessor; +import jetbrains.buildServer.agent.impl.artifacts.ArtifactsBuilder; +import jetbrains.buildServer.agent.impl.artifacts.ArtifactsCollection; +import jetbrains.buildServer.util.StringUtil; +import org.jetbrains.annotations.NotNull; + +import java.io.File; +import java.net.URL; +import java.util.Calendar; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * Created by sg0216948 on 7/12/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AWSS3BuildProcessAdapterHelper { + + public @NotNull BuildProblemData createBuildProblemData(String bucketName, String filePath, String exceptionMessage) { + String bucketID = bucketName.length() <= 12 ? bucketName : bucketName.substring(0, 11); + String filePathID = filePath.length() <= 30 ? filePath : filePath.substring(filePath.length() - 30); + + final String id = String.format("%s:%s:%s", + bucketID, + filePathID, + Calendar.getInstance().getTimeInMillis()); + return BuildProblemData.createBuildProblem(id, BuildProblemTypes.TC_ERROR_MESSAGE_TYPE, exceptionMessage); + } + + public BuildProblemData createBuildProblemData(String bucketName, String exceptionMessage) { + final String id = String.format("%s:%s", + bucketName, + Calendar.getInstance().getTimeInMillis()); + return BuildProblemData.createBuildProblem(id, BuildProblemTypes.TC_ERROR_MESSAGE_TYPE, exceptionMessage); + } + + public @NotNull AmazonS3 createClient(String AWSPublickKey, String AWSPrivateKey) { + ClientConfiguration clientConfiguration = new ClientConfiguration(); + return new AmazonS3Client(new BasicAWSCredentials(AWSPublickKey, AWSPrivateKey), clientConfiguration); + } + + public @NotNull AmazonS3 createClientWithProxy(String AWSPublickKey, String AWSPrivateKey, String proxyUrl) throws Exception { + ClientConfiguration clientConfiguration = this.createClientConfiguration(proxyUrl); + return new AmazonS3Client(new BasicAWSCredentials(AWSPublickKey, AWSPrivateKey), clientConfiguration); + } + + public @NotNull ClientConfiguration createClientConfiguration(String proxyUrl) throws Exception { + ClientConfiguration clientConfiguration = new ClientConfiguration(); + URL url = new URL(proxyUrl); + + String userInfo = url.getUserInfo(); + + if (userInfo != null) { + String username = url.getUserInfo(); + + final int password_idx = userInfo.indexOf(':'); + if (password_idx != -1) { + username = userInfo.substring(0, password_idx); + final String password = userInfo.substring(userInfo.indexOf(':') + 1); + clientConfiguration.setProxyPassword(password); + } + + final int domain_idx = username.indexOf('\\'); + + if (domain_idx != -1) { + final String domain = username.substring(0, domain_idx); + username = username.substring(domain_idx + 1); + clientConfiguration.setProxyDomain(domain); + } + + clientConfiguration.setProxyUsername(username); + } + + clientConfiguration.setProtocol(Protocol.HTTPS.toString().equals(url.getProtocol()) ? Protocol.HTTPS : Protocol.HTTP); + clientConfiguration.setProxyHost(url.getHost()); + clientConfiguration.setProxyPort(url.getPort()); + return clientConfiguration; + } + + public @NotNull List getArtifactsCollections(String sourcePaths, ExtensionHolder extensionHolder, File checkoutDirectory) { + final Collection preprocessors = extensionHolder.getExtensions(ArtifactsPreprocessor.class); + + final ArtifactsBuilder builder = new ArtifactsBuilder(); + builder.setPreprocessors(preprocessors); + builder.setBaseDir(checkoutDirectory); + builder.setArtifactsPaths(sourcePaths); + + return builder.build(); + } + + public @NotNull AgentRunnerBuildParametersModel createModel(@NotNull final Map runnerParameters) { + final String bucketName = StringUtils.trim(runnerParameters.get(PluginConstants.UI_PARAM_BUCKET_NAME)); + final String credentialsPublicKey = StringUtils.trim(runnerParameters.get(PluginConstants.UI_PARAM_CREDENTIALS_PUB_KEY)); + final String credentialsPrivateKey = StringUtils.trim(runnerParameters.get(PluginConstants.UI_PARAM_CREDENTIALS_PRIVATE_KEY)); + final String sourcePaths = runnerParameters.get(PluginConstants.UI_PARAM_CONTENT_PATHS); + final boolean needToEmptyBucket = Boolean.valueOf(runnerParameters.get(PluginConstants.UI_PARAM_EMPTY_BUCKET)); + final String httpHeaderCacheControl = StringUtil.nullIfEmpty(StringUtils.trim(runnerParameters.get(PluginConstants.UI_PARAM_HTTP_HEADERS_CACHE_CONTROL))); + final String httpProxy = StringUtils.trim(runnerParameters.get(PluginConstants.UI_PARAM_HTTP_PROXY)); + + return new AgentRunnerBuildParametersModel(bucketName, credentialsPublicKey, credentialsPrivateKey, needToEmptyBucket, sourcePaths, httpHeaderCacheControl, httpProxy); + } +} \ No newline at end of file diff --git a/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AgentRunnerBuildParametersModel.java b/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AgentRunnerBuildParametersModel.java new file mode 100644 index 0000000..08c40b2 --- /dev/null +++ b/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/AgentRunnerBuildParametersModel.java @@ -0,0 +1,85 @@ +package com.dcn.teamcity.awsS3Plugin; + +/** + * Created by sg0216948 on 7/16/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AgentRunnerBuildParametersModel { + + private final String bucketName; + private final String publicKey; + private final String privateKey; + private final boolean emptyBucketBeforeUpload; + private final String artifactsPath; + private final String httpHeaderCacheControl; + private final String httpProxy; + + public AgentRunnerBuildParametersModel(String bucketName, String publicKey, String privateKey, boolean emptyBucketBeforeUpload, String artifactsPath, String httpHeaderCacheControl, String httpProxy) { + this.bucketName = bucketName; + this.publicKey = publicKey; + this.privateKey = privateKey; + this.emptyBucketBeforeUpload = emptyBucketBeforeUpload; + this.artifactsPath = artifactsPath; + this.httpHeaderCacheControl = httpHeaderCacheControl; + this.httpProxy = httpProxy; + } + + public String getBucketName() { + return bucketName; + } + + public String getPublicKey() { + return publicKey; + } + + public String getPrivateKey() { + return privateKey; + } + + public boolean isEmptyBucketBeforeUpload() { + return emptyBucketBeforeUpload; + } + + public String getArtifactsPath() { + return artifactsPath; + } + + public String getHttpHeaderCacheControl() { + return httpHeaderCacheControl; + } + + public String getHttpProxy() { + return httpProxy; + } + + @Override + public int hashCode() { + int a = this.getBucketName().length(); + int b = this.getPublicKey().length(); + int c = this.getPublicKey().length() + this.getPrivateKey().length() / 2; + return Long.valueOf((a * 31 + b) * 31 + c).hashCode(); + } + + @Override + public String toString() { + return String.format("Bucket: %s - Public Key: %s", + getBucketName(), + getPublicKey().substring(0, getPublicKey().length() / 2)); + } + + @Override + public boolean equals(Object obj) { + if (obj != null && obj instanceof AgentRunnerBuildParametersModel) { + AgentRunnerBuildParametersModel other = (AgentRunnerBuildParametersModel) obj; + return this.getBucketName().equals(other.getBucketName()) && + this.getPublicKey().equals(other.getPublicKey()) && + this.getPrivateKey().equals(other.getPrivateKey()) && + this.isEmptyBucketBeforeUpload() == other.isEmptyBucketBeforeUpload() && + this.getHttpProxy().equals(other.getHttpProxy()) && + this.getHttpHeaderCacheControl().equals(other.getHttpHeaderCacheControl()); + } else { + return false; + } + } +} diff --git a/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3Adapter.java b/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3Adapter.java new file mode 100644 index 0000000..08ad414 --- /dev/null +++ b/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3Adapter.java @@ -0,0 +1,29 @@ +package com.dcn.teamcity.awsS3Plugin.adapters; + +import org.jetbrains.annotations.NotNull; + +/** + * Created by sg0216948 on 7/13/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AWSS3Adapter { + + private final AWSS3UploadAdapter uploadAdapter; + private final AWSS3DeleteAdapter deleteAdapter; + + + public AWSS3Adapter(@NotNull final AWSS3UploadAdapter uploadAdapter, + @NotNull final AWSS3DeleteAdapter deleteAdapter) { + this.uploadAdapter = uploadAdapter; + this.deleteAdapter = deleteAdapter; + } + + public AWSS3UploadAdapter getUploadAdapter() { + return uploadAdapter; + } + + public AWSS3DeleteAdapter getDeleteAdapter() { + return deleteAdapter; + } +} diff --git a/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3DeleteAdapter.java b/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3DeleteAdapter.java new file mode 100644 index 0000000..f6191e8 --- /dev/null +++ b/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3DeleteAdapter.java @@ -0,0 +1,39 @@ +package com.dcn.teamcity.awsS3Plugin.adapters; + +import com.amazonaws.AmazonClientException; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.model.*; + +import java.util.Iterator; + +/** + * Created by sg0216948 on 7/12/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AWSS3DeleteAdapter { + + public void deleteAllContentFromBucket(String bucketName, AmazonS3 s3client) throws AmazonClientException { + + ObjectListing objectListing = s3client.listObjects(bucketName); + + while (true) { + for (Iterator iterator = objectListing.getObjectSummaries().iterator(); iterator.hasNext(); ) { + S3ObjectSummary objectSummary = (S3ObjectSummary) iterator.next(); + s3client.deleteObject(bucketName, objectSummary.getKey()); + } + + if (objectListing.isTruncated()) { + objectListing = s3client.listNextBatchOfObjects(objectListing); + } else { + break; + } + } + ; + VersionListing list = s3client.listVersions(new ListVersionsRequest().withBucketName(bucketName)); + for (Iterator iterator = list.getVersionSummaries().iterator(); iterator.hasNext(); ) { + S3VersionSummary s = (S3VersionSummary) iterator.next(); + s3client.deleteVersion(bucketName, s.getKey(), s.getVersionId()); + } + } +} diff --git a/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3UploadAdapter.java b/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3UploadAdapter.java new file mode 100644 index 0000000..29309b1 --- /dev/null +++ b/awsS3Plugin-agent/src/main/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3UploadAdapter.java @@ -0,0 +1,31 @@ +package com.dcn.teamcity.awsS3Plugin.adapters; + +import com.amazonaws.AmazonClientException; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.model.ObjectMetadata; +import com.amazonaws.services.s3.model.PutObjectRequest; +import jetbrains.buildServer.util.StringUtil; + +import java.io.File; + +/** + * Created by sg0216948 on 7/12/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AWSS3UploadAdapter { + + public void uploadToBucket(String bucketName, AmazonS3 s3Client, File file, String destinationDir, String cacheControlString) throws AmazonClientException { + String key = StringUtil.nullIfEmpty(destinationDir) == null ? file.getName() : destinationDir + "/" + file.getName(); + + PutObjectRequest request = new PutObjectRequest( + bucketName, key, file); + + if (cacheControlString != null) { + ObjectMetadata objectMetadata = new ObjectMetadata(); + objectMetadata.setCacheControl(cacheControlString); + request.withMetadata(objectMetadata); + } + s3Client.putObject(request); + } +} diff --git a/awsS3Plugin-agent/src/main/resources/META-INF/build-agent-plugin-awsS3Plugin.xml b/awsS3Plugin-agent/src/main/resources/META-INF/build-agent-plugin-awsS3Plugin.xml new file mode 100644 index 0000000..05672e7 --- /dev/null +++ b/awsS3Plugin-agent/src/main/resources/META-INF/build-agent-plugin-awsS3Plugin.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3AgentBuildRunnerInfoTest.java b/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3AgentBuildRunnerInfoTest.java new file mode 100644 index 0000000..42dcc76 --- /dev/null +++ b/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3AgentBuildRunnerInfoTest.java @@ -0,0 +1,37 @@ +package com.dcn.teamcity.awsS3Plugin; + +import jetbrains.buildServer.agent.BuildAgentConfiguration; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import static org.mockito.Mockito.mock; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; + +/** + * Created by sg0216948 on 7/13/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AWSS3AgentBuildRunnerInfoTest { + + private AWSS3AgentBuildRunnerInfo agentBuildRunnerInfo; + private BuildAgentConfiguration buildAgentConfiguration; + + @BeforeMethod + public void setUp() throws Exception { + buildAgentConfiguration = mock(BuildAgentConfiguration.class); + + agentBuildRunnerInfo = new AWSS3AgentBuildRunnerInfo(); + } + + @Test + public void tesGetType() throws Exception { + assertEquals(agentBuildRunnerInfo.getType(), PluginConstants.RUNNER_TYPE); + } + + @Test + public void tesCanRun() throws Exception { + assertTrue(agentBuildRunnerInfo.canRun(buildAgentConfiguration)); + } +} diff --git a/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3AgentBuildRunnerTest.java b/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3AgentBuildRunnerTest.java new file mode 100644 index 0000000..e808361 --- /dev/null +++ b/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3AgentBuildRunnerTest.java @@ -0,0 +1,60 @@ +package com.dcn.teamcity.awsS3Plugin; + +import com.dcn.teamcity.awsS3Plugin.adapters.AWSS3Adapter; +import jetbrains.buildServer.ExtensionHolder; +import jetbrains.buildServer.agent.*; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import java.io.File; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.testng.Assert.assertTrue; + +/** + * Created by sg0216948 on 7/13/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AWSS3AgentBuildRunnerTest { + + private AgentBuildRunner runner; + private ExtensionHolder extensionHolderMock; + private AWSS3Adapter awsS3Adapter; + private AWSS3BuildProcessAdapterHelper helperMock; + private AgentRunningBuild agentRunningBuildMock; + private BuildRunnerContext buildRunnerContextMock; + private BuildProgressLogger buildProgressLogger; + + @BeforeMethod + public void setUp() throws Exception { + extensionHolderMock = mock(ExtensionHolder.class); + awsS3Adapter = mock(AWSS3Adapter.class); + helperMock = mock(AWSS3BuildProcessAdapterHelper.class); + + agentRunningBuildMock = mock(AgentRunningBuild.class); + buildRunnerContextMock = mock(BuildRunnerContext.class); + buildProgressLogger = mock(BuildProgressLogger.class); + + when(agentRunningBuildMock.getBuildLogger()).thenReturn(buildProgressLogger); + when(agentRunningBuildMock.getCheckoutDirectory()).thenReturn(new File("tmp.txt")); + when(buildRunnerContextMock.getBuild()).thenReturn(agentRunningBuildMock); + + runner = new AWSS3AgentBuildRunner(extensionHolderMock, awsS3Adapter, helperMock); + } + + @Test + public void testGetRunnerInfo() throws Exception { + AgentBuildRunnerInfo result = runner.getRunnerInfo(); + + assertTrue(result instanceof AWSS3AgentBuildRunnerInfo); + } + + @Test + public void testCreateBuildProcess() throws Exception { + BuildProcess result = runner.createBuildProcess(agentRunningBuildMock, buildRunnerContextMock); + + assertTrue(result instanceof AWSS3BuildProcessAdapter); + } +} diff --git a/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3BuildProcessAdapterHelperTest.java b/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3BuildProcessAdapterHelperTest.java new file mode 100644 index 0000000..e50f498 --- /dev/null +++ b/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3BuildProcessAdapterHelperTest.java @@ -0,0 +1,261 @@ +package com.dcn.teamcity.awsS3Plugin; + +import com.amazonaws.ClientConfiguration; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3Client; +import jetbrains.buildServer.BuildProblemData; +import jetbrains.buildServer.BuildProblemTypes; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import java.util.HashMap; +import java.util.Map; + +import static org.testng.Assert.*; + +/** + * Created by sg0216948 on 7/12/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AWSS3BuildProcessAdapterHelperTest { + + private AWSS3BuildProcessAdapterHelper helper; + + @BeforeMethod + public void setUp() throws Exception { + helper = new AWSS3BuildProcessAdapterHelper(); + } + + @Test + public void testCreateBuildProblemDataWithFilePath() throws Exception { + final String bucket_name = "my-bucket-with-long-name"; + final String file_path = "/Users/sg0216948/Downloads/TeamCity/buildAgent/work/56eb2e988bd79b91/.gitignore"; + final String exception_message = "my-bucket"; + + BuildProblemData result = helper.createBuildProblemData(bucket_name, file_path, exception_message); + + System.out.println(result.getIdentity()); + System.out.println(result.getIdentity().length()); + + assertTrue(result.getIdentity().contains("my-bucket-w" + ":" + "rk/56eb2e988bd79b91/.gitignore" + ":")); + + assertEquals(result.getType(), BuildProblemTypes.TC_ERROR_MESSAGE_TYPE); + assertEquals(result.getDescription(), exception_message); + } + + @Test + public void testCreateBuildProblemData() throws Exception { + final String bucket_name = "my-bucket"; + final String exception_message = "Access Denied (Service: Amazon S3; Status Code: 403;"; + + BuildProblemData result = helper.createBuildProblemData(bucket_name, exception_message); + + assertTrue(result.getIdentity().contains(bucket_name + ":")); + assertEquals(result.getType(), BuildProblemTypes.TC_ERROR_MESSAGE_TYPE); + assertEquals(result.getDescription(), exception_message); + } + + @Test + public void testCreateClient() throws Exception { + final String publicKey = "AAA"; + final String privateKey = "ZZZ"; + + AmazonS3 result = helper.createClient(publicKey, privateKey); + assertTrue(result instanceof AmazonS3Client); + } + + @Test + public void testCreateClientWithProxy() throws Exception { + final String publicKey = "AAA"; + final String privateKey = "ZZZ"; + final String proxyUrl = "http://localhost:3128"; + + AmazonS3 result = helper.createClientWithProxy(publicKey, privateKey, proxyUrl); + assertTrue(result instanceof AmazonS3Client); + } + + @Test + public void createClientConfigurationBasicProxyHTTP() throws Exception { + final String proxy_protocol = "http"; + final String proxy_host = "localhost"; + final int proxy_port = 3128; + + final String proxyString = String.format("%s://%s:%s", + proxy_protocol, + proxy_host, + proxy_port + ); + + ClientConfiguration result = helper.createClientConfiguration(proxyString); + + assertEquals(result.getProtocol().toString(), proxy_protocol); + + assertEquals(result.getProxyHost(), proxy_host); + assertEquals(result.getProxyPort(), proxy_port); + + assertNull(result.getProxyDomain()); + assertNull(result.getProxyUsername()); + assertNull(result.getProxyPassword()); + } + + @Test + public void createClientConfigurationBasicProxyHTTPS() throws Exception { + final String proxy_protocol = "https"; + final String proxy_host = "localhost"; + final int proxy_port = 3128; + + final String proxyString = String.format("%s://%s:%s", + proxy_protocol, + proxy_host, + proxy_port + ); + + ClientConfiguration result = helper.createClientConfiguration(proxyString); + + assertEquals(result.getProtocol().toString(), proxy_protocol); + + assertEquals(result.getProxyHost(), proxy_host); + assertEquals(result.getProxyPort(), proxy_port); + + assertNull(result.getProxyDomain()); + assertNull(result.getProxyUsername()); + assertNull(result.getProxyPassword()); + } + + @Test + public void createClientConfigurationProxyWithUsernameNoPass() throws Exception { + final String proxy_protocol = "http"; + final String proxy_host = "www-my-proxy.hostname.com"; + final int proxy_port = 80; + final String proxy_user = "username"; + + final String proxyString = String.format("%s://%s@%s:%s", + proxy_protocol, + proxy_user, + proxy_host, + proxy_port + ); + + ClientConfiguration result = helper.createClientConfiguration(proxyString); + + assertEquals(result.getProtocol().toString(), proxy_protocol); + assertNull(result.getProxyDomain()); + + assertEquals(result.getProxyHost(), proxy_host); + assertEquals(result.getProxyPort(), proxy_port); + + assertEquals(result.getProxyUsername(), proxy_user); + assertNull(result.getProxyPassword()); + } + + @Test + public void createClientConfigurationProxyWithUsernameAndPass() throws Exception { + final String proxy_protocol = "http"; + final String proxy_host = "www-my-proxy.hostname.com"; + final int proxy_port = 80; + final String proxy_user = "username"; + final String proxy_pass = "password"; + + final String proxyString = String.format("%s://%s:%s@%s:%s", + proxy_protocol, + proxy_user, + proxy_pass, + proxy_host, + proxy_port + ); + + ClientConfiguration result = helper.createClientConfiguration(proxyString); + + assertEquals(result.getProtocol().toString(), proxy_protocol); + assertNull(result.getProxyDomain()); + + assertEquals(result.getProxyHost(), proxy_host); + assertEquals(result.getProxyPort(), proxy_port); + + assertEquals(result.getProxyUsername(), proxy_user); + assertEquals(result.getProxyPassword(), proxy_pass); + } + + @Test + public void createClientConfigurationProxyWithUserDomain() throws Exception { + final String proxy_protocol = "http"; + final String proxy_domain = "global"; + final String proxy_host = "www-my-proxy.hostname.com"; + final int proxy_port = 80; + final String proxy_user = "username"; + final String proxy_pass = "password"; + + final String proxyString = String.format("%s://%s\\%s:%s@%s:%s", + proxy_protocol, + proxy_domain, + proxy_user, + proxy_pass, + proxy_host, + proxy_port + ); + + ClientConfiguration result = helper.createClientConfiguration(proxyString); + + assertEquals(result.getProtocol().toString(), proxy_protocol); + assertEquals(result.getProxyDomain(), proxy_domain); + + assertEquals(result.getProxyHost(), proxy_host); + assertEquals(result.getProxyPort(), proxy_port); + + assertEquals(result.getProxyUsername(), proxy_user); + assertEquals(result.getProxyPassword(), proxy_pass); + } + + @Test + public void testCreateModel() throws Exception { + final String valueSpacesTrimmed = "someValue"; + Map input = new HashMap(); + input.put(PluginConstants.UI_PARAM_BUCKET_NAME, "someValue "); + input.put(PluginConstants.UI_PARAM_BUCKET_REGION, " someValue"); + input.put(PluginConstants.UI_PARAM_CREDENTIALS_PUB_KEY, " someValue "); + input.put(PluginConstants.UI_PARAM_CREDENTIALS_PRIVATE_KEY, " someValue "); + input.put(PluginConstants.UI_PARAM_EMPTY_BUCKET, "true"); + input.put(PluginConstants.UI_PARAM_HTTP_HEADERS_CACHE_CONTROL, " someValue "); + input.put(PluginConstants.UI_PARAM_HTTP_PROXY, " someValue "); + + AgentRunnerBuildParametersModel result = helper.createModel(input); + + assertEquals(result.getBucketName(), valueSpacesTrimmed); + assertEquals(result.getPublicKey(), valueSpacesTrimmed); + assertEquals(result.getPrivateKey(), valueSpacesTrimmed); + assertTrue(result.isEmptyBucketBeforeUpload()); + assertEquals(result.getHttpHeaderCacheControl(), valueSpacesTrimmed); + assertEquals(result.getHttpProxy(), valueSpacesTrimmed); + } + + @Test + public void testCreateModelNoDelete() throws Exception { + final String valueSpacesTrimmed = "someValue"; + Map input = new HashMap(); + input.put(PluginConstants.UI_PARAM_BUCKET_NAME, "someValue "); + input.put(PluginConstants.UI_PARAM_BUCKET_REGION, " someValue"); + input.put(PluginConstants.UI_PARAM_CREDENTIALS_PUB_KEY, " someValue "); + input.put(PluginConstants.UI_PARAM_CREDENTIALS_PRIVATE_KEY, " someValue "); + input.put(PluginConstants.UI_PARAM_EMPTY_BUCKET, "false"); + input.put(PluginConstants.UI_PARAM_HTTP_HEADERS_CACHE_CONTROL, " someValue "); + + AgentRunnerBuildParametersModel result = helper.createModel(input); + + assertEquals(result.getBucketName(), valueSpacesTrimmed); + assertEquals(result.getPublicKey(), valueSpacesTrimmed); + assertEquals(result.getPrivateKey(), valueSpacesTrimmed); + assertFalse(result.isEmptyBucketBeforeUpload()); + assertEquals(result.getHttpHeaderCacheControl(), valueSpacesTrimmed); + } + + @Test + public void testCreateModelNotRequiredFields() throws Exception { + Map input = new HashMap(); + input.put(PluginConstants.UI_PARAM_HTTP_HEADERS_CACHE_CONTROL, " "); + + AgentRunnerBuildParametersModel result = helper.createModel(input); + + assertNull(result.getHttpHeaderCacheControl()); + } +} \ No newline at end of file diff --git a/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3BuildProcessAdapterTest.java b/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3BuildProcessAdapterTest.java new file mode 100644 index 0000000..fc6ce30 --- /dev/null +++ b/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3BuildProcessAdapterTest.java @@ -0,0 +1,240 @@ +package com.dcn.teamcity.awsS3Plugin; + +import com.amazonaws.services.s3.AmazonS3; +import com.dcn.teamcity.awsS3Plugin.adapters.AWSS3Adapter; +import com.dcn.teamcity.awsS3Plugin.adapters.AWSS3DeleteAdapter; +import com.dcn.teamcity.awsS3Plugin.adapters.AWSS3UploadAdapter; +import jetbrains.buildServer.BuildProblemData; +import jetbrains.buildServer.ExtensionHolder; +import jetbrains.buildServer.agent.BuildProgressLogger; +import jetbrains.buildServer.agent.impl.artifacts.ArtifactsCollection; +import org.jetbrains.annotations.NotNull; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.mockito.Mockito.*; + +/** + * Created by sg0216948 on 7/14/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AWSS3BuildProcessAdapterTest { + + private AmazonS3 amazonS3Mock; + private AWSS3BuildProcessAdapter adapter; + private BuildProgressLogger loggerMock; + private Map runnerParametersMock; + private File agentCheckoutDirectoryMock; + private ExtensionHolder extensionHolderMock; + private AWSS3Adapter awsS3AdapterMock; + private AWSS3BuildProcessAdapterHelper processAdapterHelperMock; + private AWSS3UploadAdapter uploadAdapterMock; + private AWSS3DeleteAdapter deleteAdapterMock; + private String uploadTaskLog; + private String noUploadErrorLog; + private String taskDoneLog; + + @BeforeMethod + public void setUp() throws Exception { + uploadTaskLog = "Upload to S3 bucket: "; + noUploadErrorLog = "No files to upload have been found!"; + taskDoneLog = "Done"; + + amazonS3Mock = mock(AmazonS3.class); + loggerMock = mock(BuildProgressLogger.class); + runnerParametersMock = new HashMap<>(); + agentCheckoutDirectoryMock = mock(File.class); + extensionHolderMock = mock(ExtensionHolder.class); + + uploadAdapterMock = mock(AWSS3UploadAdapter.class); + deleteAdapterMock = mock(AWSS3DeleteAdapter.class); + + awsS3AdapterMock = new AWSS3Adapter(uploadAdapterMock, deleteAdapterMock); + processAdapterHelperMock = mock(AWSS3BuildProcessAdapterHelper.class); + when(processAdapterHelperMock.createClient(anyString(), anyString())).thenReturn(amazonS3Mock); + when(processAdapterHelperMock.createClientWithProxy(anyString(), anyString(), anyString())).thenReturn(amazonS3Mock); + } + + @Test + public void testRunProcessNoValidProxy() throws Exception { + final String bucketName = "someName"; + final String uploadTaskLogBucket = uploadTaskLog + bucketName; + final String httpProxy = "http://username@notvalid:::"; + + mockBuilderCreateModel(bucketName, "false", null, httpProxy); + when(processAdapterHelperMock.createClientWithProxy(anyString(), anyString(), anyString())).thenThrow(Exception.class); + + + adapter = new AWSS3BuildProcessAdapter(loggerMock, runnerParametersMock, agentCheckoutDirectoryMock, extensionHolderMock, awsS3AdapterMock, processAdapterHelperMock); + + adapter.runProcess(); + + verify(loggerMock).warning("HTTP Proxy URL not valid: 'http://username@notvalid:::'. Skipping..."); + + verifyDeleteOperationNotExecuted(bucketName); + + verify(loggerMock).targetStarted(uploadTaskLogBucket); + verify(uploadAdapterMock, never()).uploadToBucket(anyString(), any(AmazonS3.class), any(File.class), anyString(), anyString()); + verify(loggerMock).error("Failed: " + noUploadErrorLog); + verify(loggerMock).logBuildProblem(any(BuildProblemData.class)); + verify(processAdapterHelperMock).createBuildProblemData(bucketName, noUploadErrorLog); + verify(loggerMock).targetFinished(uploadTaskLogBucket); + } + + @Test + public void testRunProcessNoDeleteNoFilesToUpload() throws Exception { + final String bucketName = "someName"; + final String uploadTaskLogBucket = uploadTaskLog + bucketName; + + mockBuilderCreateModel(bucketName, "false", null, null); + + + adapter = new AWSS3BuildProcessAdapter(loggerMock, runnerParametersMock, agentCheckoutDirectoryMock, extensionHolderMock, awsS3AdapterMock, processAdapterHelperMock); + + adapter.runProcess(); + + verifyDeleteOperationNotExecuted(bucketName); + + verify(loggerMock).targetStarted(uploadTaskLogBucket); + verify(uploadAdapterMock, never()).uploadToBucket(anyString(), any(AmazonS3.class), any(File.class), anyString(), anyString()); + verify(loggerMock).error("Failed: " + noUploadErrorLog); + verify(loggerMock).logBuildProblem(any(BuildProblemData.class)); + verify(processAdapterHelperMock).createBuildProblemData(bucketName, noUploadErrorLog); + verify(loggerMock).targetFinished(uploadTaskLogBucket); + } + + @NotNull + private void mockBuilderCreateModel(String bucketName, String needToEmptyBucket, String sourcePaths, String httpProxy) { + final String publicKey = ""; + final String privateKey = publicKey; + + AgentRunnerBuildParametersModel model = new AgentRunnerBuildParametersModel(bucketName, publicKey, privateKey, Boolean.valueOf(needToEmptyBucket), sourcePaths, null, httpProxy); + when(processAdapterHelperMock.createModel(anyMap())).thenReturn(model); + } + + @Test + public void testRunProcessNoDeleteSomeFilesToUpload() throws Exception { + final String bucketName = "someName"; + final String uploadTaskLogBucket = uploadTaskLog + bucketName; + final String desiredArtifactPaths = "src,examples/subfolder"; + final String sourcePath = "src"; + final String destinationPath = sourcePath; + final File file1 = new File("src/file1.html"); + final File file2 = new File("src/file2.html"); + final File file3 = new File("src/file3.html"); + + runnerParametersMock.put(PluginConstants.UI_PARAM_BUCKET_NAME, bucketName); + runnerParametersMock.put(PluginConstants.UI_PARAM_CONTENT_PATHS, desiredArtifactPaths); + + Map filePathMap = new HashMap<>(); + filePathMap.put(file1, sourcePath); + filePathMap.put(file2, sourcePath); + filePathMap.put(file3, sourcePath); + + ArtifactsCollection artifactsCollection = new ArtifactsCollection(sourcePath, destinationPath, filePathMap); + + List artifacts = new ArrayList<>(); + artifacts.add(artifactsCollection); + + when(processAdapterHelperMock.getArtifactsCollections(desiredArtifactPaths, extensionHolderMock, agentCheckoutDirectoryMock)).thenReturn(artifacts); + mockBuilderCreateModel(bucketName, "false", desiredArtifactPaths, null); + + + adapter = new AWSS3BuildProcessAdapter(loggerMock, runnerParametersMock, agentCheckoutDirectoryMock, extensionHolderMock, awsS3AdapterMock, processAdapterHelperMock); + adapter.runProcess(); + + verifyDeleteOperationNotExecuted(bucketName); + + verify(loggerMock).targetStarted(uploadTaskLogBucket); + + verify(uploadAdapterMock).uploadToBucket(eq(bucketName), any(AmazonS3.class), eq(file1), eq(sourcePath), anyString()); + verify(loggerMock).message("Transferring [" + file1.getAbsolutePath() + "] to [" + sourcePath + "]"); + verify(loggerMock).message("done transferring [" + file1.getPath() + "]"); + + verify(uploadAdapterMock).uploadToBucket(eq(bucketName), any(AmazonS3.class), eq(file2), eq(sourcePath), anyString()); + verify(loggerMock).message("Transferring [" + file2.getAbsolutePath() + "] to [" + sourcePath + "]"); + verify(loggerMock).message("done transferring [" + file2.getPath() + "]"); + + verify(uploadAdapterMock).uploadToBucket(eq(bucketName), any(AmazonS3.class), eq(file3), eq(sourcePath), anyString()); + verify(loggerMock).message("Transferring [" + file3.getAbsolutePath() + "] to [" + sourcePath + "]"); + verify(loggerMock).message("done transferring [" + file3.getPath() + "]"); + + verify(loggerMock).message("Uploaded [" + filePathMap.size() + "] files for [" + artifactsCollection.getSourcePath() + "] pattern"); + verify(loggerMock).message(taskDoneLog); + + verify(loggerMock, never()).error("Failed: " + noUploadErrorLog); + verify(loggerMock, never()).logBuildProblem(any(BuildProblemData.class)); + + verify(loggerMock).targetFinished(uploadTaskLogBucket); + } + + @Test + public void testRunProcessNoDeleteSomeFilesToUploadButNotMatchingCriteria() throws Exception { + final String bucketName = "someName"; + final String uploadTaskLogBucket = uploadTaskLog + bucketName; + final String desiredArtifactPaths = "examples/subfolder"; + final String sourcePath = "src"; + final String destinationPath = sourcePath; + + runnerParametersMock.put(PluginConstants.UI_PARAM_BUCKET_NAME, bucketName); + runnerParametersMock.put(PluginConstants.UI_PARAM_CONTENT_PATHS, desiredArtifactPaths); + + Map filePathMap = new HashMap<>(); + + ArtifactsCollection artifactsCollection = new ArtifactsCollection(sourcePath, destinationPath, filePathMap); + + List artifacts = new ArrayList<>(); + artifacts.add(artifactsCollection); + + when(processAdapterHelperMock.getArtifactsCollections(desiredArtifactPaths, extensionHolderMock, agentCheckoutDirectoryMock)).thenReturn(artifacts); + mockBuilderCreateModel(bucketName, "false", desiredArtifactPaths, null); + + + adapter = new AWSS3BuildProcessAdapter(loggerMock, runnerParametersMock, agentCheckoutDirectoryMock, extensionHolderMock, awsS3AdapterMock, processAdapterHelperMock); + adapter.runProcess(); + + verifyDeleteOperationNotExecuted(bucketName); + + verify(loggerMock).targetStarted(uploadTaskLogBucket); + verify(uploadAdapterMock, never()).uploadToBucket(anyString(), any(AmazonS3.class), any(File.class), anyString(), anyString()); + verify(loggerMock, never()).message(taskDoneLog); + verify(loggerMock).error("Failed: " + noUploadErrorLog); + verify(loggerMock).logBuildProblem(any(BuildProblemData.class)); + verify(loggerMock).targetFinished(uploadTaskLogBucket); + } + + @Test + public void testRunProcessDeleteFiles() throws Exception { + final String bucketName = "someBucket"; + mockBuilderCreateModel(bucketName, "true", "", null); + + adapter = new AWSS3BuildProcessAdapter(loggerMock, runnerParametersMock, agentCheckoutDirectoryMock, extensionHolderMock, awsS3AdapterMock, processAdapterHelperMock); + adapter.runProcess(); + + verifyDeleteOperationExecuted(bucketName); + } + + private void verifyDeleteOperationNotExecuted(String bucketName) { + final String deleteTaskLog = "Empty S3 bucket: " + bucketName; + verify(loggerMock).targetStarted(deleteTaskLog); + verify(loggerMock).message("Option not set. Skipping..."); + verify(loggerMock).targetFinished(deleteTaskLog); + verify(deleteAdapterMock, never()).deleteAllContentFromBucket(anyString(), any(AmazonS3.class)); + } + + private void verifyDeleteOperationExecuted(String bucketName) { + final String deleteTaskLog = "Empty S3 bucket: " + bucketName; + verify(loggerMock).targetStarted(deleteTaskLog); + verify(loggerMock).message(taskDoneLog); + verify(loggerMock).targetFinished(deleteTaskLog); + verify(deleteAdapterMock).deleteAllContentFromBucket(eq(bucketName), any(AmazonS3.class)); + } + +} diff --git a/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3DeleteAdapterTest.java b/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3DeleteAdapterTest.java new file mode 100644 index 0000000..54694ca --- /dev/null +++ b/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3DeleteAdapterTest.java @@ -0,0 +1,103 @@ +package com.dcn.teamcity.awsS3Plugin.adapters; + +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.model.*; +import org.jetbrains.annotations.NotNull; +import org.mockito.ArgumentCaptor; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.*; + +/** + * Created by sg0216948 on 7/13/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AWSS3DeleteAdapterTest { + + private AWSS3DeleteAdapter adapter; + private AmazonS3 amazonS3Client; + private String bucketName; + + @BeforeMethod + public void setUp() throws Exception { + bucketName = "my-bucket"; + adapter = new AWSS3DeleteAdapter(); + amazonS3Client = mock(AmazonS3.class); + } + + @Test + public void tesDeleteAllContentFromBucket() throws Exception { + ObjectListing objectListing = createObjectListing(); + + when(amazonS3Client.listObjects(any(String.class))).thenReturn(objectListing); + when(amazonS3Client.listVersions(any(ListVersionsRequest.class))).thenReturn(new VersionListing()); + + + adapter.deleteAllContentFromBucket(bucketName, amazonS3Client); + + verify(amazonS3Client, times(objectListing.getObjectSummaries().size())).deleteObject(any(String.class), any(String.class)); + verify(amazonS3Client).deleteObject(bucketName, objectListing.getObjectSummaries().get(0).getKey()); + verify(amazonS3Client).deleteObject(bucketName, objectListing.getObjectSummaries().get(1).getKey()); + verify(amazonS3Client).deleteObject(bucketName, objectListing.getObjectSummaries().get(2).getKey()); + + ArgumentCaptor argument = ArgumentCaptor.forClass(ListVersionsRequest.class); + verify(amazonS3Client).listVersions(argument.capture()); + assertEquals(bucketName, argument.getValue().getBucketName()); + + verify(amazonS3Client, never()).deleteVersion(anyString(), anyString(), anyString()); + } + + @Test + public void tesDeleteAllContentFromBucketWithVersioning() throws Exception { + ObjectListing objectListing = createObjectListing(); + VersionListing versionListing = createVersionListing(); + + when(amazonS3Client.listObjects(any(String.class))).thenReturn(objectListing); + when(amazonS3Client.listVersions(any(ListVersionsRequest.class))).thenReturn(versionListing); + + + adapter.deleteAllContentFromBucket(bucketName, amazonS3Client); + + ArgumentCaptor argument = ArgumentCaptor.forClass(ListVersionsRequest.class); + verify(amazonS3Client).listVersions(argument.capture()); + assertEquals(bucketName, argument.getValue().getBucketName()); + + verify(amazonS3Client, times(versionListing.getVersionSummaries().size())).deleteVersion(any(String.class), any(String.class), any(String.class)); + verify(amazonS3Client).deleteVersion(bucketName, versionListing.getVersionSummaries().get(0).getKey(), versionListing.getVersionSummaries().get(0).getVersionId()); + verify(amazonS3Client).deleteVersion(bucketName, versionListing.getVersionSummaries().get(1).getKey(), versionListing.getVersionSummaries().get(1).getVersionId()); + } + + @NotNull + private VersionListing createVersionListing() { + S3VersionSummary s3VersionSummary1 = new S3VersionSummary(); + s3VersionSummary1.setKey("key1"); + s3VersionSummary1.setVersionId("version11"); + S3VersionSummary s3VersionSummary2 = new S3VersionSummary(); + s3VersionSummary2.setKey("key2"); + s3VersionSummary2.setVersionId("version22"); + + VersionListing versionListing = new VersionListing(); + versionListing.getVersionSummaries().add(s3VersionSummary1); + versionListing.getVersionSummaries().add(s3VersionSummary2); + return versionListing; + } + + @NotNull + private ObjectListing createObjectListing() { + S3ObjectSummary s3ObjectSummary1 = new S3ObjectSummary(); + s3ObjectSummary1.setKey("one"); + S3ObjectSummary s3ObjectSummary2 = new S3ObjectSummary(); + s3ObjectSummary2.setKey("two"); + S3ObjectSummary s3ObjectSummary3 = new S3ObjectSummary(); + s3ObjectSummary3.setKey("three"); + + ObjectListing objectListing = new ObjectListing(); + objectListing.getObjectSummaries().add(s3ObjectSummary1); + objectListing.getObjectSummaries().add(s3ObjectSummary2); + objectListing.getObjectSummaries().add(s3ObjectSummary3); + return objectListing; + } +} \ No newline at end of file diff --git a/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3UploadAdapterTest.java b/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3UploadAdapterTest.java new file mode 100644 index 0000000..1937834 --- /dev/null +++ b/awsS3Plugin-agent/src/test/java/com/dcn/teamcity/awsS3Plugin/adapters/AWSS3UploadAdapterTest.java @@ -0,0 +1,98 @@ +package com.dcn.teamcity.awsS3Plugin.adapters; + +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.model.PutObjectRequest; +import org.mockito.ArgumentCaptor; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import java.io.File; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +/** + * Created by sg0216948 on 7/13/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AWSS3UploadAdapterTest { + + private AWSS3UploadAdapter adapter; + private AmazonS3 amazonS3Client; + private String bucketName; + private File source; + private String httpHeaderCacheControl; + + @BeforeMethod + public void setUp() throws Exception { + bucketName = "my-bucket"; + adapter = new AWSS3UploadAdapter(); + amazonS3Client = mock(AmazonS3.class); + source = new File("/tmp"); + httpHeaderCacheControl = null; + } + + @Test + public void testUploadToBucketWhenNoDestinationDir() throws Exception { + final String destinationDir = null; + + adapter.uploadToBucket(bucketName, amazonS3Client, source, destinationDir, httpHeaderCacheControl); + + ArgumentCaptor argument = ArgumentCaptor.forClass(PutObjectRequest.class); + verify(amazonS3Client).putObject(argument.capture()); + + assertEquals(bucketName, argument.getValue().getBucketName()); + assertEquals(source.getName(), argument.getValue().getKey()); + assertEquals(source, argument.getValue().getFile()); + assertNull(argument.getValue().getMetadata()); + } + + @Test + public void testUploadToBucketWhenEmptyDestinationDir() throws Exception { + final String destinationDir = ""; + + adapter.uploadToBucket(bucketName, amazonS3Client, source, destinationDir, httpHeaderCacheControl); + + ArgumentCaptor argument = ArgumentCaptor.forClass(PutObjectRequest.class); + verify(amazonS3Client).putObject(argument.capture()); + + assertEquals(bucketName, argument.getValue().getBucketName()); + assertEquals(source.getName(), argument.getValue().getKey()); + assertEquals(source, argument.getValue().getFile()); + assertNull(argument.getValue().getMetadata()); + } + + @Test + public void testUploadToBucketWhenSomeDestinationDir() throws Exception { + final String destinationDir = "src/here"; + + adapter.uploadToBucket(bucketName, amazonS3Client, source, destinationDir, httpHeaderCacheControl); + + ArgumentCaptor argument = ArgumentCaptor.forClass(PutObjectRequest.class); + verify(amazonS3Client).putObject(argument.capture()); + + assertEquals(bucketName, argument.getValue().getBucketName()); + assertEquals(destinationDir + "/" + source.getName(), argument.getValue().getKey()); + assertEquals(source, argument.getValue().getFile()); + assertNull(argument.getValue().getMetadata()); + } + + @Test + public void testUploadToBucketWhenHttpHeaderCacheControlPresent() throws Exception { + final String destinationDir = "src/here"; + httpHeaderCacheControl = "max-age=0, no-cache, no-store"; + + adapter.uploadToBucket(bucketName, amazonS3Client, source, destinationDir, httpHeaderCacheControl); + + ArgumentCaptor argument = ArgumentCaptor.forClass(PutObjectRequest.class); + verify(amazonS3Client).putObject(argument.capture()); + + assertEquals(bucketName, argument.getValue().getBucketName()); + assertEquals(destinationDir + "/" + source.getName(), argument.getValue().getKey()); + assertEquals(source, argument.getValue().getFile()); + assertEquals(httpHeaderCacheControl, argument.getValue().getMetadata().getCacheControl()); + } +} diff --git a/awsS3Plugin-agent/teamcity-plugin.xml b/awsS3Plugin-agent/teamcity-plugin.xml new file mode 100644 index 0000000..0db7519 --- /dev/null +++ b/awsS3Plugin-agent/teamcity-plugin.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/awsS3Plugin-common/awsS3Plugin-common.iml b/awsS3Plugin-common/awsS3Plugin-common.iml new file mode 100644 index 0000000..1c7060f --- /dev/null +++ b/awsS3Plugin-common/awsS3Plugin-common.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/awsS3Plugin-common/common.iml b/awsS3Plugin-common/common.iml new file mode 100644 index 0000000..c7069d9 --- /dev/null +++ b/awsS3Plugin-common/common.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/awsS3Plugin-common/pom.xml b/awsS3Plugin-common/pom.xml new file mode 100644 index 0000000..38765a4 --- /dev/null +++ b/awsS3Plugin-common/pom.xml @@ -0,0 +1,11 @@ + + + 4.0.0 + + awsS3Plugin + com.dcn.teamcity.awsS3Plugin + 0.1.0 + + awsS3Plugin-common + jar + diff --git a/awsS3Plugin-common/src/main/java/com/dcn/teamcity/awsS3Plugin/AppCommon.java b/awsS3Plugin-common/src/main/java/com/dcn/teamcity/awsS3Plugin/AppCommon.java new file mode 100644 index 0000000..4cedd51 --- /dev/null +++ b/awsS3Plugin-common/src/main/java/com/dcn/teamcity/awsS3Plugin/AppCommon.java @@ -0,0 +1,4 @@ +package com.dcn.teamcity.awsS3Plugin; + +public class AppCommon { +} diff --git a/awsS3Plugin-common/src/main/java/com/dcn/teamcity/awsS3Plugin/PluginConstants.java b/awsS3Plugin-common/src/main/java/com/dcn/teamcity/awsS3Plugin/PluginConstants.java new file mode 100644 index 0000000..f2c8735 --- /dev/null +++ b/awsS3Plugin-common/src/main/java/com/dcn/teamcity/awsS3Plugin/PluginConstants.java @@ -0,0 +1,35 @@ +package com.dcn.teamcity.awsS3Plugin; + +/** + * Created by sg0216948 on 7/9/16. + */ +public interface PluginConstants { + + String UI_PARAM_BUCKET_NAME = "Bucket"; + String UI_PARAM_BUCKET_NAME_DESCRIPTION = "Name"; + + String UI_PARAM_BUCKET_REGION = "region"; + String UI_PARAM_BUCKET_REGION_DESCRIPTION = "Region"; + + String UI_PARAM_CREDENTIALS_PUB_KEY = "accessKeyId"; + String UI_PARAM_CREDENTIALS_PUB_KEY_DESCRIPTION = "AWS access key ID"; + + String UI_PARAM_CREDENTIALS_PRIVATE_KEY = "secretAccessKey"; + String UI_PARAM_CREDENTIALS_PRIVATE_KEY_DESCRIPTION = "AWS secret access key"; + + String UI_PARAM_CONTENT_PATHS = "content-paths"; + String UI_PARAM_CONTENT_PATHS_DESCRIPTION = "Artifacts path"; + + String UI_PARAM_EMPTY_BUCKET = "empty-bucket"; + String UI_PARAM_EMPTY_BUCKET_DESCRIPTION = "Empty bucket before upload"; + + String UI_PARAM_HTTP_PROXY = "http-proxy"; + String UI_PARAM_HTTP_PROXY_DESCRIPTION = "Http Proxy"; + + String UI_PARAM_HTTP_HEADERS_CACHE_CONTROL = "http-headers-cache-control"; + String UI_PARAM_HTTP_HEADERS_CACHE_CONTROL_DESCRIPTION = "Cache-Control"; + + String RUNNER_TYPE = "awsS3Plugin"; + String RUNNER_DESCRIPTION = "Runner for uploading content to Amazon S3"; + String RUNNER_DISPLAY_NAME = "Amazon S3 Uploader"; +} diff --git a/awsS3Plugin-server/pom.xml b/awsS3Plugin-server/pom.xml new file mode 100644 index 0000000..ae5d6f5 --- /dev/null +++ b/awsS3Plugin-server/pom.xml @@ -0,0 +1,57 @@ + + + 4.0.0 + + awsS3Plugin + com.dcn.teamcity.awsS3Plugin + 0.1.0 + + awsS3Plugin-server + jar + + + + com.dcn.teamcity.awsS3Plugin + awsS3Plugin-common + 0.1.0 + compile + + + + org.jetbrains.teamcity + server-api + ${teamcity-version} + provided + + + + org.jetbrains.teamcity + server-web-api + ${teamcity-version} + war + provided + + + + org.jetbrains.teamcity + tests-support + ${teamcity-version} + test + + + + org.testng + testng + ${testng-version} + test + + + + org.mockito + mockito-all + ${mockito-version} + + + + diff --git a/awsS3Plugin-server/server.iml b/awsS3Plugin-server/server.iml new file mode 100644 index 0000000..cd5de0c --- /dev/null +++ b/awsS3Plugin-server/server.iml @@ -0,0 +1,136 @@ + + + + + + + file://$MODULE_DIR$/src/main/resources/META-INF/build-server-plugin-awsS3Plugin.xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/awsS3Plugin-server/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3ParametersValidator.java b/awsS3Plugin-server/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3ParametersValidator.java new file mode 100644 index 0000000..132aa0b --- /dev/null +++ b/awsS3Plugin-server/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3ParametersValidator.java @@ -0,0 +1,67 @@ +package com.dcn.teamcity.awsS3Plugin; + +import com.intellij.openapi.util.text.StringUtil; +import jetbrains.buildServer.serverSide.InvalidProperty; +import jetbrains.buildServer.serverSide.PropertiesProcessor; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Map; + +/** + * Created by sg0216948 on 7/10/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AWSS3ParametersValidator implements PropertiesProcessor { + + public final String VALIDATOR_MISSING_VALUE_ERROR = "%s must be specified!"; + public final String VALIDATOR_INCORRECT_VALUE_ERROR = "Format is not valid!"; + + public Collection process(final Map properties) { + final Collection ret = new ArrayList(); + + if (StringUtil.isEmpty(properties.get(PluginConstants.UI_PARAM_BUCKET_NAME))) { + ret.add(new InvalidProperty(PluginConstants.UI_PARAM_BUCKET_NAME, + String.format(VALIDATOR_MISSING_VALUE_ERROR, PluginConstants.UI_PARAM_BUCKET_NAME_DESCRIPTION))); + } + + if (StringUtil.isEmpty(properties.get(PluginConstants.UI_PARAM_BUCKET_REGION))) { + ret.add(new InvalidProperty(PluginConstants.UI_PARAM_BUCKET_REGION, + String.format(VALIDATOR_MISSING_VALUE_ERROR, PluginConstants.UI_PARAM_BUCKET_REGION_DESCRIPTION))); + } + + if (StringUtil.isEmpty(properties.get(PluginConstants.UI_PARAM_CREDENTIALS_PUB_KEY))) { + ret.add(new InvalidProperty(PluginConstants.UI_PARAM_CREDENTIALS_PUB_KEY, + String.format(VALIDATOR_MISSING_VALUE_ERROR, PluginConstants.UI_PARAM_CREDENTIALS_PUB_KEY_DESCRIPTION))); + } + + if (StringUtil.isEmpty(properties.get(PluginConstants.UI_PARAM_CREDENTIALS_PRIVATE_KEY))) { + ret.add(new InvalidProperty(PluginConstants.UI_PARAM_CREDENTIALS_PRIVATE_KEY, + String.format(VALIDATOR_MISSING_VALUE_ERROR, PluginConstants.UI_PARAM_CREDENTIALS_PRIVATE_KEY_DESCRIPTION))); + } + + if (StringUtil.isEmpty(properties.get(PluginConstants.UI_PARAM_CONTENT_PATHS))) { + ret.add(new InvalidProperty(PluginConstants.UI_PARAM_CONTENT_PATHS, + String.format(VALIDATOR_MISSING_VALUE_ERROR, PluginConstants.UI_PARAM_CONTENT_PATHS_DESCRIPTION))); + } + + if (!StringUtil.isEmpty(properties.get(PluginConstants.UI_PARAM_HTTP_PROXY)) && + !isValidUrl(properties.get(PluginConstants.UI_PARAM_HTTP_PROXY))) { + ret.add(new InvalidProperty(PluginConstants.UI_PARAM_HTTP_PROXY, + VALIDATOR_INCORRECT_VALUE_ERROR)); + } + return ret; + } + + public boolean isValidUrl(String url) { + try { + new URL(url); + } catch (MalformedURLException mue) { + return false; + } + return true; + } +} diff --git a/awsS3Plugin-server/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3RunType.java b/awsS3Plugin-server/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3RunType.java new file mode 100644 index 0000000..990e4f6 --- /dev/null +++ b/awsS3Plugin-server/src/main/java/com/dcn/teamcity/awsS3Plugin/AWSS3RunType.java @@ -0,0 +1,88 @@ +package com.dcn.teamcity.awsS3Plugin; + +import jetbrains.buildServer.serverSide.PropertiesProcessor; +import jetbrains.buildServer.serverSide.RunType; +import jetbrains.buildServer.serverSide.RunTypeRegistry; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by Gonzalo do Carmo Norte on 7/9/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AWSS3RunType extends RunType { + + public AWSS3RunType(final RunTypeRegistry runTypeRegistry) { + runTypeRegistry.registerRunType(this); + } + + @Override + @Nullable + public PropertiesProcessor getRunnerPropertiesProcessor() { + return new AWSS3ParametersValidator(); + } + + @Override + public String getEditRunnerParamsJspFilePath() { + return "taskRunnerRunParams.jsp"; + } + + @Override + public String getViewRunnerParamsJspFilePath() { + return "viewTaskRunnerRunParams.jsp"; + } + + @Override + public Map getDefaultRunnerProperties() { + return new HashMap(); + } + + @NotNull + @Override + public String getDescription() { + return PluginConstants.RUNNER_DESCRIPTION; + } + + @NotNull + @Override + public String getDisplayName() { + return PluginConstants.RUNNER_DISPLAY_NAME; + } + + @NotNull + @Override + public String getType() { + return PluginConstants.RUNNER_TYPE; + } + + @NotNull + @Override + public String describeParameters(@NotNull final Map parameters) { + StringBuilder result = new StringBuilder(); + + final String BUCKET_NAME = parameters.get(PluginConstants.UI_PARAM_BUCKET_NAME); + final String BUCKET_REGION = parameters.get(PluginConstants.UI_PARAM_BUCKET_REGION); + final String CONTENT_PATHS = parameters.get(PluginConstants.UI_PARAM_CONTENT_PATHS); + + final String message = "Bucket: \"%s\" - %s: \"%s\"\n%s: %s"; + result.append(String.format(message, + BUCKET_NAME, + PluginConstants.UI_PARAM_BUCKET_REGION_DESCRIPTION, + BUCKET_REGION, + PluginConstants.UI_PARAM_CONTENT_PATHS_DESCRIPTION, + CONTENT_PATHS + )); + + return result.toString(); + } + + @Override + public String toString() { + return String.format("[AWSS3RunType] Type: %s", + this.getType()); + } +} \ No newline at end of file diff --git a/awsS3Plugin-server/src/main/resources/META-INF/build-server-plugin-awsS3Plugin.xml b/awsS3Plugin-server/src/main/resources/META-INF/build-server-plugin-awsS3Plugin.xml new file mode 100644 index 0000000..bbc8e3e --- /dev/null +++ b/awsS3Plugin-server/src/main/resources/META-INF/build-server-plugin-awsS3Plugin.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/awsS3Plugin-server/src/main/resources/buildServerResources/constants.jsp b/awsS3Plugin-server/src/main/resources/buildServerResources/constants.jsp new file mode 100644 index 0000000..9c418ea --- /dev/null +++ b/awsS3Plugin-server/src/main/resources/buildServerResources/constants.jsp @@ -0,0 +1,26 @@ +<%@ page import="com.dcn.teamcity.awsS3Plugin.PluginConstants" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/awsS3Plugin-server/src/main/resources/buildServerResources/taskRunnerRunParams.jsp b/awsS3Plugin-server/src/main/resources/buildServerResources/taskRunnerRunParams.jsp new file mode 100644 index 0000000..a32e2c6 --- /dev/null +++ b/awsS3Plugin-server/src/main/resources/buildServerResources/taskRunnerRunParams.jsp @@ -0,0 +1,144 @@ +<%@ taglib prefix="props" tagdir="/WEB-INF/tags/props" %> +<%@ taglib prefix="bs" tagdir="/WEB-INF/tags" %> +<%@ taglib prefix="l" tagdir="/WEB-INF/tags/layout" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + +<%@include file="constants.jsp" %> + + + + + + + + + + + + + + + + + + + + + E.g. 'us-east-1' or 'us-west-2'. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + New line or comma separated paths to build artifacts. + Ant-style wildcards like dir/**/*.zip and target directories like *.zip => winFiles,unix/distro.tgz => linuxFiles, where winFiles and linuxFiles are target directories are supported. + + + + + + + + + + + + + + + Select this option if the bucket content is required to be removed before upload + + + + + + + + + + + + Specify caching behavior. + + + +
+ E.g. 'max-age=21600' / 'public, max-age=604800'. +
+ + +
+ + + + + + + + + + + E.g. 'http://localhost:3128' or 'http://user:pass@www.domain.com:3128' or 'http://domain\user:pass@www.domain.com:3128' + + + + + diff --git a/awsS3Plugin-server/src/main/resources/buildServerResources/viewTaskRunnerRunParams.jsp b/awsS3Plugin-server/src/main/resources/buildServerResources/viewTaskRunnerRunParams.jsp new file mode 100644 index 0000000..1ea010c --- /dev/null +++ b/awsS3Plugin-server/src/main/resources/buildServerResources/viewTaskRunnerRunParams.jsp @@ -0,0 +1,42 @@ +<%@ taglib prefix="props" tagdir="/WEB-INF/tags/props" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + +<%@include file="constants.jsp" %> + +
+ Bucket : + +
+ +
+ Bucket : + +
+ +
+ : + +
+ +
+ : + +
+ +
+ : + + + + + + + + + + +
\ No newline at end of file diff --git a/awsS3Plugin-server/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3ParametersValidatorTest.java b/awsS3Plugin-server/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3ParametersValidatorTest.java new file mode 100644 index 0000000..59ff433 --- /dev/null +++ b/awsS3Plugin-server/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3ParametersValidatorTest.java @@ -0,0 +1,111 @@ +package com.dcn.teamcity.awsS3Plugin; + +import jetbrains.buildServer.serverSide.InvalidProperty; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertTrue; + + +/** + * Created by sg0216948 on 7/10/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AWSS3ParametersValidatorTest { + + private AWSS3ParametersValidator validator = null; + + @BeforeMethod + public void setUp() throws Exception { + validator = new AWSS3ParametersValidator(); + } + + @Test + public void testProcessWhenAllRequiredValuesMissing() throws Exception { + Map input = new HashMap(); + + Collection result = validator.process(input); + + assertEquals(result.size(), 5); + + ArrayList result_array = (ArrayList) result; + assertEquals(result_array.get(0).getPropertyName(), PluginConstants.UI_PARAM_BUCKET_NAME); + assertEquals(result_array.get(0).getInvalidReason(), String.format(validator.VALIDATOR_MISSING_VALUE_ERROR, PluginConstants.UI_PARAM_BUCKET_NAME_DESCRIPTION)); + + assertEquals(result_array.get(1).getPropertyName(), PluginConstants.UI_PARAM_BUCKET_REGION); + assertEquals(result_array.get(1).getInvalidReason(), String.format(validator.VALIDATOR_MISSING_VALUE_ERROR, PluginConstants.UI_PARAM_BUCKET_REGION_DESCRIPTION)); + + assertEquals(result_array.get(2).getPropertyName(), PluginConstants.UI_PARAM_CREDENTIALS_PUB_KEY); + assertEquals(result_array.get(2).getInvalidReason(), String.format(validator.VALIDATOR_MISSING_VALUE_ERROR, PluginConstants.UI_PARAM_CREDENTIALS_PUB_KEY_DESCRIPTION)); + + assertEquals(result_array.get(3).getPropertyName(), PluginConstants.UI_PARAM_CREDENTIALS_PRIVATE_KEY); + assertEquals(result_array.get(3).getInvalidReason(), String.format(validator.VALIDATOR_MISSING_VALUE_ERROR, PluginConstants.UI_PARAM_CREDENTIALS_PRIVATE_KEY_DESCRIPTION)); + + assertEquals(result_array.get(4).getPropertyName(), PluginConstants.UI_PARAM_CONTENT_PATHS); + assertEquals(result_array.get(4).getInvalidReason(), String.format(validator.VALIDATOR_MISSING_VALUE_ERROR, PluginConstants.UI_PARAM_CONTENT_PATHS_DESCRIPTION)); + } + + @Test + public void testProcessWhenSomeRequiredValuesMissing() throws Exception { + Map input = new HashMap(); + input.put(PluginConstants.UI_PARAM_BUCKET_NAME, "someValue"); + input.put(PluginConstants.UI_PARAM_CREDENTIALS_PUB_KEY, "someValue"); + + Collection result = validator.process(input); + + assertEquals(result.size(), 3); + + ArrayList result_array = (ArrayList) result; + assertEquals(result_array.get(0).getPropertyName(), PluginConstants.UI_PARAM_BUCKET_REGION); + assertEquals(result_array.get(1).getPropertyName(), PluginConstants.UI_PARAM_CREDENTIALS_PRIVATE_KEY); + assertEquals(result_array.get(2).getPropertyName(), PluginConstants.UI_PARAM_CONTENT_PATHS); + } + + @Test + public void testProcessWhenAllRequiredValuesProvided() throws Exception { + Map input = new HashMap(); + input.put(PluginConstants.UI_PARAM_BUCKET_NAME, "someValue"); + input.put(PluginConstants.UI_PARAM_BUCKET_REGION, "someValue"); + + input.put(PluginConstants.UI_PARAM_CREDENTIALS_PUB_KEY, "someValue"); + input.put(PluginConstants.UI_PARAM_CREDENTIALS_PRIVATE_KEY, "someValue"); + + input.put(PluginConstants.UI_PARAM_CONTENT_PATHS, "someValue"); + + Collection result = validator.process(input); + + assertEquals(result.size(), 0); + } + + @Test + public void testIsValidURL() throws Exception { + final String input1 = "http://localhost:3128"; + final String input2 = "https://www.domain.com:3128"; + final String input3 = "http://username:password@www.domain.com:3128"; + final String input4 = "https://domain\\username:password@www.domain.com:7001"; + + assertTrue(validator.isValidUrl(input1)); + assertTrue(validator.isValidUrl(input2)); + assertTrue(validator.isValidUrl(input3)); + assertTrue(validator.isValidUrl(input4)); + } + + @Test + public void testIsValidURLWrongFormat() throws Exception { + final String input1 = "://something"; + final String input2 = "something"; + final String input3 = "www.domain.com"; + + assertFalse(validator.isValidUrl(input1)); + assertFalse(validator.isValidUrl(input2)); + assertFalse(validator.isValidUrl(input3)); + } +} diff --git a/awsS3Plugin-server/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3RunTypeTest.java b/awsS3Plugin-server/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3RunTypeTest.java new file mode 100644 index 0000000..adab68f --- /dev/null +++ b/awsS3Plugin-server/src/test/java/com/dcn/teamcity/awsS3Plugin/AWSS3RunTypeTest.java @@ -0,0 +1,92 @@ +package com.dcn.teamcity.awsS3Plugin; + +import jetbrains.buildServer.serverSide.PropertiesProcessor; +import jetbrains.buildServer.serverSide.RunTypeRegistry; +import org.mockito.Mockito; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import java.util.HashMap; +import java.util.Map; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; + +/** + * Created by sg0216948 on 7/9/16. + * + * @author Gonzalo G. do Carmo Norte + */ +public class AWSS3RunTypeTest { + + private AWSS3RunType instance = null; + + @BeforeMethod + public void setUp() throws Exception { + RunTypeRegistry registryMock = Mockito.mock(RunTypeRegistry.class); + instance = new AWSS3RunType(registryMock); + } + + @Test + public void testGetRunnerPropertiesProcessor() throws Exception { + PropertiesProcessor result = instance.getRunnerPropertiesProcessor(); + assertTrue(result instanceof AWSS3ParametersValidator); + } + + @Test + public void testGetEditRunnerParamsJspFilePath() throws Exception { + final String result = instance.getEditRunnerParamsJspFilePath(); + assertEquals(result, "taskRunnerRunParams.jsp"); + } + + @Test + public void testGetViewRunnerParamsJspFilePath() throws Exception { + final String result = instance.getViewRunnerParamsJspFilePath(); + assertEquals(result, "viewTaskRunnerRunParams.jsp"); + } + + @Test + public void testGetDefaultRunnerProperties() throws Exception { + final Map result = instance.getDefaultRunnerProperties(); + assertEquals(result.size(), 0); + } + + @Test + public void testGetDescription() throws Exception { + final String result = instance.getDescription(); + assertEquals(result, PluginConstants.RUNNER_DESCRIPTION); + } + + @Test + public void testGetDisplayName() throws Exception { + final String result = instance.getDisplayName(); + assertEquals(result, PluginConstants.RUNNER_DISPLAY_NAME); + } + + @Test + public void testGetType() throws Exception { + final String result = instance.getType(); + assertEquals(result, PluginConstants.RUNNER_TYPE); + } + + @Test + public void testDescribeParameters() throws Exception { + final String BUCKET_NAME = "myBucketName"; + final String BUCKET_REGION = "my-bucket-region-9"; + final String KEY_PUB = "myPublicKey"; + final String KEY_PRIV = "myPrivateKey"; + final String CONTENT_PATHS = "src/index.html,src/assets/*"; + + Map parameters = new HashMap<>(); + parameters.put(PluginConstants.UI_PARAM_BUCKET_NAME, BUCKET_NAME); + parameters.put(PluginConstants.UI_PARAM_BUCKET_REGION, BUCKET_REGION); + parameters.put(PluginConstants.UI_PARAM_CREDENTIALS_PUB_KEY, KEY_PUB); + parameters.put(PluginConstants.UI_PARAM_CREDENTIALS_PRIVATE_KEY, KEY_PRIV); + parameters.put(PluginConstants.UI_PARAM_CONTENT_PATHS, CONTENT_PATHS); + + final String result = instance.describeParameters(parameters); + + assertEquals(result, "Bucket: \"" + BUCKET_NAME + "\" - Region: \"" + BUCKET_REGION + "\"\nArtifacts path: " + CONTENT_PATHS); + } + +} \ No newline at end of file diff --git a/awsS3Plugin.iml b/awsS3Plugin.iml new file mode 100644 index 0000000..b26c4d0 --- /dev/null +++ b/awsS3Plugin.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/build/build.iml b/build/build.iml new file mode 100644 index 0000000..21261aa --- /dev/null +++ b/build/build.iml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build/plugin-agent-assembly.xml b/build/plugin-agent-assembly.xml new file mode 100644 index 0000000..262e515 --- /dev/null +++ b/build/plugin-agent-assembly.xml @@ -0,0 +1,35 @@ + + + plugin-agent-assembly + false + + zip + + + + ../awsS3Plugin-agent/teamcity-plugin.xml + / + + + + + true + + com.dcn.teamcity.awsS3Plugin:awsS3Plugin-agent + com.dcn.teamcity.awsS3Plugin:awsS3Plugin-common + + + lib + false + + + + * + + + + + + + + diff --git a/build/plugin-assembly.xml b/build/plugin-assembly.xml new file mode 100644 index 0000000..239192e --- /dev/null +++ b/build/plugin-assembly.xml @@ -0,0 +1,38 @@ + + + plugin-assembly + false + + zip + + + + target/teamcity-plugin.xml + / + + + target/awsS3Plugin-agent.zip + agent + + + + + true + + com.dcn.teamcity.awsS3Plugin:awsS3Plugin-server + com.dcn.teamcity.awsS3Plugin:awsS3Plugin-common + + + server + false + + + + * + + + + + + + diff --git a/build/pom.xml b/build/pom.xml new file mode 100644 index 0000000..eb0b175 --- /dev/null +++ b/build/pom.xml @@ -0,0 +1,104 @@ + + + 4.0.0 + + awsS3Plugin + com.dcn.teamcity.awsS3Plugin + 0.1.0 + + build + pom + + yyyyMMddHHmmss + ${project.version} + Gonzalo do Carmo Norte + https://github.com/gonzadocarmo/teamcity-s3-plugin + + + + com.dcn.teamcity.awsS3Plugin + awsS3Plugin-agent + 0.1.0 + + + com.dcn.teamcity.awsS3Plugin + awsS3Plugin-common + 0.1.0 + + + com.dcn.teamcity.awsS3Plugin + awsS3Plugin-server + 0.1.0 + + + + + + com.google.code.maven-replacer-plugin + replacer + 1.5.2 + + + process-sources + + replace + + + + + ${basedir}/../teamcity-plugin.xml + ${basedir}/target/teamcity-plugin.xml + + + @Version@ + ${teamcity.awsS3Plugin.plugin.version} + + + @VendorName@ + ${teamcity.awsS3Plugin.plugin.vendorName} + + + @VendorURL@ + ${teamcity.awsS3Plugin.plugin.vendorUrl} + + + + + + maven-assembly-plugin + 2.4 + + + make-agent-assembly + package + + single + + + awsS3Plugin-agent + false + + plugin-agent-assembly.xml + + + + + make-assembly + package + + single + + + awsS3Plugin-${project.version} + ${project.parent.build.directory} + false + + plugin-assembly.xml + + + + + + + + diff --git a/docs/.DS_Store b/docs/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 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�FFp!(yR0p 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ℑgSCu8EjUKeI|hwy(?cSkL?QPKk@J&^ip) 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�$v(b(-dfApcLLq7rR#(kz;6Sy50%Pdyy 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

Oa)O^-s~w6Y%=FVVc`-Js(Ufpeci9Ri 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 literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..4251cf1 --- /dev/null +++ b/pom.xml @@ -0,0 +1,54 @@ + + + 4.0.0 + com.dcn.teamcity.awsS3Plugin + awsS3Plugin + 0.1.0 + pom + + 9.0.3 + 6.9.10 + 1.10.19 + + + + JetBrains + http://repository.jetbrains.com/all + + + + + JetBrains + http://repository.jetbrains.com/all + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.7 + 1.7 + + + + org.jetbrains.teamcity + teamcity-sdk-maven-plugin + RELEASE + + + + + + + + + awsS3Plugin-server + awsS3Plugin-agent + awsS3Plugin-common + build + + \ No newline at end of file diff --git a/teamcity-plugin.xml b/teamcity-plugin.xml new file mode 100644 index 0000000..39a95c1 --- /dev/null +++ b/teamcity-plugin.xml @@ -0,0 +1,17 @@ + + + + awsS3Plugin + awsS3Plugin + @Version@ + Uploads content to Amazon S3 buckets + https://github.com/gonzadocarmo/teamcity-s3-plugin + gonzalo.docarmo@gmail.com + + @VendorName@ + @VendorURL@ + Plugin vendor logo URL + + + +