view connectors/tests/route_test.c @ 279:b3b547563ec7

Add Google connector service and agent wiki Implement the C/Seobeo Google Drive and Gmail connector with encrypted OAuth storage, Zenbu authentication, browser testing, AI tool discovery, chunked HTTP decoding, and Bazel coverage. Consolidate repository guidance into progressive wiki documentation and enforce arena-first allocation for new first-party C code. Co-authored-by: Copilot <[email protected]> Copilot-Session: 84c338fd-0939-4bb3-b7f3-1062eb213e5d
author MrJuneJune <me@mrjunejune.com>
date Mon, 17 Aug 2026 22:22:36 -0700
parents
children
line wrap: on
line source

#include "connectors/connector.h"

#include <assert.h>
#include <stdio.h>
#include <string.h>

static const char *value(Seobeo_Request_Entry *map, const char *key)
{
  Seobeo_Request_Entry *entry = Dowa_HashMap_Get_Ptr(map, (char *)key);
  return entry ? entry->value : NULL;
}

typedef struct {
  boolean required_csrf;
} Test_Auth_Context;

static const char *test_only_auth(
    Seobeo_Request_Entry *request, boolean require_csrf,
    Dowa_Arena *arena, void *opaque)
{
  (void)request;
  (void)arena;
  Test_Auth_Context *context = opaque;
  context->required_csrf = require_csrf;
  return NULL;
}

int main(void)
{
  Dowa_Arena *arena = Dowa_Arena_Create(64 * 1024);
  Test_Auth_Context auth_context = {0};
  Connector_Auth_Adapter test_adapter = {
    .resolve_user = test_only_auth,
    .context = &auth_context
  };
  Connector_Service_Configure(NULL, NULL, test_adapter);
  Seobeo_Router_Init();
  Connector_Service_Register_Routes();

  Seobeo_Request_Entry *request = NULL;
  Seobeo_Route_Handler health = Seobeo_Router_Find_Handler(
      "GET", "/health", &request, arena);
  assert(health);
  Seobeo_Request_Entry *response = health(request, arena);
  assert(!strcmp(value(response, "status"), "200"));

  request = NULL;
  Seobeo_Route_Handler auth_page = Seobeo_Router_Find_Handler(
      "GET", "/auth-test.html", &request, arena);
  assert(auth_page);
  response = auth_page(request, arena);
  assert(!strcmp(value(response, "status"), "200"));
  assert(strstr(value(response, "content-type"), "text/html"));
  assert(strstr(value(response, "body"), "Check Zenbu session"));

  request = NULL;
  Seobeo_Route_Handler ai_tools = Seobeo_Router_Find_Handler(
      "GET", "/v1/ai/tools", &request, arena);
  assert(ai_tools);
  response = ai_tools(request, arena);
  assert(!strcmp(value(response, "status"), "200"));
  assert(strstr(value(response, "body"), "connector.gmail.get"));

  request = NULL;
  Seobeo_Route_Handler oauth_start = Seobeo_Router_Find_Handler(
      "POST", "/v1/oauth/google/start", &request, arena);
  assert(oauth_start);
  response = oauth_start(request, arena);
  assert(!strcmp(value(response, "status"), "401"));
  assert(auth_context.required_csrf);
  request = NULL;
  assert(!Seobeo_Router_Find_Handler(
      "GET", "/v1/oauth/google/start", &request, arena));

  request = NULL;
  Seobeo_Route_Handler auth_session = Seobeo_Router_Find_Handler(
      "GET", "/v1/auth/session", &request, arena);
  assert(auth_session);
  response = auth_session(request, arena);
  assert(!strcmp(value(response, "status"), "401"));
  assert(strstr(value(response, "body"), "\"authenticated\":false"));

  request = NULL;
  Seobeo_Route_Handler rejected = Seobeo_Router_Find_Handler(
      "DELETE", "/v1/accounts/google:one/drive/files/file-1",
      &request, arena);
  assert(rejected);
  response = rejected(request, arena);
  assert(!strcmp(value(response, "status"), "403"));
  assert(strstr(value(response, "body"), "operation_not_allowed"));

  request = NULL;
  Seobeo_Route_Handler confirmation = Seobeo_Router_Find_Handler(
      "POST", "/v1/confirmations", &request, arena);
  assert(confirmation);
  response = confirmation(request, arena);
  assert(!strcmp(value(response, "status"), "401"));
  assert(auth_context.required_csrf);

  request = NULL;
  Seobeo_Route_Handler get_policy = Seobeo_Router_Find_Handler(
      "GET", "/v1/settings/confirmations/gmail.send", &request, arena);
  assert(get_policy);
  response = get_policy(request, arena);
  assert(!strcmp(value(response, "status"), "401"));
  assert(!auth_context.required_csrf);

  request = NULL;
  Seobeo_Route_Handler set_policy = Seobeo_Router_Find_Handler(
      "PUT", "/v1/settings/confirmations/gmail.send", &request, arena);
  assert(set_policy);
  response = set_policy(request, arena);
  assert(!strcmp(value(response, "status"), "401"));
  assert(auth_context.required_csrf);

  request = NULL;
  Seobeo_Route_Handler drive_list = Seobeo_Router_Find_Handler(
      "GET", "/v1/accounts/google:one/drive/files", &request, arena);
  assert(drive_list);
  response = drive_list(request, arena);
  assert(!strcmp(value(response, "status"), "401"));
  assert(!auth_context.required_csrf);

  request = NULL;
  assert(Seobeo_Router_Find_Handler(
      "POST", "/v1/accounts/google:one/gmail/send", &request, arena));
  request = NULL;
  assert(Seobeo_Router_Find_Handler(
      "GET",
      "/v1/accounts/google:one/gmail/messages/msg/attachments/attachment",
      &request, arena));
  request = NULL;
  assert(!Seobeo_Router_Find_Handler(
      "POST", "/v1/accounts/google:one/gmail/messages/msg/labels",
      &request, arena));

  Seobeo_Router_Destroy();
  Dowa_Arena_Free(arena);
  printf("route_test: ok\n");
  return 0;
}