annotate mrjunejune/test/integration_test.c @ 122:96628cf126a0

[MrJuneJune] Websocket blog.
author June Park <parkjune1995@gmail.com>
date Thu, 08 Jan 2026 06:45:51 -0800
parents 092afa595764
children e7899c93da77
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)
122
96628cf126a0 [MrJuneJune] Websocket blog.
June Park <parkjune1995@gmail.com>
parents: 94
diff changeset
13 #ifndef SNAPSHOT_DIR
96628cf126a0 [MrJuneJune] Websocket blog.
June Park <parkjune1995@gmail.com>
parents: 94
diff changeset
14 // TODO: Make it as current directory /snapshots...
96628cf126a0 [MrJuneJune] Websocket blog.
June Park <parkjune1995@gmail.com>
parents: 94
diff changeset
15 #define SNAPSHOT_DIR "mrjunejune/test/snapshots"
96628cf126a0 [MrJuneJune] Websocket blog.
June Park <parkjune1995@gmail.com>
parents: 94
diff changeset
16 #endif
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
17
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
18 // Test case structure
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
19 typedef struct {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
20 const char *path;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
21 int expected_status;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
22 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
23 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
24 char *actual_response;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
25 size_t response_len;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
26 } TestCase;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
27
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
28 // Helper: Convert URL path to filename
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
29 // "/" -> "root.snapshot"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
30 // "/index.html" -> "index.html.snapshot"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
31 // "/api/users" -> "api_users.snapshot"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
32 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
33 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
34 if (strcmp(path, "/") == 0)
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 snprintf(filename, max_len, "root.snapshot");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
37 return;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
38 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
39
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
40 // 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
41 const char *p = path;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
42 if (*p == '/')
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 p++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
45 }
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 char *out = filename;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
48 size_t remaining = max_len - 1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
49
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
50 while (*p && remaining > 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
51 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
52 if (*p == '/')
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 *out++ = '_';
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
55 remaining--;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
56 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
57 else
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 *out++ = *p;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
60 remaining--;
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 p++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
63 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
64
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
65 // Add .snapshot extension
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
66 snprintf(out, remaining, ".snapshot");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
67 }
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 // Helper: Read file contents into buffer
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
70 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
71 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
72 FILE *f = fopen(filepath, "rb");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
73 if (!f)
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 return NULL;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
76 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
77
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
78 fseek(f, 0, SEEK_END);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
79 long fsize = ftell(f);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
80 fseek(f, 0, SEEK_SET);
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 char *buffer = malloc(fsize + 1);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
83 if (!buffer)
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 fclose(f);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
86 return NULL;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
87 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
88
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
89 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
90 buffer[read_size] = '\0';
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
91 fclose(f);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
92
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
93 if (size_out)
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 *size_out = read_size;
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 return buffer;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
99 }
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 // 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
102 int load_expected_content(TestCase *test)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
103 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
104 if (!test->expected_file_path)
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 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
107 }
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 size_t size;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
110 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
111
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
112 if (!test->expected_content)
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 -1;
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 return 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
118 }
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 // Helper: Create test client
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
121 Seobeo_Handle* create_test_client()
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 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
124 if (!client || client->socket < 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
125 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
126 if (client)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
127 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
128 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
129 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
130 return NULL;
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 return client;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
133 }
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 // Helper: Generate default HTTP GET request
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
136 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
137 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
138 return snprintf(
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
139 buffer, buffer_size,
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
140 "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
141 "Host: %s\r\n"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
142 "Connection: close\r\n"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
143 "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
144 "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
145 "\r\n",
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
146 path, TEST_HOST
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
147 );
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
148 }
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 // Helper: Send HTTP request
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
151 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
152 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
153 char request_buffer[4096];
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
154 int request_len;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
155
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
156 if (custom_request)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
157 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
158 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
159 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
160 else
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 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
163 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
164
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
165 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
166 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
167 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
168 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
169 }
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 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
172 return Seobeo_Handle_Flush(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
173 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
174
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
175 // Helper: Read HTTP response
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
176 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
177 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
178 char *response = malloc(MAX_RESPONSE_SIZE);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
179 if (!response)
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 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
182 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
183
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
184 size_t total_bytes = 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
185 int attempts = 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
186 const int max_attempts = 100;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
187
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
188 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
189 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
190 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
191
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
192 if (bytes_read > 0)
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 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
195 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
196 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
197 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
198 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
199
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
200 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
201 total_bytes += to_copy;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
202 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
203 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
204 else if (bytes_read == -2)
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 // Connection closed
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
207 break;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
208 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
209 else if (bytes_read == 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
210 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
211 // Would block
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
212 usleep(10000);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
213 continue;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
214 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
215 else
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 free(response);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
218 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
219 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
220 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
221
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
222 response[total_bytes] = '\0';
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
223 *response_out = response;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
224 *response_len_out = total_bytes;
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 return (total_bytes > 0) ? 0 : -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
227 }
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 // Helper: Parse HTTP status code
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
230 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
231 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
232 if (!response || strlen(response) < 12)
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 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
235 }
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 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
238 if (!status_start)
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 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
241 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
242
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
243 if (!status_start)
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 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
246 }
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 int status_code;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
249 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
250 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
251 return status_code;
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 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
255 }
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 // 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
258 int is_redirect_status(int status)
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 return (status >= 300 && status < 400);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
261 }
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 // Helper: Execute a test case
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
264 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
265 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
266 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
267
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
268 Seobeo_Handle *client = create_test_client();
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
269 if (!client)
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 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
272 return -1;
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
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
275 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
276 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
277 printf(" ✗ Failed to send request\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
278 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
279 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
280 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
281
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
282 char *response = NULL;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
283 size_t response_len = 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
284 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
285 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
286 printf(" ✗ Failed to read response\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
287 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
288 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
289 }
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 test->actual_response = response;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
292 test->response_len = response_len;
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 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
295 if (actual_status != test->expected_status)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
296 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
297 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
298 test->expected_status, actual_status);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
299 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
300 return -1;
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
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
303 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
304
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
305 // For redirects, skip content comparison
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
306 if (is_redirect_status(actual_status))
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
307 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
308 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
309 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
310 return 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
311 }
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 // 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
314 if (actual_status == 200)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
315 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
316 if (!test->expected_content)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
317 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
318 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
319 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
320 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
321 return -1;
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
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
324 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
325 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
326 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
327 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
328 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
329 return -1;
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 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
333 }
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 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
336 return 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
337 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
338
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
339 // Helper: Execute custom request test
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
340 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
341 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
342 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
343 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
344
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
345 Seobeo_Handle *client = create_test_client();
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
346 if (!client)
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 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
349 return -1;
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
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
352 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
353 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
354 printf(" ✗ Failed to send request\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
355 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
356 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
357 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
358
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
359 char *response = NULL;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
360 size_t response_len = 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
361 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
362 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
363 printf(" ✗ Failed to read response\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
364 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
365 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
366 }
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 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
369 if (actual_status != expected_status)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
370 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
371 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
372 expected_status, actual_status);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
373 free(response);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
374 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
375 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
376 }
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 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
379 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
380
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
381 free(response);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
382 Seobeo_Handle_Destroy(client);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
383 return 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
384 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
385
94
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
386 // Helper: Send POST request with file data
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
387 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
388 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
389 char request_buffer[8192];
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
390 int header_len = snprintf(
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
391 request_buffer, sizeof(request_buffer),
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
392 "POST %s HTTP/1.1\r\n"
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
393 "Host: %s\r\n"
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
394 "Content-Type: application/octet-stream\r\n"
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
395 "Content-Length: %zu\r\n"
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
396 "Connection: close\r\n"
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
397 "\r\n",
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
398 path, TEST_HOST, file_size
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
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
401 if (header_len < 0 || header_len >= sizeof(request_buffer))
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 fprintf(stderr, "Request header too large\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
404 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
405 }
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 headers
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
408 Seobeo_Handle_Queue(client, (uint8*)request_buffer, (uint32)header_len);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
409
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
410 // Send file data in chunks if needed
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
411 size_t remaining = file_size;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
412 const char *ptr = file_data;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
413 while (remaining > 0)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
414 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
415 size_t chunk_size = remaining > 4096 ? 4096 : remaining;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
416 Seobeo_Handle_Queue(client, (uint8*)ptr, (uint32)chunk_size);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
417 ptr += chunk_size;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
418 remaining -= chunk_size;
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 return Seobeo_Handle_Flush(client);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
422 }
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 // Helper: Extract JSON field value from response body
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
425 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
426 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
427 char search_pattern[256];
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
428 snprintf(search_pattern, sizeof(search_pattern), "\"%s\":\"", field);
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 const char *start = strstr(json, search_pattern);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
431 if (!start)
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 return NULL;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
434 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
435
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
436 start += strlen(search_pattern);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
437 const char *end = strchr(start, '"');
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
438 if (!end)
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 return NULL;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
441 }
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 size_t len = end - start;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
444 if (len >= buffer_size)
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 len = buffer_size - 1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
447 }
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 memcpy(buffer, start, len);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
450 buffer[len] = '\0';
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 return buffer;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
453 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
454
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
455 // Helper: Test POST file conversion
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
456 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
457 const char *expected_format, pid_t server_pid)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
458 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
459 printf(" Testing: POST %s\n", endpoint);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
460
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
461 // Read test file
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
462 size_t file_size;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
463 char *file_data = read_file(test_file_path, &file_size);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
464 if (!file_data)
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 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
467 return -1;
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
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
470 printf(" → Loaded test file (%zu bytes)\n", file_size);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
471
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
472 // Create client and send request
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
473 Seobeo_Handle *client = create_test_client();
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
474 if (!client)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
475 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
476 printf(" ✗ Failed to create client connection\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
477 free(file_data);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
478 return -1;
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
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
481 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
482 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
483 printf(" ✗ Failed to send POST request\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
484 free(file_data);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
485 Seobeo_Handle_Destroy(client);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
486 return -1;
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
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
489 free(file_data);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
490
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
491 // Read response
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
492 char *response = NULL;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
493 size_t response_len = 0;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
494 if (read_http_response(client, &response, &response_len) < 0)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
495 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
496 printf(" ✗ Failed to read response\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
497 Seobeo_Handle_Destroy(client);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
498 return -1;
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
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
501 Seobeo_Handle_Destroy(client);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
502
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
503 // Parse status
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
504 int status = parse_http_status(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
505 if (status != 200)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
506 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
507 printf(" ✗ Conversion failed with status: %d\n", status);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
508 printf(" Response: %s\n", response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
509 free(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
510 return -1;
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
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
513 printf(" ✓ Status code: 200\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
514
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
515 // Extract download URL from JSON response
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
516 const char *body = strstr(response, "\r\n\r\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
517 if (!body)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
518 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
519 printf(" ✗ No response body found\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
520 free(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
521 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
522 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
523 body += 4;
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 char download_url[512];
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
526 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
527 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
528 printf(" ✗ Failed to extract download_url from response\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
529 printf(" Response body: %s\n", body);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
530 free(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
531 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
532 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
533
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
534 printf(" ✓ Conversion succeeded\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
535 printf(" ✓ Download URL: %s\n", download_url);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
536 free(response);
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 // Test downloading the converted file
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
539 printf(" → Testing download: GET %s\n", download_url);
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 client = create_test_client();
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
542 if (!client)
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 printf(" ✗ Failed to create client for download\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
545 return -1;
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
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
548 if (send_http_request(client, download_url, NULL) < 0)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
549 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
550 printf(" ✗ Failed to send download request\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
551 Seobeo_Handle_Destroy(client);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
552 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
553 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
554
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
555 response = NULL;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
556 response_len = 0;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
557 if (read_http_response(client, &response, &response_len) < 0)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
558 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
559 printf(" ✗ Failed to read download response\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
560 Seobeo_Handle_Destroy(client);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
561 return -1;
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
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
564 Seobeo_Handle_Destroy(client);
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 status = parse_http_status(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
567 if (status != 200)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
568 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
569 printf(" ✗ Download failed with status: %d\n", status);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
570 free(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
571 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
572 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
573
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
574 // Find body in download response
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
575 body = strstr(response, "\r\n\r\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
576 if (!body)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
577 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
578 printf(" ✗ No file data in download response\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
579 free(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
580 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
581 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
582 body += 4;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
583
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
584 size_t downloaded_size = response_len - (body - response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
585
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
586 // Verify content type in response headers
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
587 const char *content_type = strstr(response, "Content-Type: ");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
588 if (!content_type)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
589 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
590 printf(" ✗ No Content-Type header in download\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
591 free(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
592 return -1;
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
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
595 if (strstr(content_type, expected_format) == NULL)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
596 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
597 printf(" ✗ Wrong content type (expected %s)\n", expected_format);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
598 free(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
599 return -1;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
600 }
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 printf(" ✓ Downloaded converted file (%zu bytes)\n", downloaded_size);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
603 printf(" ✓ Content-Type: %s\n", expected_format);
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 free(response);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
606 return 0;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
607 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
608
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
609 // Helper: Start test server
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
610 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
611 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
612 pid_t server_pid = fork();
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
613
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
614 if (server_pid < 0)
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 perror("fork");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
617 return -1;
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
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
620 if (server_pid == 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
621 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
622 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
623 execl(server_binary, server_binary, NULL);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
624 perror("execl failed");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
625 exit(1);
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
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
628 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
629
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
630 usleep(100000);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
631 int status;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
632 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
633 if (result != 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
634 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
635 if (WIFEXITED(status))
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
636 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
637 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
638 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
639 else if (WIFSIGNALED(status))
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
640 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
641 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
642 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
643 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
644 }
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 sleep(2);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
647 printf("Server ready\n\n");
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 return server_pid;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
650 }
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 // Helper: Stop test server
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
653 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
654 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
655 if (server_pid > 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
656 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
657 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
658 kill(server_pid, SIGTERM);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
659 waitpid(server_pid, NULL, 0);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
660 printf("Server stopped\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
661 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
662 }
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 // 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
665 void init_test_case(TestCase *test)
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 char filename[256];
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
668 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
669
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
670 test->expected_file_path = malloc(512);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
671 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
672
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
673 // Load expected content from snapshot file
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
674 load_expected_content(test);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
675 }
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 // Helper: Cleanup test case
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
678 void cleanup_test_case(TestCase *test)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
679 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
680 if (test->actual_response)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
681 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
682 free(test->actual_response);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
683 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
684 if (test->expected_file_path)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
685 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
686 free(test->expected_file_path);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
687 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
688 if (test->expected_content)
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 free((void*)test->expected_content);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
691 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
692 }
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 // Main integration test
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
695 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
696 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
697 printf("=== Server-Client Integration Test ===\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
698 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
699
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
700 char cwd[1024];
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
701 if (getcwd(cwd, sizeof(cwd)) != NULL)
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 printf("Working directory: %s\n", cwd);
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
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
706 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
707 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
708 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
709 perror("access");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
710 return -1;
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 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
713 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
714
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
715 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
716 if (server_pid < 0)
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 return -1;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
719 }
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 int failed_tests = 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
722 int passed_tests = 0;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
723
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
724 // 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
725 TestCase success_tests[] = {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
726 {"/", 200, NULL, NULL, NULL, 0},
94
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
727 {"/resume", 200, NULL, NULL, NULL, 0},
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
728 {"/tools", 200, NULL, NULL, NULL, 0},
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
729 {"/tools/markdown_to_html", 200, NULL, NULL, NULL, 0},
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
730 {"/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
731 };
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
732 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
733
94
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
734 // Define test cases - paths that should redirect (301)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
735 TestCase redirect_tests[] = {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
736 {"/index.html", 301, NULL, NULL, NULL, 0},
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
737 {"/resume/index.html", 301, NULL, NULL, NULL, 0},
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
738 {"/tools/index.html", 301, NULL, NULL, NULL, 0},
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
739 {"/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
740 {"/tools/file_converter/index.html", 301, NULL, NULL, NULL, 0},
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
741 };
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
742 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
743
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
744 // 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
745 TestCase failure_tests[] = {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
746 {"/nonexistent", 404, NULL, NULL, NULL, 0},
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
747 {"/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
748 {"/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
749 };
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
750 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
751
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
752 // Initialize all test cases
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
753 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
754 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
755 init_test_case(&success_tests[i]);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
756 }
94
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
757 for (int i = 0; i < num_redirect_tests; i++)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
758 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
759 init_test_case(&redirect_tests[i]);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
760 }
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
761 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
762 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
763 init_test_case(&failure_tests[i]);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
764 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
765
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
766 // Run success tests
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
767 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
768 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
769 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
770 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
771 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
772 passed_tests++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
773 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
774 else
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 failed_tests++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
777 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
778 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
779
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
780 printf("\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
781
94
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
782 // Run redirect tests
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
783 printf("Running tests for paths that should redirect:\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
784 for (int i = 0; i < num_redirect_tests; i++)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
785 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
786 if (execute_test_case(&redirect_tests[i], server_pid) == 0)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
787 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
788 passed_tests++;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
789 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
790 else
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 failed_tests++;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
793 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
794 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
795
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
796 printf("\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
797
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
798 // Run failure tests
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
799 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
800 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
801 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
802 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
803 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
804 passed_tests++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
805 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
806 else
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 failed_tests++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
809 }
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
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
812 printf("\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
813
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
814 // Test with custom request
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
815 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
816 char custom_request[4096];
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
817 snprintf(custom_request, sizeof(custom_request),
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
818 "GET / HTTP/1.1\r\n"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
819 "Host: %s\r\n"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
820 "Connection: close\r\n"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
821 "X-Custom-Header: TestValue\r\n"
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
822 "\r\n",
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
823 TEST_HOST);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
824
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
825 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
826 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
827 passed_tests++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
828 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
829 else
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
830 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
831 failed_tests++;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
832 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
833
94
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
834 printf("\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 POST endpoints
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
837 printf("Running tests for POST conversion endpoints:\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
838
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
839 // Test image-to-webp conversion
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
840 if (test_file_conversion("/api/convert/image-to-webp",
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
841 "mrjunejune/test/shiba.webp",
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
842 "image/webp",
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
843 server_pid) == 0)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
844 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
845 passed_tests++;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
846 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
847 else
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 failed_tests++;
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
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
852 printf("\n");
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
853
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
854 // Test video-to-mp4 conversion
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
855 if (test_file_conversion("/api/convert/video-to-mp4",
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
856 "mrjunejune/test/test_avi.avi",
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
857 "video/mp4",
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
858 server_pid) == 0)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
859 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
860 passed_tests++;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
861 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
862 else
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
863 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
864 failed_tests++;
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
865 }
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
866
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
867 // Cleanup test cases
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
868 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
869 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
870 cleanup_test_case(&success_tests[i]);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
871 }
94
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
872 for (int i = 0; i < num_redirect_tests; i++)
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
873 {
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
874 cleanup_test_case(&redirect_tests[i]);
092afa595764 [MrJuneJune] Added Integration tests.
June Park <parkjune1995@gmail.com>
parents: 67
diff changeset
875 }
67
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
876 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
877 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
878 cleanup_test_case(&failure_tests[i]);
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
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
881 stop_test_server(server_pid);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
882
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
883 printf("\n=== Test Summary ===\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
884 printf("Passed: %d\n", passed_tests);
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
885 printf("Failed: %d\n", failed_tests);
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 return (failed_tests == 0) ? 0 : -1;
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
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
890 int main(int argc, char *argv[])
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
891 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
892 printf("=== Seobeo Integration Tests ===\n\n");
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 const char *server_binary = "./mrjunejune_server";
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
895 if (argc > 1)
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 server_binary = argv[1];
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
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
900 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
901
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
902 if (result == 0)
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
903 {
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
904 printf("\n✓ All tests passed!\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
905 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
906 else
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 printf("\n✗ Some tests failed\n");
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
909 }
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
910
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
911 return result;
6626ec933933 [Seobeo] Separated out Client Server logic. Created test tools.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
912 }