aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2024-08-12 12:06:28 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2024-08-12 12:06:28 -0400
commiteb91fc8105a37bcb3d6b08fb773ed61622324683 (patch)
treeb4fddef11e5b3b75988e74d1beea92ded65d4724
parentc9b73913d4e4cc1eae2f54ba70c0d866a749e3af (diff)
downloadstasis-eb91fc8105a37bcb3d6b08fb773ed61622324683.tar.gz
Add test_artifactory.c to suite
-rw-r--r--tests/test_artifactory.c125
1 files changed, 125 insertions, 0 deletions
diff --git a/tests/test_artifactory.c b/tests/test_artifactory.c
new file mode 100644
index 0000000..ea9c8ab
--- /dev/null
+++ b/tests/test_artifactory.c
@@ -0,0 +1,125 @@
+#include "testing.h"
+
+struct JFRT_Auth gauth;
+struct JFRT_Auth gnoauth;
+struct Delivery ctx;
+const char *gbuild_name = "test_stasis_jf_build_collect_env";
+const char *gbuild_num = "1";
+
+// Delete a build
+// For now, I'm keeping these out of the core library.
+static int jfrog_cli_rt_build_delete(struct JFRT_Auth *auth, char *build_name, char *build_num) {
+ char cmd[STASIS_BUFSIZ];
+ memset(cmd, 0, sizeof(cmd));
+ snprintf(cmd, sizeof(cmd) - 1, "--build \"%s/%s\"", build_name, build_num);
+ return jfrog_cli(auth, "rt", "delete", cmd);
+}
+
+static int jfrog_cli_rt_delete(struct JFRT_Auth *auth, char *pattern) {
+ char cmd[STASIS_BUFSIZ];
+ memset(cmd, 0, sizeof(cmd));
+ snprintf(cmd, sizeof(cmd) - 1, "\"%s\"", pattern);
+ return jfrog_cli(auth, "rt", "delete", cmd);
+}
+
+void test_jfrog_cli_rt_ping() {
+ STASIS_ASSERT_FATAL(jfrog_cli_rt_ping(&gauth) == 0, "server ping failed.");
+ STASIS_ASSERT(jfrog_cli_rt_ping(&gnoauth) != 0, "server ping should have failed; auth context is empty.");
+}
+
+void test_jfrog_cli_rt_build_collect_publish() {
+ struct JFRT_Upload upload;
+ jfrt_upload_init(&upload);
+
+ char *filename = "empty_file.txt";
+ touch(filename);
+ upload.build_name = gbuild_name;
+ upload.build_number = gbuild_num;
+ STASIS_ASSERT(jfrog_cli_rt_upload(&gauth, &upload, filename, getenv("STASIS_JF_REPO")) == 0, "jf upload failed");
+ STASIS_ASSERT(jfrog_cli_rt_build_collect_env(&gauth, gbuild_name, gbuild_num) == 0, "jf environment collection failed");
+ STASIS_ASSERT(jfrog_cli_rt_build_publish(&gauth, gbuild_name, gbuild_num) == 0, "jf publish build failed");
+ STASIS_ASSERT(jfrog_cli_rt_build_delete(&gauth, gbuild_name, gbuild_num) == 0, "jf delete build failed");
+}
+
+void test_jfrog_cli_rt_upload() {
+ struct JFRT_Upload upload;
+ jfrt_upload_init(&upload);
+
+ char *filename = "empty_file_upload.txt";
+ touch(filename);
+ STASIS_ASSERT(jfrog_cli_rt_upload(&gauth, &upload, filename, getenv("STASIS_JF_REPO")) == 0, "jf upload failed");
+}
+
+void test_jfrog_cli_rt_download() {
+ struct JFRT_Download dl;
+ memset(&dl, 0, sizeof(dl));
+
+ char *filename = "empty_file_upload.txt";
+ char path[PATH_MAX] = {0};
+ sprintf(path, "%s/%s", getenv("STASIS_JF_REPO"), filename);
+ STASIS_ASSERT(jfrog_cli_rt_download(&gauth, &dl, filename, ".") == 0, "jf download failed");
+ STASIS_ASSERT(jfrog_cli_rt_delete(&gauth, path) == 0, "jf delete test artifact failed");
+}
+
+int main(int argc, char *argv[]) {
+ STASIS_TEST_BEGIN_MAIN();
+ memset(&gauth, 0, sizeof(gauth));
+ memset(&gnoauth, 0, sizeof(gnoauth));
+ memset(&ctx, 0, sizeof(ctx));
+
+ const char *basedir = realpath(".", NULL);
+ const char *ws = "workspace";
+ mkdir(ws, 0755);
+ if (pushd(ws)) {
+ SYSERROR("failed to change directory to %s", ws);
+ STASIS_ASSERT_FATAL(true, "workspace creation failed");
+ }
+
+ // enable messages from the jf tool
+ globals.verbose = true;
+
+ // create a limited delivery context
+ path_store(&ctx.storage.tools_dir, PATH_MAX, ".", "tools");
+ path_store(&ctx.storage.build_dir, PATH_MAX, ".", "build");
+ path_store(&ctx.storage.tmpdir, PATH_MAX, ".", "tmp");
+ const char *sysconfdir = getenv("STASIS_SYSCONFDIR");
+ if (!sysconfdir) {
+ sysconfdir = STASIS_SYSCONFDIR;
+ }
+
+ char path[PATH_MAX] = {0};
+ sprintf(path, "%s/bin:%s", ctx.storage.tools_dir, getenv("PATH"));
+ setenv("PATH", path, 1);
+
+ // The default config contains the URL information to download jfrog-cli
+ char cfg_path[PATH_MAX] = {0};
+ if (strstr(sysconfdir, "..")) {
+ sprintf(cfg_path, "%s/%s/stasis.ini", basedir, sysconfdir);
+ } else {
+ sprintf(cfg_path, "%s/stasis.ini", sysconfdir);
+ }
+ ctx._stasis_ini_fp.cfg = ini_open(cfg_path);
+ if (!ctx._stasis_ini_fp.cfg) {
+ SYSERROR("%s: configuration is invalid", cfg_path);
+ return STASIS_TEST_SUITE_SKIP;
+ }
+ delivery_init_platform(&ctx);
+ populate_delivery_cfg(&ctx, INI_READ_RENDER);
+ delivery_init_artifactory(&ctx);
+
+ // Skip this suite if we're not configured to use it
+ if (jfrt_auth_init(&gauth)) {
+ SYSERROR("%s", "Not configured to test Artifactory. Skipping.");
+ return STASIS_TEST_SUITE_SKIP;
+ }
+
+ STASIS_TEST_FUNC *tests[] = {
+ test_jfrog_cli_rt_ping,
+ test_jfrog_cli_rt_build_collect_publish,
+ test_jfrog_cli_rt_upload,
+ test_jfrog_cli_rt_download,
+ };
+ STASIS_TEST_RUN(tests);
+ popd();
+ STASIS_TEST_END_MAIN();
+} \ No newline at end of file