Mercurial
view mrjunejune/test/create_snapshots.c @ 128:7eb79fd91c7e
[Misc] Fixed all bazel targets. I should creat a separate scripts for these lol.
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Thu, 08 Jan 2026 19:20:56 -0800 |
| parents | 092afa595764 |
| children |
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}, {"/resume", 200, snapshot_path, TEST_HOST, TEST_PORT}, {"/tools", 200, snapshot_path, TEST_HOST, TEST_PORT}, {"/tools/markdown_to_html", 200, snapshot_path, TEST_HOST, TEST_PORT}, {"/tools/file_converter", 200, snapshot_path, TEST_HOST, TEST_PORT}, }; int num_success = sizeof(success_snapshots) / sizeof(success_snapshots[0]); // Define snapshots for redirect endpoints (301) SnapshotConfig redirect_snapshots[] = { {"/index.html", 301, snapshot_path, TEST_HOST, TEST_PORT}, {"/resume/index.html", 301, snapshot_path, TEST_HOST, TEST_PORT}, {"/tools/index.html", 301, snapshot_path, TEST_HOST, TEST_PORT}, {"/tools/markdown_to_html/index.html", 301, snapshot_path, TEST_HOST, TEST_PORT}, {"/tools/file_converter/index.html", 301, snapshot_path, TEST_HOST, TEST_PORT}, }; int num_redirects = sizeof(redirect_snapshots) / sizeof(redirect_snapshots[0]); 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 redirect snapshots printf("\nCreating snapshots for redirect paths:\n\n"); for (int i = 0; i < num_redirects; i++) { if (Seobeo_Snapshot_Create(&redirect_snapshots[i]) == 0) { total_passed++; } else { total_failed++; } } // Create error snapshots printf("\nCreating 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; } }