annotate mrjunejune/test/integration_test.c @ 118:249881ceff7b

[PostDog] Updated some core logic. Will create a bookmark for postdog until the launch as this is annoying to deal with.
author June Park <parkjune1995@gmail.com>
date Wed, 07 Jan 2026 13:24:38 -0800
parents 092afa595764
children 96628cf126a0
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/seobeo.h"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2 #include <stdio.h>
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
3 #include <stdlib.h>
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
4 #include <string.h>
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
5 #include <unistd.h>
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
6 #include <sys/wait.h>
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
7 #include <signal.h>
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
8 #include <assert.h>
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
9
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
10 #define TEST_PORT "6969"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
11 #define TEST_HOST "127.0.0.1"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
12 #define MAX_RESPONSE_SIZE (1024 * 1024)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
13 #define SNAPSHOT_DIR "mrjunejune/test/snapshots"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
14
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
15 // Test case structure
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
16 typedef struct {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
17 const char *path;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
18 int expected_status;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
19 const char *expected_content; // Loaded from file
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
20 char *expected_file_path; // Path to expected snapshot file
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
21 char *actual_response;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
22 size_t response_len;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
23 } TestCase;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
24
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
25 // Helper: Convert URL path to filename
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
26 // "/" -> "root.snapshot"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
27 // "/index.html" -> "index.html.snapshot"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
28 // "/api/users" -> "api_users.snapshot"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
29 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
30 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
31 if (strcmp(path, "/") == 0)
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 snprintf(filename, max_len, "root.snapshot");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
34 return;
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
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
37 // Remove leading slash and convert remaining slashes to underscores
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
38 const char *p = path;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
39 if (*p == '/')
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 p++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
42 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
43
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
44 char *out = filename;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
45 size_t remaining = max_len - 1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
46
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
47 while (*p && remaining > 0)
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 if (*p == '/')
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
50 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
51 *out++ = '_';
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
52 remaining--;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
53 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
54 else
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 *out++ = *p;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
57 remaining--;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
58 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
59 p++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
60 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
61
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
62 // Add .snapshot extension
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
63 snprintf(out, remaining, ".snapshot");
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
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
66 // Helper: Read file contents into buffer
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
67 char* read_file(const char *filepath, size_t *size_out)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
68 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
69 FILE *f = fopen(filepath, "rb");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
70 if (!f)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
71 {
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 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
74
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
75 fseek(f, 0, SEEK_END);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
76 long fsize = ftell(f);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
77 fseek(f, 0, SEEK_SET);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
78
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
79 char *buffer = malloc(fsize + 1);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
80 if (!buffer)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
81 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
82 fclose(f);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
83 return NULL;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
84 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
85
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
86 size_t read_size = fread(buffer, 1, fsize, f);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
87 buffer[read_size] = '\0';
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
88 fclose(f);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
89
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
90 if (size_out)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
91 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
92 *size_out = read_size;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
93 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
94
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
95 return buffer;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
96 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
97
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
98 // Helper: Load expected content for a test case
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
99 int load_expected_content(TestCase *test)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
100 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
101 if (!test->expected_file_path)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
102 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
103 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
104 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
105
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
106 size_t size;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
107 test->expected_content = read_file(test->expected_file_path, &size);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
108
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
109 if (!test->expected_content)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
110 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
111 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
112 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
113
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
114 return 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
115 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
116
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
117 // Helper: Create test client
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
118 Seobeo_Handle* create_test_client()
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
119 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
120 Seobeo_Handle *client = Seobeo_Stream_Handle_Client_Create(TEST_HOST, TEST_PORT, FALSE);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
121 if (!client || client->socket < 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
122 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
123 if (client)
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 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
126 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
127 return NULL;
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 return client;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
130 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
131
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
132 // Helper: Generate default HTTP GET request
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
133 int generate_http_get_request(char *buffer, size_t buffer_size, const char *path)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
134 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
135 return snprintf(
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
136 buffer, buffer_size,
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
137 "GET %s HTTP/1.1\r\n"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
138 "Host: %s\r\n"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
139 "Connection: close\r\n"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
140 "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
141 "User-Agent: SeobeoTestClient/1.0\r\n"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
142 "\r\n",
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
143 path, TEST_HOST
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
144 );
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 // Helper: Send HTTP request
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
148 int send_http_request(Seobeo_Handle *client, const char *path, const char *custom_request)
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 char request_buffer[4096];
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
151 int request_len;
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 if (custom_request)
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 request_len = snprintf(request_buffer, sizeof(request_buffer), "%s", custom_request);
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 else
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
158 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
159 request_len = generate_http_get_request(request_buffer, sizeof(request_buffer), path);
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
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
162 if (request_len < 0 || request_len >= sizeof(request_buffer))
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
163 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
164 fprintf(stderr, "Request buffer too small\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
165 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
166 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
167
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
168 Seobeo_Handle_Queue(client, (uint8*)request_buffer, (uint32)request_len);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
169 return Seobeo_Handle_Flush(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
170 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
171
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
172 // Helper: Read HTTP response
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
173 int read_http_response(Seobeo_Handle *client, char **response_out, size_t *response_len_out)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
174 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
175 char *response = malloc(MAX_RESPONSE_SIZE);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
176 if (!response)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
177 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
178 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
179 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
180
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
181 size_t total_bytes = 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
182 int attempts = 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
183 const int max_attempts = 100;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
184
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
185 while (attempts++ < max_attempts && total_bytes < MAX_RESPONSE_SIZE - 1)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
186 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
187 int bytes_read = Seobeo_Handle_Read(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
188
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
189 if (bytes_read > 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
190 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
191 size_t to_copy = client->read_buffer_len;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
192 if (total_bytes + to_copy > MAX_RESPONSE_SIZE - 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 to_copy = MAX_RESPONSE_SIZE - 1 - total_bytes;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
195 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
196
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
197 memcpy(response + total_bytes, client->read_buffer, to_copy);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
198 total_bytes += to_copy;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
199 Seobeo_Handle_Consume(client, (uint32)to_copy);
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 else if (bytes_read == -2)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
202 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
203 // Connection closed
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
204 break;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
205 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
206 else if (bytes_read == 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
207 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
208 // Would block
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
209 usleep(10000);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
210 continue;
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 else
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
213 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
214 free(response);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
215 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
216 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
217 }
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 response[total_bytes] = '\0';
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
220 *response_out = response;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
221 *response_len_out = total_bytes;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
222
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
223 return (total_bytes > 0) ? 0 : -1;
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
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
226 // Helper: Parse HTTP status code
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
227 int parse_http_status(const char *response)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
228 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
229 if (!response || strlen(response) < 12)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
230 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
231 return -1;
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 const char *status_start = strstr(response, "HTTP/1.1 ");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
235 if (!status_start)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
236 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
237 status_start = strstr(response, "HTTP/1.0 ");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
238 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
239
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
240 if (!status_start)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
241 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
242 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
243 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
244
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
245 int status_code;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
246 if (sscanf(status_start + 9, "%d", &status_code) == 1)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
247 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
248 return status_code;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
249 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
250
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
251 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
252 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
253
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
254 // Helper: Check if status is a redirect
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
255 int is_redirect_status(int status)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
256 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
257 return (status >= 300 && status < 400);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
258 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
259
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
260 // Helper: Execute a test case
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
261 int execute_test_case(TestCase *test, pid_t server_pid)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
262 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
263 printf(" Testing: GET %s (expecting %d)\n", test->path, test->expected_status);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
264
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
265 Seobeo_Handle *client = create_test_client();
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
266 if (!client)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
267 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
268 printf(" ✗ Failed to create client connection\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
269 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
270 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
271
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
272 if (send_http_request(client, test->path, NULL) < 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
273 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
274 printf(" ✗ Failed to send request\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
275 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
276 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
277 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
278
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
279 char *response = NULL;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
280 size_t response_len = 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
281 if (read_http_response(client, &response, &response_len) < 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
282 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
283 printf(" ✗ Failed to read response\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
284 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
285 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
286 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
287
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
288 test->actual_response = response;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
289 test->response_len = response_len;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
290
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
291 int actual_status = parse_http_status(response);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
292 if (actual_status != test->expected_status)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
293 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
294 printf(" ✗ Status mismatch: expected %d, got %d\n",
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
295 test->expected_status, actual_status);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
296 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
297 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
298 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
299
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
300 printf(" ✓ Status code: %d\n", actual_status);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
301
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
302 // For redirects, skip content comparison
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
303 if (is_redirect_status(actual_status))
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
304 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
305 printf(" ⚠ Redirect status - skipping content comparison\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
306 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
307 return 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
308 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
309
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
310 // Only verify 200 OK responses against snapshots
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
311 if (actual_status == 200)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
312 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
313 if (!test->expected_content)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
314 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
315 printf(" ✗ No expected snapshot found: %s\n", test->expected_file_path);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
316 printf(" → Run: bazel run //mrjunejune:create_snapshots\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
317 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
318 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
319 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
320
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
321 if (strcmp(response, test->expected_content) != 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
322 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
323 printf(" ✗ Response does not match expected snapshot\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
324 printf(" Expected file: %s\n", test->expected_file_path);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
325 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
326 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
327 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
328
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
329 printf(" ✓ Response matches snapshot (%zu bytes)\n", response_len);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
330 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
331
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
332 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
333 return 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
334 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
335
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
336 // Helper: Execute custom request test
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
337 int execute_custom_request_test(const char *name, const char *custom_request,
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
338 int expected_status, pid_t server_pid)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
339 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
340 printf(" Testing: %s (expecting %d)\n", name, expected_status);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
341
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
342 Seobeo_Handle *client = create_test_client();
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
343 if (!client)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
344 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
345 printf(" ✗ Failed to create client connection\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
346 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
347 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
348
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
349 if (send_http_request(client, NULL, custom_request) < 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
350 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
351 printf(" ✗ Failed to send request\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
352 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
353 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
354 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
355
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
356 char *response = NULL;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
357 size_t response_len = 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
358 if (read_http_response(client, &response, &response_len) < 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
359 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
360 printf(" ✗ Failed to read response\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
361 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
362 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
363 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
364
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
365 int actual_status = parse_http_status(response);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
366 if (actual_status != expected_status)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
367 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
368 printf(" ✗ Status mismatch: expected %d, got %d\n",
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
369 expected_status, actual_status);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
370 free(response);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
371 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
372 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
373 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
374
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
375 printf(" ✓ Status code: %d\n", actual_status);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
376 printf(" ✓ Response received (%zu bytes)\n", response_len);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
377
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
378 free(response);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
379 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
380 return 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
381 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
382
94
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
383 // Helper: Send POST request with file data
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
384 int send_post_file(Seobeo_Handle *client, const char *path, const char *file_data, size_t file_size)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
385 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
386 char request_buffer[8192];
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
387 int header_len = snprintf(
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
388 request_buffer, sizeof(request_buffer),
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
389 "POST %s HTTP/1.1\r\n"
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
390 "Host: %s\r\n"
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
391 "Content-Type: application/octet-stream\r\n"
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
392 "Content-Length: %zu\r\n"
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
393 "Connection: close\r\n"
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
394 "\r\n",
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
395 path, TEST_HOST, file_size
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
396 );
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
397
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
398 if (header_len < 0 || header_len >= sizeof(request_buffer))
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
399 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
400 fprintf(stderr, "Request header too large\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
401 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
402 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
403
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
404 // Send headers
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
405 Seobeo_Handle_Queue(client, (uint8*)request_buffer, (uint32)header_len);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
406
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
407 // Send file data in chunks if needed
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
408 size_t remaining = file_size;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
409 const char *ptr = file_data;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
410 while (remaining > 0)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
411 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
412 size_t chunk_size = remaining > 4096 ? 4096 : remaining;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
413 Seobeo_Handle_Queue(client, (uint8*)ptr, (uint32)chunk_size);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
414 ptr += chunk_size;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
415 remaining -= chunk_size;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
416 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
417
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
418 return Seobeo_Handle_Flush(client);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
419 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
420
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
421 // Helper: Extract JSON field value from response body
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
422 char* extract_json_field(const char *json, const char *field, char *buffer, size_t buffer_size)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
423 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
424 char search_pattern[256];
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
425 snprintf(search_pattern, sizeof(search_pattern), "\"%s\":\"", field);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
426
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
427 const char *start = strstr(json, search_pattern);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
428 if (!start)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
429 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
430 return NULL;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
431 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
432
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
433 start += strlen(search_pattern);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
434 const char *end = strchr(start, '"');
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
435 if (!end)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
436 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
437 return NULL;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
438 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
439
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
440 size_t len = end - start;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
441 if (len >= buffer_size)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
442 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
443 len = buffer_size - 1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
444 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
445
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
446 memcpy(buffer, start, len);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
447 buffer[len] = '\0';
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
448
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
449 return buffer;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
450 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
451
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
452 // Helper: Test POST file conversion
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
453 int test_file_conversion(const char *endpoint, const char *test_file_path,
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
454 const char *expected_format, pid_t server_pid)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
455 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
456 printf(" Testing: POST %s\n", endpoint);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
457
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
458 // Read test file
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
459 size_t file_size;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
460 char *file_data = read_file(test_file_path, &file_size);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
461 if (!file_data)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
462 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
463 printf(" ✗ Failed to read test file: %s\n", test_file_path);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
464 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
465 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
466
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
467 printf(" → Loaded test file (%zu bytes)\n", file_size);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
468
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
469 // Create client and send request
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
470 Seobeo_Handle *client = create_test_client();
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
471 if (!client)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
472 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
473 printf(" ✗ Failed to create client connection\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
474 free(file_data);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
475 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
476 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
477
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
478 if (send_post_file(client, endpoint, file_data, file_size) < 0)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
479 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
480 printf(" ✗ Failed to send POST request\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
481 free(file_data);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
482 Seobeo_Handle_Destroy(client);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
483 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
484 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
485
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
486 free(file_data);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
487
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
488 // Read response
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
489 char *response = NULL;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
490 size_t response_len = 0;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
491 if (read_http_response(client, &response, &response_len) < 0)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
492 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
493 printf(" ✗ Failed to read response\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
494 Seobeo_Handle_Destroy(client);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
495 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
496 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
497
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
498 Seobeo_Handle_Destroy(client);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
499
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
500 // Parse status
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
501 int status = parse_http_status(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
502 if (status != 200)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
503 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
504 printf(" ✗ Conversion failed with status: %d\n", status);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
505 printf(" Response: %s\n", response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
506 free(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
507 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
508 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
509
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
510 printf(" ✓ Status code: 200\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
511
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
512 // Extract download URL from JSON response
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
513 const char *body = strstr(response, "\r\n\r\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
514 if (!body)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
515 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
516 printf(" ✗ No response body found\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
517 free(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
518 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
519 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
520 body += 4;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
521
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
522 char download_url[512];
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
523 if (!extract_json_field(body, "download_url", download_url, sizeof(download_url)))
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
524 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
525 printf(" ✗ Failed to extract download_url from response\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
526 printf(" Response body: %s\n", body);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
527 free(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
528 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
529 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
530
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
531 printf(" ✓ Conversion succeeded\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
532 printf(" ✓ Download URL: %s\n", download_url);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
533 free(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
534
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
535 // Test downloading the converted file
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
536 printf(" → Testing download: GET %s\n", download_url);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
537
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
538 client = create_test_client();
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
539 if (!client)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
540 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
541 printf(" ✗ Failed to create client for download\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
542 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
543 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
544
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
545 if (send_http_request(client, download_url, NULL) < 0)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
546 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
547 printf(" ✗ Failed to send download request\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
548 Seobeo_Handle_Destroy(client);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
549 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
550 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
551
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
552 response = NULL;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
553 response_len = 0;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
554 if (read_http_response(client, &response, &response_len) < 0)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
555 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
556 printf(" ✗ Failed to read download response\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
557 Seobeo_Handle_Destroy(client);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
558 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
559 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
560
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
561 Seobeo_Handle_Destroy(client);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
562
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
563 status = parse_http_status(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
564 if (status != 200)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
565 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
566 printf(" ✗ Download failed with status: %d\n", status);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
567 free(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
568 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
569 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
570
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
571 // Find body in download response
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
572 body = strstr(response, "\r\n\r\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
573 if (!body)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
574 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
575 printf(" ✗ No file data in download response\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
576 free(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
577 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
578 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
579 body += 4;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
580
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
581 size_t downloaded_size = response_len - (body - response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
582
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
583 // Verify content type in response headers
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
584 const char *content_type = strstr(response, "Content-Type: ");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
585 if (!content_type)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
586 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
587 printf(" ✗ No Content-Type header in download\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
588 free(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
589 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
590 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
591
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
592 if (strstr(content_type, expected_format) == NULL)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
593 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
594 printf(" ✗ Wrong content type (expected %s)\n", expected_format);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
595 free(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
596 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
597 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
598
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
599 printf(" ✓ Downloaded converted file (%zu bytes)\n", downloaded_size);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
600 printf(" ✓ Content-Type: %s\n", expected_format);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
601
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
602 free(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
603 return 0;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
604 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
605
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
606 // Helper: Start test server
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
607 pid_t start_test_server(const char *server_binary)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
608 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
609 pid_t server_pid = fork();
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
610
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
611 if (server_pid < 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
612 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
613 perror("fork");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
614 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
615 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
616
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
617 if (server_pid == 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
618 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
619 printf("Starting server on port %s...\n", TEST_PORT);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
620 execl(server_binary, server_binary, NULL);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
621 perror("execl failed");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
622 exit(1);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
623 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
624
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
625 printf("Server started (PID: %d)\n", server_pid);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
626
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
627 usleep(100000);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
628 int status;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
629 pid_t result = waitpid(server_pid, &status, WNOHANG);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
630 if (result != 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
631 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
632 if (WIFEXITED(status))
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
633 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
634 fprintf(stderr, "Server exited immediately with code: %d\n", WEXITSTATUS(status));
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
635 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
636 else if (WIFSIGNALED(status))
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
637 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
638 fprintf(stderr, "Server was killed by signal: %d\n", WTERMSIG(status));
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
639 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
640 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
641 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
642
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
643 sleep(2);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
644 printf("Server ready\n\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
645
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
646 return server_pid;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
647 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
648
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
649 // Helper: Stop test server
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
650 void stop_test_server(pid_t server_pid)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
651 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
652 if (server_pid > 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
653 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
654 printf("\nStopping server (PID: %d)...\n", server_pid);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
655 kill(server_pid, SIGTERM);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
656 waitpid(server_pid, NULL, 0);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
657 printf("Server stopped\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
658 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
659 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
660
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
661 // Helper: Initialize test case with snapshot file
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
662 void init_test_case(TestCase *test)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
663 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
664 char filename[256];
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
665 path_to_filename(test->path, filename, sizeof(filename));
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
666
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
667 test->expected_file_path = malloc(512);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
668 snprintf(test->expected_file_path, 512, "%s/%s", SNAPSHOT_DIR, filename);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
669
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
670 // Load expected content from snapshot file
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
671 load_expected_content(test);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
672 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
673
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
674 // Helper: Cleanup test case
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
675 void cleanup_test_case(TestCase *test)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
676 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
677 if (test->actual_response)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
678 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
679 free(test->actual_response);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
680 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
681 if (test->expected_file_path)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
682 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
683 free(test->expected_file_path);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
684 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
685 if (test->expected_content)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
686 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
687 free((void*)test->expected_content);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
688 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
689 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
690
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
691 // Main integration test
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
692 int test_server_client_integration(const char *server_binary)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
693 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
694 printf("=== Server-Client Integration Test ===\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
695 printf("MODE: Verifying Against Snapshots\n\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
696
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
697 char cwd[1024];
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
698 if (getcwd(cwd, sizeof(cwd)) != NULL)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
699 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
700 printf("Working directory: %s\n", cwd);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
701 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
702
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
703 if (access(server_binary, X_OK) != 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
704 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
705 printf("Server binary not found: %s\n", server_binary);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
706 perror("access");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
707 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
708 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
709 printf("Server binary: %s\n", server_binary);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
710 printf("Snapshot directory: %s\n\n", SNAPSHOT_DIR);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
711
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
712 pid_t server_pid = start_test_server(server_binary);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
713 if (server_pid < 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
714 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
715 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
716 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
717
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
718 int failed_tests = 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
719 int passed_tests = 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
720
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
721 // Define test cases - paths that should succeed (200 OK)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
722 TestCase success_tests[] = {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
723 {"/", 200, NULL, NULL, NULL, 0},
94
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
724 {"/resume", 200, NULL, NULL, NULL, 0},
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
725 {"/tools", 200, NULL, NULL, NULL, 0},
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
726 {"/tools/markdown_to_html", 200, NULL, NULL, NULL, 0},
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
727 {"/tools/file_converter", 200, NULL, NULL, NULL, 0},
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
728 };
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
729 int num_success_tests = sizeof(success_tests) / sizeof(success_tests[0]);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
730
94
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
731 // Define test cases - paths that should redirect (301)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
732 TestCase redirect_tests[] = {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
733 {"/index.html", 301, NULL, NULL, NULL, 0},
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
734 {"/resume/index.html", 301, NULL, NULL, NULL, 0},
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
735 {"/tools/index.html", 301, NULL, NULL, NULL, 0},
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
736 {"/tools/markdown_to_html/index.html", 301, NULL, NULL, NULL, 0},
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
737 {"/tools/file_converter/index.html", 301, NULL, NULL, NULL, 0},
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
738 };
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
739 int num_redirect_tests = sizeof(redirect_tests) / sizeof(redirect_tests[0]);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
740
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
741 // Define test cases - paths that should fail (404)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
742 TestCase failure_tests[] = {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
743 {"/nonexistent", 404, NULL, NULL, NULL, 0},
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
744 {"/does/not/exist", 404, NULL, NULL, NULL, 0},
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
745 {"/missing.html", 404, NULL, NULL, NULL, 0},
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
746 };
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
747 int num_failure_tests = sizeof(failure_tests) / sizeof(failure_tests[0]);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
748
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
749 // Initialize all test cases
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
750 for (int i = 0; i < num_success_tests; i++)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
751 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
752 init_test_case(&success_tests[i]);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
753 }
94
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
754 for (int i = 0; i < num_redirect_tests; i++)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
755 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
756 init_test_case(&redirect_tests[i]);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
757 }
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
758 for (int i = 0; i < num_failure_tests; i++)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
759 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
760 init_test_case(&failure_tests[i]);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
761 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
762
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
763 // Run success tests
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
764 printf("Running tests for paths that should succeed:\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
765 for (int i = 0; i < num_success_tests; i++)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
766 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
767 if (execute_test_case(&success_tests[i], server_pid) == 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
768 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
769 passed_tests++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
770 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
771 else
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
772 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
773 failed_tests++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
774 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
775 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
776
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
777 printf("\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
778
94
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
779 // Run redirect tests
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
780 printf("Running tests for paths that should redirect:\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
781 for (int i = 0; i < num_redirect_tests; i++)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
782 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
783 if (execute_test_case(&redirect_tests[i], server_pid) == 0)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
784 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
785 passed_tests++;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
786 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
787 else
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
788 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
789 failed_tests++;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
790 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
791 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
792
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
793 printf("\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
794
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
795 // Run failure tests
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
796 printf("Running tests for paths that should fail:\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
797 for (int i = 0; i < num_failure_tests; i++)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
798 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
799 if (execute_test_case(&failure_tests[i], server_pid) == 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
800 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
801 passed_tests++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
802 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
803 else
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
804 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
805 failed_tests++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
806 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
807 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
808
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
809 printf("\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
810
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
811 // Test with custom request
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
812 printf("Running tests with custom requests:\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
813 char custom_request[4096];
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
814 snprintf(custom_request, sizeof(custom_request),
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
815 "GET / HTTP/1.1\r\n"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
816 "Host: %s\r\n"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
817 "Connection: close\r\n"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
818 "X-Custom-Header: TestValue\r\n"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
819 "\r\n",
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
820 TEST_HOST);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
821
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
822 if (execute_custom_request_test("Custom headers GET /", custom_request, 200, server_pid) == 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
823 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
824 passed_tests++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
825 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
826 else
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
827 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
828 failed_tests++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
829 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
830
94
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
831 printf("\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
832
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
833 // Test POST endpoints
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
834 printf("Running tests for POST conversion endpoints:\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
835
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
836 // Test image-to-webp conversion
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
837 if (test_file_conversion("/api/convert/image-to-webp",
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
838 "mrjunejune/test/shiba.webp",
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
839 "image/webp",
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
840 server_pid) == 0)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
841 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
842 passed_tests++;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
843 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
844 else
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
845 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
846 failed_tests++;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
847 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
848
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
849 printf("\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
850
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
851 // Test video-to-mp4 conversion
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
852 if (test_file_conversion("/api/convert/video-to-mp4",
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
853 "mrjunejune/test/test_avi.avi",
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
854 "video/mp4",
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
855 server_pid) == 0)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
856 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
857 passed_tests++;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
858 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
859 else
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
860 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
861 failed_tests++;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
862 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
863
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
864 // Cleanup test cases
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
865 for (int i = 0; i < num_success_tests; i++)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
866 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
867 cleanup_test_case(&success_tests[i]);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
868 }
94
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
869 for (int i = 0; i < num_redirect_tests; i++)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
870 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
871 cleanup_test_case(&redirect_tests[i]);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
872 }
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
873 for (int i = 0; i < num_failure_tests; i++)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
874 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
875 cleanup_test_case(&failure_tests[i]);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
876 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
877
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
878 stop_test_server(server_pid);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
879
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
880 printf("\n=== Test Summary ===\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
881 printf("Passed: %d\n", passed_tests);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
882 printf("Failed: %d\n", failed_tests);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
883
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
884 return (failed_tests == 0) ? 0 : -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
885 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
886
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
887 int main(int argc, char *argv[])
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
888 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
889 printf("=== Seobeo Integration Tests ===\n\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
890
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
891 const char *server_binary = "./mrjunejune_server";
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
892 if (argc > 1)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
893 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
894 server_binary = argv[1];
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
895 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
896
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
897 int result = test_server_client_integration(server_binary);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
898
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
899 if (result == 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
900 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
901 printf("\n✓ All tests passed!\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
902 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
903 else
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
904 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
905 printf("\n✗ Some tests failed\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
906 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
907
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
908 return result;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
909 }