1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
#include "testing.h"
#include "artifactory.h"
#include "delivery.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));
char *basedir = realpath(".", NULL);
const char *ws = "workspace";
mkdir(ws, 0755);
if (pushd(ws)) {
SYSERROR("failed to change directory to %s", ws);
guard_free(basedir);
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);
guard_free(basedir);
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;
}
guard_free(basedir);
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();
}
|