annotate seobeo/snapshot_creator.c @ 140:568bebb7f65c

creating debug bundle for testing remote server.
author June Park <parkjune1995@gmail.com>
date Fri, 09 Jan 2026 12:45:37 -0800
parents 7eb79fd91c7e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1 #include "seobeo/snapshot_creator.h"
126
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
2 #include "seobeo/seobeo_internal.h"
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
3 #include <stdio.h>
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
4 #include <stdlib.h>
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
5 #include <string.h>
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
6 #include <sys/stat.h>
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
7 #include <unistd.h>
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
8
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
9 static void path_to_filename(const char *path, char *filename, size_t max_len)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
10 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
11 if (strcmp(path, "/") == 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
12 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
13 snprintf(filename, max_len, "root.snapshot");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
14 return;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
15 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
16
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
17 const char *p = path;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
18 if (*p == '/')
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
19 p++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
20
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
21 char *out = filename;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
22 size_t remaining = max_len - 1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
23
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
24 while (*p && remaining > 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
25 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
26 if (*p == '/')
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
27 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
28 *out++ = '_';
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
29 remaining--;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
30 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
31 else
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
32 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
33 *out++ = *p;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
34 remaining--;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
35 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
36 p++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
37 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
38
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
39 snprintf(out, remaining, ".snapshot");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
40 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
41
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
42 // Helper: Create directory recursively
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
43 static int create_directory(const char *path)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
44 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
45 char tmp[1024];
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
46 char *p = NULL;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
47 size_t len;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
48
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
49 snprintf(tmp, sizeof(tmp), "%s", path);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
50 len = strlen(tmp);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
51 if (tmp[len - 1] == '/')
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
52 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
53 tmp[len - 1] = 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
54 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
55
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
56 for (p = tmp + 1; *p; p++)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
57 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
58 if (*p == '/')
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
59 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
60 *p = 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
61 mkdir(tmp, 0755);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
62 *p = '/';
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
63 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
64 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
65 return mkdir(tmp, 0755);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
66 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
67
126
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
68 // Helper: Build full HTTP response from Seobeo_Client_Response
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
69 static char* build_full_response(Seobeo_Client_Response *p_resp, size_t *len_out)
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
70 {
126
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
71 if (!p_resp)
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
72 return NULL;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
73
126
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
74 // Calculate total response size
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
75 size_t status_line_len = 100; // "HTTP/1.1 200 OK\r\n"
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
76 size_t headers_len = 0;
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
77 size_t body_len = p_resp->body_length;
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
78
126
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
79 // Estimate header size
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
80 if (p_resp->headers)
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
81 {
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
82 size_t header_count = Dowa_Array_Length(p_resp->headers);
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
83 for (size_t i = 0; i < header_count; i++)
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
84 {
126
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
85 headers_len += strlen(p_resp->headers[i].key) + strlen(p_resp->headers[i].value) + 4; // ": " + "\r\n"
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
86 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
87 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
88
126
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
89 size_t total_size = status_line_len + headers_len + 2 + body_len + 1; // +2 for "\r\n", +1 for null terminator
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
90 char *response = malloc(total_size);
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
91 if (!response)
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
92 return NULL;
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
93
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
94 // Build status line
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
95 int offset = snprintf(response, total_size, "HTTP/1.1 %d %s\r\n",
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
96 p_resp->status_code,
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
97 p_resp->status_text ? p_resp->status_text : "OK");
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
98
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
99 // Add headers
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
100 if (p_resp->headers)
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
101 {
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
102 size_t header_count = Dowa_Array_Length(p_resp->headers);
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
103 for (size_t i = 0; i < header_count; i++)
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
104 {
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
105 offset += snprintf(response + offset, total_size - offset, "%s: %s\r\n",
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
106 p_resp->headers[i].key,
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
107 p_resp->headers[i].value);
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
108 }
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
109 }
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
110
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
111 // End of headers
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
112 offset += snprintf(response + offset, total_size - offset, "\r\n");
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
113
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
114 // Add body
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
115 if (p_resp->body && body_len > 0)
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
116 {
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
117 memcpy(response + offset, p_resp->body, body_len);
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
118 offset += body_len;
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
119 }
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
120
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
121 response[offset] = '\0';
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
122 *len_out = offset;
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
123 return response;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
124 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
125
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
126 // Helper: Write snapshot to file
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
127 static int write_snapshot(const char *filepath, const char *data, size_t size)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
128 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
129 // Create directory if needed
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
130 char dir_copy[1024];
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
131 snprintf(dir_copy, sizeof(dir_copy), "%s", filepath);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
132
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
133 char *last_slash = strrchr(dir_copy, '/');
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
134 if (last_slash)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
135 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
136 *last_slash = '\0';
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
137 create_directory(dir_copy);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
138 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
139
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
140 FILE *f = fopen(filepath, "wb");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
141 if (!f)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
142 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
143 perror("fopen");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
144 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
145 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
146
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
147 size_t written = fwrite(data, 1, size, f);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
148 fclose(f);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
149
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
150 return (written == size) ? 0 : -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
151 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
152
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
153 int Seobeo_Snapshot_Create(const SnapshotConfig *config)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
154 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
155 if (!config || !config->path || !config->snapshot_dir || !config->host || !config->port)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
156 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
157 fprintf(stderr, "Invalid snapshot config\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
158 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
159 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
160
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
161 printf("Creating snapshot: %s (expecting %d)\n", config->path, config->expected_status);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
162
126
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
163 // Build URL
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
164 char url[2048];
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
165 snprintf(url, sizeof(url), "http://%s:%s%s", config->host, config->port, config->path);
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
166
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
167 // Create HTTP request
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
168 Seobeo_Client_Request *p_req = Seobeo_Client_Request_Create(url);
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
169 if (!p_req)
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
170 {
126
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
171 fprintf(stderr, " ✗ Failed to create request for %s\n", url);
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
172 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
173 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
174
126
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
175 // Execute request
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
176 Seobeo_Client_Response *p_resp = Seobeo_Client_Request_Execute(p_req);
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
177 if (!p_resp)
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
178 {
126
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
179 fprintf(stderr, " ✗ Failed to get response\n");
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
180 Seobeo_Client_Request_Destroy(p_req);
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
181 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
182 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
183
126
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
184 // Check status code
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
185 if (p_resp->status_code != config->expected_status)
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
186 {
126
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
187 fprintf(stderr, " ✗ Status mismatch: expected %d, got %d\n",
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
188 config->expected_status, p_resp->status_code);
128
7eb79fd91c7e [Misc] Fixed all bazel targets. I should creat a separate scripts for these lol.
June Park <parkjune1995@gmail.com>
parents: 126
diff changeset
189 // fprintf(stderr, "%s", p_resp->body);
126
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
190 Seobeo_Client_Response_Destroy(p_resp);
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
191 Seobeo_Client_Request_Destroy(p_req);
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
192 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
193 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
194
126
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
195 printf(" ✓ Status: %d\n", p_resp->status_code);
e7899c93da77 Remove playground.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
196
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
197 // Generate snapshot filename
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
198 char filename[256];
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
199 path_to_filename(config->path, filename, sizeof(filename));
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
200
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
201 char filepath[1024];
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
202 snprintf(filepath, sizeof(filepath), "%s/%s", config->snapshot_dir, filename);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
203
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
204 // Write snapshot
128
7eb79fd91c7e [Misc] Fixed all bazel targets. I should creat a separate scripts for these lol.
June Park <parkjune1995@gmail.com>
parents: 126
diff changeset
205 if (write_snapshot(filepath, p_resp->body, p_resp->body_length) == 0)
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
206 {
128
7eb79fd91c7e [Misc] Fixed all bazel targets. I should creat a separate scripts for these lol.
June Park <parkjune1995@gmail.com>
parents: 126
diff changeset
207 printf(" ✓ Snapshot saved: %s (%zu bytes)\n", filepath, p_resp->body_length);
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
208 return 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
209 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
210 else
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
211 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
212 fprintf(stderr, " ✗ Failed to write snapshot: %s\n", filepath);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
213 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
214 }
128
7eb79fd91c7e [Misc] Fixed all bazel targets. I should creat a separate scripts for these lol.
June Park <parkjune1995@gmail.com>
parents: 126
diff changeset
215
7eb79fd91c7e [Misc] Fixed all bazel targets. I should creat a separate scripts for these lol.
June Park <parkjune1995@gmail.com>
parents: 126
diff changeset
216 Seobeo_Client_Response_Destroy(p_resp);
7eb79fd91c7e [Misc] Fixed all bazel targets. I should creat a separate scripts for these lol.
June Park <parkjune1995@gmail.com>
parents: 126
diff changeset
217 Seobeo_Client_Request_Destroy(p_req);
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
218 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
219
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
220 int Seobeo_Snapshots_Create_Batch(const SnapshotConfig configs[], int count)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
221 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
222 int failed = 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
223 int passed = 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
224
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
225 for (int i = 0; i < count; i++)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
226 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
227 if (Seobeo_Snapshot_Create(&configs[i]) == 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
228 passed++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
229 else
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
230 failed++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
231 printf("\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
232 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
233
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
234 printf("=== Summary ===\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
235 printf("Created: %d\n", passed);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
236 printf("Failed: %d\n", failed);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
237
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
238 return (failed == 0) ? 0 : -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
239 }