Mercurial
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 |
| 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 } |