Mercurial
view mrjunejune/test/create_snapshots.c @ 71:75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Sun, 28 Dec 2025 20:34:22 -0800 |
| parents | 6626ec933933 |
| children | 092afa595764 |
line wrap: on
line source
#include "seobeo/seobeo.h" #include "seobeo/snapshot_creator.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> #include <signal.h> #define TEST_PORT "6969" #define TEST_HOST "127.0.0.1" #define SNAPSHOT_DIR "mrjunejune/test/snapshots" // Start the server process static pid_t start_server(const char *server_binary) { pid_t server_pid = fork(); if (server_pid < 0) { perror("fork"); return -1; } if (server_pid == 0) { // Child process - run server printf("Starting server on port %s...\n", TEST_PORT); execl(server_binary, server_binary, NULL); perror("execl failed"); exit(1); } // Parent - verify server started printf("Server started (PID: %d)\n", server_pid); usleep(100000); int status; pid_t result = waitpid(server_pid, &status, WNOHANG); if (result != 0) { if (WIFEXITED(status)) { fprintf(stderr, "Server exited with code: %d\n", WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) { fprintf(stderr, "Server killed by signal: %d\n", WTERMSIG(status)); } return -1; } sleep(2); printf("Server ready\n\n"); return server_pid; } // Stop the server process static void stop_server_test(pid_t server_pid) { if (server_pid > 0) { printf("\nStopping server (PID: %d)...\n", server_pid); kill(server_pid, SIGTERM); waitpid(server_pid, NULL, 0); printf("Server stopped\n"); } } int main(int argc, char *argv[]) { printf("=== Seobeo Snapshot Creator ===\n\n"); // Get workspace directory (where the source files are) const char *workspace_dir = getenv("BUILD_WORKSPACE_DIRECTORY"); if (!workspace_dir) { fprintf(stderr, "Error: BUILD_WORKSPACE_DIRECTORY not set\n"); fprintf(stderr, "This binary must be run with 'bazel run'\n"); return 1; } // Construct full path to snapshot directory char snapshot_path[1024]; snprintf(snapshot_path, sizeof(snapshot_path), "%s/%s", workspace_dir, SNAPSHOT_DIR); // Get server binary path const char *server_binary = "./mrjunejune_server"; if (argc > 1) { server_binary = argv[1]; } printf("Workspace: %s\n", workspace_dir); printf("Server binary: %s\n", server_binary); printf("Snapshot directory: %s\n\n", snapshot_path); // Start server pid_t server_pid = start_server(server_binary); if (server_pid < 0) { fprintf(stderr, "Failed to start server\n"); return 1; } // Define snapshots to create - paths that should succeed (200 OK) SnapshotConfig success_snapshots[] = { {"/", 200, snapshot_path, TEST_HOST, TEST_PORT}, {"/index.html", 200, snapshot_path, TEST_HOST, TEST_PORT}, }; int num_success = sizeof(success_snapshots) / sizeof(success_snapshots[0]); // Define snapshots for error paths (404) SnapshotConfig error_snapshots[] = { {"/nonexistent", 404, snapshot_path, TEST_HOST, TEST_PORT}, {"/does/not/exist", 404, snapshot_path, TEST_HOST, TEST_PORT}, {"/missing.html", 404, snapshot_path, TEST_HOST, TEST_PORT}, }; int num_errors = sizeof(error_snapshots) / sizeof(error_snapshots[0]); int total_failed = 0; int total_passed = 0; // Create success snapshots printf("Creating snapshots for successful paths:\n\n"); for (int i = 0; i < num_success; i++) { if (Seobeo_Snapshot_Create(&success_snapshots[i]) == 0) { total_passed++; } else { total_failed++; } } // Create error snapshots printf("Creating snapshots for error paths:\n\n"); for (int i = 0; i < num_errors; i++) { if (Seobeo_Snapshot_Create(&error_snapshots[i]) == 0) { total_passed++; } else { total_failed++; } } // Stop server stop_server_test(server_pid); // Print summary printf("\n=== Summary ===\n"); printf("Snapshots created: %d\n", total_passed); printf("Failed: %d\n", total_failed); if (total_failed == 0) { printf("\n✓ All snapshots created successfully!\n"); printf("\nSnapshots saved to: %s/\n", snapshot_path); printf("\nRun tests to verify:\n"); printf(" bazel test //mrjunejune:integration_test\n"); return 0; } else { printf("\n✗ Some snapshots failed\n"); return 1; } }