annotate s3/tests/s3_uploader_test.c @ 279:b3b547563ec7

Add Google connector service and agent wiki Implement the C/Seobeo Google Drive and Gmail connector with encrypted OAuth storage, Zenbu authentication, browser testing, AI tool discovery, chunked HTTP decoding, and Bazel coverage. Consolidate repository guidance into progressive wiki documentation and enforce arena-first allocation for new first-party C code. Co-authored-by: Copilot <[email protected]> Copilot-Session: 84c338fd-0939-4bb3-b7f3-1062eb213e5d
author MrJuneJune <me@mrjunejune.com>
date Mon, 17 Aug 2026 22:22:36 -0700
parents 008ca7780c8a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
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
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
7 // Simple .env parser
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
8 static char *parse_env_value(const char *env_content, const char *key)
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
9 {
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
10 const char *pos = strstr(env_content, key);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
11 if (!pos) return NULL;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
12
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
13 pos += strlen(key);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
14 if (*pos != '=') return NULL;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
15 pos++;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
16
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
17 const char *end = pos;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
18 while (*end && *end != '\n' && *end != '\r') end++;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
19
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
20 size_t len = end - pos;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
21 char *value = malloc(len + 1);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
22 memcpy(value, pos, len);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
23 value[len] = '\0';
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
24 return value;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
25 }
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
26
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
27 static char *load_file(const char *path)
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
28 {
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
29 FILE *f = fopen(path, "r");
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
30 if (!f) return NULL;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
31
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
32 fseek(f, 0, SEEK_END);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
33 long size = ftell(f);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
34 fseek(f, 0, SEEK_SET);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
35
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
36 char *content = malloc(size + 1);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
37 fread(content, 1, size, f);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
38 content[size] = '\0';
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
39 fclose(f);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
40 return content;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
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
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
45 // Try to load .env file - check multiple locations for bazel runfiles
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
46 char *env_content = load_file(".env");
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
47 if (!env_content)
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
48 {
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
49 env_content = load_file("zenbu/.env"); // bazel runfiles path
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
50 }
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
51 if (!env_content)
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
52 {
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
53 env_content = load_file("../.env");
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
54 }
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
55 if (!env_content)
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
56 {
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
57 env_content = load_file("../../.env");
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
58 }
196
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
59
198
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
60 char *access_key = NULL;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
61 char *secret_key = NULL;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
62
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
63 if (env_content)
196
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
64 {
198
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
65 access_key = parse_env_value(env_content, "AWS_MRJUNEJUNE_ACCESS_KEY");
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
66 secret_key = parse_env_value(env_content, "AWS_MRJUNEJUNE_SECRET_ACCESS_KEY");
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
67 free(env_content);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
68 }
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
69
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
70 // Fall back to environment variables
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
71 if (!access_key) access_key = getenv("AWS_ACCESS_KEY_ID") ? strdup(getenv("AWS_ACCESS_KEY_ID")) : NULL;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
72 if (!secret_key) secret_key = getenv("AWS_SECRET_ACCESS_KEY") ? strdup(getenv("AWS_SECRET_ACCESS_KEY")) : NULL;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
73
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
74 if (!access_key || !secret_key)
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
75 {
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
76 printf("Missing credentials. Set in .env file or environment:\n");
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
77 printf(" AWS_MRJUNEJUNE_ACCESS_KEY / AWS_ACCESS_KEY_ID\n");
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
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
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
85 .region = "us-west-2",
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
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
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
93 printf("Region: %s\n", config.region);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
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
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
188
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
189 free(access_key);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
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 }