Mercurial
annotate s3/tests/s3_uploader_test.c @ 198:008ca7780c8a
S3 upload got it to work.
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Sat, 14 Feb 2026 16:18:14 -0800 |
| parents | 83f16548ba41 |
| children |
| rev | line source |
|---|---|
|
196
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1 #include "s3/s3_uploader.h" |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3 #include <stdio.h> |
| 198 | 4 #include <stdlib.h> |
|
196
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
5 #include <string.h> |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
6 |
| 198 | 7 // Simple .env parser |
| 8 static char *parse_env_value(const char *env_content, const char *key) | |
| 9 { | |
| 10 const char *pos = strstr(env_content, key); | |
| 11 if (!pos) return NULL; | |
| 12 | |
| 13 pos += strlen(key); | |
| 14 if (*pos != '=') return NULL; | |
| 15 pos++; | |
| 16 | |
| 17 const char *end = pos; | |
| 18 while (*end && *end != '\n' && *end != '\r') end++; | |
| 19 | |
| 20 size_t len = end - pos; | |
| 21 char *value = malloc(len + 1); | |
| 22 memcpy(value, pos, len); | |
| 23 value[len] = '\0'; | |
| 24 return value; | |
| 25 } | |
| 26 | |
| 27 static char *load_file(const char *path) | |
| 28 { | |
| 29 FILE *f = fopen(path, "r"); | |
| 30 if (!f) return NULL; | |
| 31 | |
| 32 fseek(f, 0, SEEK_END); | |
| 33 long size = ftell(f); | |
| 34 fseek(f, 0, SEEK_SET); | |
| 35 | |
| 36 char *content = malloc(size + 1); | |
| 37 fread(content, 1, size, f); | |
| 38 content[size] = '\0'; | |
| 39 fclose(f); | |
| 40 return content; | |
| 41 } | |
|
196
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
42 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
43 int main(int argc, char **argv) |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
44 { |
| 198 | 45 // Try to load .env file - check multiple locations for bazel runfiles |
| 46 char *env_content = load_file(".env"); | |
| 47 if (!env_content) | |
| 48 { | |
| 49 env_content = load_file("zenbu/.env"); // bazel runfiles path | |
| 50 } | |
| 51 if (!env_content) | |
| 52 { | |
| 53 env_content = load_file("../.env"); | |
| 54 } | |
| 55 if (!env_content) | |
| 56 { | |
| 57 env_content = load_file("../../.env"); | |
| 58 } | |
|
196
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
59 |
| 198 | 60 char *access_key = NULL; |
| 61 char *secret_key = NULL; | |
| 62 | |
| 63 if (env_content) | |
|
196
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
64 { |
| 198 | 65 access_key = parse_env_value(env_content, "AWS_MRJUNEJUNE_ACCESS_KEY"); |
| 66 secret_key = parse_env_value(env_content, "AWS_MRJUNEJUNE_SECRET_ACCESS_KEY"); | |
| 67 free(env_content); | |
| 68 } | |
| 69 | |
| 70 // Fall back to environment variables | |
| 71 if (!access_key) access_key = getenv("AWS_ACCESS_KEY_ID") ? strdup(getenv("AWS_ACCESS_KEY_ID")) : NULL; | |
| 72 if (!secret_key) secret_key = getenv("AWS_SECRET_ACCESS_KEY") ? strdup(getenv("AWS_SECRET_ACCESS_KEY")) : NULL; | |
| 73 | |
| 74 if (!access_key || !secret_key) | |
| 75 { | |
| 76 printf("Missing credentials. Set in .env file or environment:\n"); | |
| 77 printf(" AWS_MRJUNEJUNE_ACCESS_KEY / AWS_ACCESS_KEY_ID\n"); | |
| 78 printf(" AWS_MRJUNEJUNE_SECRET_ACCESS_KEY / AWS_SECRET_ACCESS_KEY\n"); | |
|
196
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
79 return 1; |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
80 } |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
81 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
82 S3_Config config = { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
83 .access_key_id = access_key, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
84 .secret_access_key = secret_key, |
| 198 | 85 .region = "us-west-2", |
| 86 .bucket = "mrjunejune", | |
|
196
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
87 .endpoint = NULL, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
88 .use_path_style = FALSE |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
89 }; |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
90 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
91 printf("S3 Uploader Test\n"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
92 printf("================\n"); |
| 198 | 93 printf("Region: %s\n", config.region); |
| 94 printf("Bucket: %s\n", config.bucket); | |
|
196
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
95 printf("\n"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
96 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
97 // Test 1: Upload string data |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
98 printf("Test 1: Uploading string data...\n"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
99 const char *test_data = "Hello from S3 uploader test!"; |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
100 S3_Result result = S3_Upload_Data(&config, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
101 (const uint8 *)test_data, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
102 strlen(test_data), |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
103 "test/hello.txt", |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
104 "text/plain"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
105 if (result.success) |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
106 { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
107 printf(" SUCCESS! ETag: %s\n", result.etag ? result.etag : "(none)"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
108 } |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
109 else |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
110 { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
111 printf(" FAILED! Status: %d, Error: %s\n", |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
112 result.status_code, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
113 result.error_message ? result.error_message : "(unknown)"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
114 } |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
115 S3_Result_Destroy(&result); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
116 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
117 // Test 2: Content type detection |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
118 printf("\nTest 2: Content type detection...\n"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
119 printf(" .html -> %s\n", S3_Guess_Content_Type("page.html")); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
120 printf(" .png -> %s\n", S3_Guess_Content_Type("image.png")); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
121 printf(" .json -> %s\n", S3_Guess_Content_Type("data.json")); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
122 printf(" .xyz -> %s\n", S3_Guess_Content_Type("unknown.xyz")); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
123 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
124 // Test 3: Generate presigned PUT URL |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
125 printf("\nTest 3: Generating presigned PUT URL...\n"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
126 S3_Presigned_URL put_url = S3_Presign_Put(&config, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
127 "uploads/client-upload.png", |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
128 "image/png", |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
129 3600); // 1 hour |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
130 if (put_url.success) |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
131 { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
132 printf(" SUCCESS!\n"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
133 printf(" URL: %s\n", put_url.url); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
134 printf("\n Client can upload with:\n"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
135 printf(" curl -X PUT -H \"Content-Type: image/png\" --data-binary @file.png \"$URL\"\n"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
136 } |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
137 else |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
138 { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
139 printf(" FAILED! Error: %s\n", put_url.error_message ? put_url.error_message : "(unknown)"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
140 } |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
141 S3_Presigned_URL_Destroy(&put_url); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
142 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
143 // Test 4: Generate presigned GET URL |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
144 printf("\nTest 4: Generating presigned GET URL...\n"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
145 S3_Presigned_URL get_url = S3_Presign_Get(&config, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
146 "uploads/client-upload.png", |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
147 3600); // 1 hour |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
148 if (get_url.success) |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
149 { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
150 printf(" SUCCESS!\n"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
151 printf(" URL: %s\n", get_url.url); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
152 printf("\n Client can download with:\n"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
153 printf(" curl \"$URL\" -o file.png\n"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
154 } |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
155 else |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
156 { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
157 printf(" FAILED! Error: %s\n", get_url.error_message ? get_url.error_message : "(unknown)"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
158 } |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
159 S3_Presigned_URL_Destroy(&get_url); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
160 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
161 // Test 5: Upload file (if provided as argument) |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
162 if (argc >= 3) |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
163 { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
164 printf("\nTest 5: Uploading file...\n"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
165 printf(" Local: %s\n", argv[1]); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
166 printf(" S3 Key: %s\n", argv[2]); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
167 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
168 result = S3_Upload_File(&config, argv[1], argv[2]); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
169 if (result.success) |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
170 { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
171 printf(" SUCCESS! ETag: %s\n", result.etag ? result.etag : "(none)"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
172 } |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
173 else |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
174 { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
175 printf(" FAILED! Status: %d, Error: %s\n", |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
176 result.status_code, |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
177 result.error_message ? result.error_message : "(unknown)"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
178 } |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
179 S3_Result_Destroy(&result); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
180 } |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
181 else |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
182 { |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
183 printf("\nTest 5: Skipped (no file path provided)\n"); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
184 printf(" Usage: %s <local_file> <s3_key>\n", argv[0]); |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
185 } |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
186 |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
187 printf("\nDone!\n"); |
| 198 | 188 |
| 189 free(access_key); | |
| 190 free(secret_key); | |
|
196
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
191 return 0; |
|
83f16548ba41
[AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
192 } |