From 7d61a921b04f1eb0bcaf9a403efb4e1fccf86cef Mon Sep 17 00:00:00 2001 From: mwfj Date: Mon, 25 May 2026 16:24:35 +0800 Subject: [PATCH 1/3] Re-organized file layout --- Makefile | 90 +++++------ server/{ => auth}/auth_claims.cc | 0 server/{ => auth}/auth_error_responses.cc | 0 server/{ => auth}/auth_manager.cc | 0 server/{ => auth}/auth_middleware.cc | 0 server/{ => auth}/auth_policy_matcher.cc | 0 .../{ => auth}/auth_upstream_http_client.cc | 0 server/{ => auth}/auth_url_util.cc | 0 server/{ => auth}/introspection_cache.cc | 0 server/{ => auth}/introspection_client.cc | 0 server/{ => auth}/issuer.cc | 0 server/{ => auth}/jwks_cache.cc | 0 server/{ => auth}/jwks_fetcher.cc | 0 server/{ => auth}/jwt_verifier.cc | 0 server/{ => auth}/oidc_discovery.cc | 0 server/{ => auth}/token_hasher.cc | 0 .../circuit_breaker_host.cc | 0 .../circuit_breaker_manager.cc | 0 .../circuit_breaker_slice.cc | 0 .../circuit_breaker_window.cc | 0 server/{ => circuit_breaker}/retry_budget.cc | 0 server/{ => cli}/cli_parser.cc | 0 server/{ => cli}/daemonizer.cc | 0 server/{ => cli}/pid_file.cc | 0 server/{ => cli}/signal_handler.cc | 0 server/{ => config}/config_loader.cc | 0 server/{ => grpc}/grpc_status.cc | 0 server/{ => grpc}/grpc_synthesis.cc | 0 server/{ => grpc}/grpc_timeout.cc | 0 server/{ => grpc}/grpc_web_bridge.cc | 0 server/{ => http}/body_stream.cc | 0 server/{ => http}/http2_trailer_sanitizer.cc | 0 server/{ => http}/http_connection_handler.cc | 0 server/{ => http}/http_parser.cc | 0 server/{ => http}/http_response.cc | 0 server/{ => http}/http_router.cc | 0 server/{ => http}/http_server.cc | 0 server/{ => http}/route_trie.cc | 0 .../{ => http2}/http2_connection_handler.cc | 0 server/{ => http2}/http2_session.cc | 0 server/{ => http2}/http2_stream.cc | 0 server/{ => http2}/protocol_detector.cc | 0 server/{ => log}/logger.cc | 0 server/{ => net}/dns_resolver.cc | 0 server/{ => observability}/attr_value.cc | 0 .../batch_span_processor.cc | 0 .../composite_propagator.cc | 0 server/{ => observability}/counter.cc | 0 server/{ => observability}/histogram.cc | 0 .../{ => observability}/jaeger_propagator.cc | 0 server/{ => observability}/meter.cc | 0 server/{ => observability}/meter_provider.cc | 0 .../metric_label_registry.cc | 0 .../metric_writer_context.cc | 0 server/{ => observability}/metrics_catalog.cc | 0 server/{ => observability}/metrics_handler.cc | 0 .../observability_manager.cc | 0 .../observability_middleware.cc | 0 .../{ => observability}/otlp_http_exporter.cc | 0 server/{ => observability}/otlp_transport.cc | 0 .../periodic_metric_reader.cc | 0 .../prometheus_exporter.cc | 0 server/{ => observability}/propagator.cc | 0 server/{ => observability}/sampler.cc | 0 server/{ => observability}/span.cc | 0 server/{ => observability}/trace_id.cc | 0 server/{ => observability}/trace_state.cc | 0 server/{ => observability}/tracer.cc | 0 server/{ => observability}/tracer_provider.cc | 0 server/{ => rate_limit}/rate_limit_zone.cc | 0 server/{ => rate_limit}/rate_limiter.cc | 0 server/{ => rate_limit}/token_bucket.cc | 0 server/{ => tls}/tls_client_context.cc | 0 server/{ => tls}/tls_connection.cc | 0 server/{ => tls}/tls_context.cc | 0 .../grpc_web_inbound_body_stream.cc | 0 server/{ => upstream}/h2_connection_table.cc | 0 server/{ => upstream}/header_rewriter.cc | 0 .../{ => upstream}/http_request_serializer.cc | 0 server/{ => upstream}/pool_partition.cc | 0 server/{ => upstream}/proxy_handler.cc | 0 server/{ => upstream}/proxy_transaction.cc | 0 server/{ => upstream}/retry_policy.cc | 0 server/{ => upstream}/upstream_connection.cc | 0 server/{ => upstream}/upstream_h2_codec.cc | 0 .../{ => upstream}/upstream_h2_connection.cc | 0 server/{ => upstream}/upstream_host_pool.cc | 0 server/{ => upstream}/upstream_http_codec.cc | 0 server/{ => upstream}/upstream_manager.cc | 0 server/{ => ws}/websocket_connection.cc | 0 server/{ => ws}/websocket_frame.cc | 0 server/{ => ws}/websocket_handshake.cc | 0 server/{ => ws}/websocket_parser.cc | 0 test/{ => auth}/auth_failure_mode_test.h | 0 test/{ => auth}/auth_foundation_test.h | 0 test/{ => auth}/auth_integration_test.h | 0 .../auth_introspection_integration_test.h | 0 test/{ => auth}/auth_manager_test.h | 0 test/{ => auth}/auth_multi_issuer_test.h | 0 test/{ => auth}/auth_observability_test.h | 0 test/{ => auth}/auth_race_test.h | 0 test/{ => auth}/auth_reload_test.h | 0 test/{ => auth}/auth_websocket_upgrade_test.h | 0 test/{ => auth}/header_rewriter_auth_test.h | 0 test/{ => auth}/introspection_cache_test.h | 0 test/{ => auth}/introspection_client_test.h | 0 test/{ => auth}/jwks_cache_test.h | 0 test/{ => auth}/jwt_verifier_test.h | 0 test/{ => auth}/oidc_discovery_test.h | 0 .../circuit_breaker_components_test.h | 0 .../circuit_breaker_integration_test.h | 0 .../circuit_breaker_observability_test.h | 0 .../circuit_breaker_reload_test.h | 0 .../circuit_breaker_retry_budget_test.h | 0 .../circuit_breaker_test.h | 0 .../circuit_breaker_wait_queue_drain_test.h | 0 test/{ => cli}/cli_test.h | 0 test/{ => config}/config_test.h | 0 test/{ => grpc}/grpc_obs_test.h | 2 +- test/{ => grpc}/grpc_proxy_test.h | 2 +- test/{ => grpc}/grpc_test.h | 0 test/{ => grpc}/grpc_web_edge_test.h | 2 +- test/{ => grpc}/grpc_web_test.h | 0 test/{ => http}/http_internal_test.h | 0 test/{ => http}/http_test.h | 0 test/{ => http}/route_test.h | 0 .../{ => http}/router_async_middleware_test.h | 2 +- test/{ => http}/streaming_request_test.h | 0 test/{ => http}/timeout_test.h | 0 test/{ => http2}/h2_trailer_test.h | 0 test/{ => http2}/http2_internal_test.h | 0 test/{ => http2}/http2_test.h | 0 test/{ => net}/dns_resolver_test.h | 0 test/{ => net}/dual_stack_test.h | 0 .../observability_auth_trace_test.h | 0 .../observability_catalog_test.h | 0 .../observability_config_test.h | 0 .../observability_connection_metrics_test.h | 0 .../observability_e2e_test.h | 0 .../observability_export_pipeline_test.h | 0 .../observability_foundation_test.h | 0 .../observability_issue_inject_test.h | 2 +- .../observability_jaeger_propagator_test.h | 0 .../observability_kill_marshal_test.h | 0 .../observability_link_kill_test.h | 18 +-- .../observability_manager_test.h | 0 .../observability_metrics_test.h | 0 .../observability_middleware_metrics_test.h | 0 .../observability_pool_gauges_test.h | 0 .../observability_prometheus_test.h | 0 .../observability_propagator_test.h | 0 .../observability_proxy_client_test.h | 0 .../observability_self_handler_test.h | 0 .../observability_self_metrics_test.h | 0 .../observability_shutdown_test.h | 2 +- .../observability_stress_test.h | 2 +- .../observability_test_helpers.h | 0 .../observability_tracer_test.h | 0 .../observability_ws_messages_test.h | 0 test/{ => rate_limit}/rate_limit_test.h | 0 test/run_test.cc | 144 +++++++++--------- test/{ => tls}/tls_test.h | 0 test/{ => upstream}/h2_upstream_test.h | 2 +- test/{ => upstream}/proxy_test.h | 0 .../proxy_transaction_internal_test.h | 0 test/{ => upstream}/upstream_pool_test.h | 0 test/{ => ws}/websocket_test.h | 0 167 files changed, 135 insertions(+), 133 deletions(-) rename server/{ => auth}/auth_claims.cc (100%) rename server/{ => auth}/auth_error_responses.cc (100%) rename server/{ => auth}/auth_manager.cc (100%) rename server/{ => auth}/auth_middleware.cc (100%) rename server/{ => auth}/auth_policy_matcher.cc (100%) rename server/{ => auth}/auth_upstream_http_client.cc (100%) rename server/{ => auth}/auth_url_util.cc (100%) rename server/{ => auth}/introspection_cache.cc (100%) rename server/{ => auth}/introspection_client.cc (100%) rename server/{ => auth}/issuer.cc (100%) rename server/{ => auth}/jwks_cache.cc (100%) rename server/{ => auth}/jwks_fetcher.cc (100%) rename server/{ => auth}/jwt_verifier.cc (100%) rename server/{ => auth}/oidc_discovery.cc (100%) rename server/{ => auth}/token_hasher.cc (100%) rename server/{ => circuit_breaker}/circuit_breaker_host.cc (100%) rename server/{ => circuit_breaker}/circuit_breaker_manager.cc (100%) rename server/{ => circuit_breaker}/circuit_breaker_slice.cc (100%) rename server/{ => circuit_breaker}/circuit_breaker_window.cc (100%) rename server/{ => circuit_breaker}/retry_budget.cc (100%) rename server/{ => cli}/cli_parser.cc (100%) rename server/{ => cli}/daemonizer.cc (100%) rename server/{ => cli}/pid_file.cc (100%) rename server/{ => cli}/signal_handler.cc (100%) rename server/{ => config}/config_loader.cc (100%) rename server/{ => grpc}/grpc_status.cc (100%) rename server/{ => grpc}/grpc_synthesis.cc (100%) rename server/{ => grpc}/grpc_timeout.cc (100%) rename server/{ => grpc}/grpc_web_bridge.cc (100%) rename server/{ => http}/body_stream.cc (100%) rename server/{ => http}/http2_trailer_sanitizer.cc (100%) rename server/{ => http}/http_connection_handler.cc (100%) rename server/{ => http}/http_parser.cc (100%) rename server/{ => http}/http_response.cc (100%) rename server/{ => http}/http_router.cc (100%) rename server/{ => http}/http_server.cc (100%) rename server/{ => http}/route_trie.cc (100%) rename server/{ => http2}/http2_connection_handler.cc (100%) rename server/{ => http2}/http2_session.cc (100%) rename server/{ => http2}/http2_stream.cc (100%) rename server/{ => http2}/protocol_detector.cc (100%) rename server/{ => log}/logger.cc (100%) rename server/{ => net}/dns_resolver.cc (100%) rename server/{ => observability}/attr_value.cc (100%) rename server/{ => observability}/batch_span_processor.cc (100%) rename server/{ => observability}/composite_propagator.cc (100%) rename server/{ => observability}/counter.cc (100%) rename server/{ => observability}/histogram.cc (100%) rename server/{ => observability}/jaeger_propagator.cc (100%) rename server/{ => observability}/meter.cc (100%) rename server/{ => observability}/meter_provider.cc (100%) rename server/{ => observability}/metric_label_registry.cc (100%) rename server/{ => observability}/metric_writer_context.cc (100%) rename server/{ => observability}/metrics_catalog.cc (100%) rename server/{ => observability}/metrics_handler.cc (100%) rename server/{ => observability}/observability_manager.cc (100%) rename server/{ => observability}/observability_middleware.cc (100%) rename server/{ => observability}/otlp_http_exporter.cc (100%) rename server/{ => observability}/otlp_transport.cc (100%) rename server/{ => observability}/periodic_metric_reader.cc (100%) rename server/{ => observability}/prometheus_exporter.cc (100%) rename server/{ => observability}/propagator.cc (100%) rename server/{ => observability}/sampler.cc (100%) rename server/{ => observability}/span.cc (100%) rename server/{ => observability}/trace_id.cc (100%) rename server/{ => observability}/trace_state.cc (100%) rename server/{ => observability}/tracer.cc (100%) rename server/{ => observability}/tracer_provider.cc (100%) rename server/{ => rate_limit}/rate_limit_zone.cc (100%) rename server/{ => rate_limit}/rate_limiter.cc (100%) rename server/{ => rate_limit}/token_bucket.cc (100%) rename server/{ => tls}/tls_client_context.cc (100%) rename server/{ => tls}/tls_connection.cc (100%) rename server/{ => tls}/tls_context.cc (100%) rename server/{ => upstream}/grpc_web_inbound_body_stream.cc (100%) rename server/{ => upstream}/h2_connection_table.cc (100%) rename server/{ => upstream}/header_rewriter.cc (100%) rename server/{ => upstream}/http_request_serializer.cc (100%) rename server/{ => upstream}/pool_partition.cc (100%) rename server/{ => upstream}/proxy_handler.cc (100%) rename server/{ => upstream}/proxy_transaction.cc (100%) rename server/{ => upstream}/retry_policy.cc (100%) rename server/{ => upstream}/upstream_connection.cc (100%) rename server/{ => upstream}/upstream_h2_codec.cc (100%) rename server/{ => upstream}/upstream_h2_connection.cc (100%) rename server/{ => upstream}/upstream_host_pool.cc (100%) rename server/{ => upstream}/upstream_http_codec.cc (100%) rename server/{ => upstream}/upstream_manager.cc (100%) rename server/{ => ws}/websocket_connection.cc (100%) rename server/{ => ws}/websocket_frame.cc (100%) rename server/{ => ws}/websocket_handshake.cc (100%) rename server/{ => ws}/websocket_parser.cc (100%) rename test/{ => auth}/auth_failure_mode_test.h (100%) rename test/{ => auth}/auth_foundation_test.h (100%) rename test/{ => auth}/auth_integration_test.h (100%) rename test/{ => auth}/auth_introspection_integration_test.h (100%) rename test/{ => auth}/auth_manager_test.h (100%) rename test/{ => auth}/auth_multi_issuer_test.h (100%) rename test/{ => auth}/auth_observability_test.h (100%) rename test/{ => auth}/auth_race_test.h (100%) rename test/{ => auth}/auth_reload_test.h (100%) rename test/{ => auth}/auth_websocket_upgrade_test.h (100%) rename test/{ => auth}/header_rewriter_auth_test.h (100%) rename test/{ => auth}/introspection_cache_test.h (100%) rename test/{ => auth}/introspection_client_test.h (100%) rename test/{ => auth}/jwks_cache_test.h (100%) rename test/{ => auth}/jwt_verifier_test.h (100%) rename test/{ => auth}/oidc_discovery_test.h (100%) rename test/{ => circuit_breaker}/circuit_breaker_components_test.h (100%) rename test/{ => circuit_breaker}/circuit_breaker_integration_test.h (100%) rename test/{ => circuit_breaker}/circuit_breaker_observability_test.h (100%) rename test/{ => circuit_breaker}/circuit_breaker_reload_test.h (100%) rename test/{ => circuit_breaker}/circuit_breaker_retry_budget_test.h (100%) rename test/{ => circuit_breaker}/circuit_breaker_test.h (100%) rename test/{ => circuit_breaker}/circuit_breaker_wait_queue_drain_test.h (100%) rename test/{ => cli}/cli_test.h (100%) rename test/{ => config}/config_test.h (100%) rename test/{ => grpc}/grpc_obs_test.h (99%) rename test/{ => grpc}/grpc_proxy_test.h (99%) rename test/{ => grpc}/grpc_test.h (100%) rename test/{ => grpc}/grpc_web_edge_test.h (99%) rename test/{ => grpc}/grpc_web_test.h (100%) rename test/{ => http}/http_internal_test.h (100%) rename test/{ => http}/http_test.h (100%) rename test/{ => http}/route_test.h (100%) rename test/{ => http}/router_async_middleware_test.h (99%) rename test/{ => http}/streaming_request_test.h (100%) rename test/{ => http}/timeout_test.h (100%) rename test/{ => http2}/h2_trailer_test.h (100%) rename test/{ => http2}/http2_internal_test.h (100%) rename test/{ => http2}/http2_test.h (100%) rename test/{ => net}/dns_resolver_test.h (100%) rename test/{ => net}/dual_stack_test.h (100%) rename test/{ => observability}/observability_auth_trace_test.h (100%) rename test/{ => observability}/observability_catalog_test.h (100%) rename test/{ => observability}/observability_config_test.h (100%) rename test/{ => observability}/observability_connection_metrics_test.h (100%) rename test/{ => observability}/observability_e2e_test.h (100%) rename test/{ => observability}/observability_export_pipeline_test.h (100%) rename test/{ => observability}/observability_foundation_test.h (100%) rename test/{ => observability}/observability_issue_inject_test.h (99%) rename test/{ => observability}/observability_jaeger_propagator_test.h (100%) rename test/{ => observability}/observability_kill_marshal_test.h (100%) rename test/{ => observability}/observability_link_kill_test.h (96%) rename test/{ => observability}/observability_manager_test.h (100%) rename test/{ => observability}/observability_metrics_test.h (100%) rename test/{ => observability}/observability_middleware_metrics_test.h (100%) rename test/{ => observability}/observability_pool_gauges_test.h (100%) rename test/{ => observability}/observability_prometheus_test.h (100%) rename test/{ => observability}/observability_propagator_test.h (100%) rename test/{ => observability}/observability_proxy_client_test.h (100%) rename test/{ => observability}/observability_self_handler_test.h (100%) rename test/{ => observability}/observability_self_metrics_test.h (100%) rename test/{ => observability}/observability_shutdown_test.h (99%) rename test/{ => observability}/observability_stress_test.h (99%) rename test/{ => observability}/observability_test_helpers.h (100%) rename test/{ => observability}/observability_tracer_test.h (100%) rename test/{ => observability}/observability_ws_messages_test.h (100%) rename test/{ => rate_limit}/rate_limit_test.h (100%) rename test/{ => tls}/tls_test.h (100%) rename test/{ => upstream}/h2_upstream_test.h (99%) rename test/{ => upstream}/proxy_test.h (100%) rename test/{ => upstream}/proxy_transaction_internal_test.h (100%) rename test/{ => upstream}/upstream_pool_test.h (100%) rename test/{ => ws}/websocket_test.h (100%) diff --git a/Makefile b/Makefile index c47eeba7..bce462df 100644 --- a/Makefile +++ b/Makefile @@ -50,7 +50,7 @@ SERVER_TARGET = server_runner REACTOR_SRCS = $(SERVER_DIR)/dispatcher.cc $(SERVER_DIR)/event_handler.cc $(SERVER_DIR)/epoll_handler.cc $(SERVER_DIR)/kqueue_handler.cc $(SERVER_DIR)/channel.cc # Network components -NETWORK_SRCS = $(SERVER_DIR)/inet_addr.cc $(SERVER_DIR)/dns_resolver.cc $(SERVER_DIR)/socket_handler.cc $(SERVER_DIR)/acceptor.cc $(SERVER_DIR)/connection_handler.cc +NETWORK_SRCS = $(SERVER_DIR)/inet_addr.cc $(SERVER_DIR)/net/dns_resolver.cc $(SERVER_DIR)/socket_handler.cc $(SERVER_DIR)/acceptor.cc $(SERVER_DIR)/connection_handler.cc # Server and buffer SERVER_SRCS = $(SERVER_DIR)/net_server.cc $(SERVER_DIR)/buffer.cc @@ -59,66 +59,66 @@ SERVER_SRCS = $(SERVER_DIR)/net_server.cc $(SERVER_DIR)/buffer.cc THREAD_POOL_SRCS = $(THREAD_POOL_DIR)/src/threadpool.cc $(THREAD_POOL_DIR)/src/threadtask.cc # Foundation sources (logging, config) -FOUNDATION_SRCS = $(SERVER_DIR)/logger.cc $(SERVER_DIR)/config_loader.cc +FOUNDATION_SRCS = $(SERVER_DIR)/log/logger.cc $(SERVER_DIR)/config/config_loader.cc # HTTP layer sources -HTTP_SRCS = $(SERVER_DIR)/http_response.cc $(SERVER_DIR)/http_parser.cc $(SERVER_DIR)/route_trie.cc $(SERVER_DIR)/http_router.cc $(SERVER_DIR)/http_connection_handler.cc $(SERVER_DIR)/http_server.cc $(SERVER_DIR)/body_stream.cc $(SERVER_DIR)/http2_trailer_sanitizer.cc +HTTP_SRCS = $(SERVER_DIR)/http/http_response.cc $(SERVER_DIR)/http/http_parser.cc $(SERVER_DIR)/http/route_trie.cc $(SERVER_DIR)/http/http_router.cc $(SERVER_DIR)/http/http_connection_handler.cc $(SERVER_DIR)/http/http_server.cc $(SERVER_DIR)/http/body_stream.cc $(SERVER_DIR)/http/http2_trailer_sanitizer.cc # WebSocket layer sources -WS_SRCS = $(SERVER_DIR)/websocket_frame.cc $(SERVER_DIR)/websocket_handshake.cc $(SERVER_DIR)/websocket_parser.cc $(SERVER_DIR)/websocket_connection.cc +WS_SRCS = $(SERVER_DIR)/ws/websocket_frame.cc $(SERVER_DIR)/ws/websocket_handshake.cc $(SERVER_DIR)/ws/websocket_parser.cc $(SERVER_DIR)/ws/websocket_connection.cc # HTTP/2 layer sources -HTTP2_SRCS = $(SERVER_DIR)/http2_session.cc $(SERVER_DIR)/http2_stream.cc $(SERVER_DIR)/http2_connection_handler.cc $(SERVER_DIR)/protocol_detector.cc +HTTP2_SRCS = $(SERVER_DIR)/http2/http2_session.cc $(SERVER_DIR)/http2/http2_stream.cc $(SERVER_DIR)/http2/http2_connection_handler.cc $(SERVER_DIR)/http2/protocol_detector.cc # TLS layer sources -TLS_SRCS = $(SERVER_DIR)/tls_context.cc $(SERVER_DIR)/tls_connection.cc $(SERVER_DIR)/tls_client_context.cc +TLS_SRCS = $(SERVER_DIR)/tls/tls_context.cc $(SERVER_DIR)/tls/tls_connection.cc $(SERVER_DIR)/tls/tls_client_context.cc # Upstream connection pool sources -UPSTREAM_SRCS = $(SERVER_DIR)/upstream_connection.cc $(SERVER_DIR)/pool_partition.cc $(SERVER_DIR)/upstream_host_pool.cc $(SERVER_DIR)/upstream_manager.cc $(SERVER_DIR)/header_rewriter.cc $(SERVER_DIR)/retry_policy.cc $(SERVER_DIR)/upstream_http_codec.cc $(SERVER_DIR)/upstream_h2_codec.cc $(SERVER_DIR)/upstream_h2_connection.cc $(SERVER_DIR)/h2_connection_table.cc $(SERVER_DIR)/http_request_serializer.cc $(SERVER_DIR)/proxy_transaction.cc $(SERVER_DIR)/proxy_handler.cc $(SERVER_DIR)/grpc_web_inbound_body_stream.cc +UPSTREAM_SRCS = $(SERVER_DIR)/upstream/upstream_connection.cc $(SERVER_DIR)/upstream/pool_partition.cc $(SERVER_DIR)/upstream/upstream_host_pool.cc $(SERVER_DIR)/upstream/upstream_manager.cc $(SERVER_DIR)/upstream/header_rewriter.cc $(SERVER_DIR)/upstream/retry_policy.cc $(SERVER_DIR)/upstream/upstream_http_codec.cc $(SERVER_DIR)/upstream/upstream_h2_codec.cc $(SERVER_DIR)/upstream/upstream_h2_connection.cc $(SERVER_DIR)/upstream/h2_connection_table.cc $(SERVER_DIR)/upstream/http_request_serializer.cc $(SERVER_DIR)/upstream/proxy_transaction.cc $(SERVER_DIR)/upstream/proxy_handler.cc $(SERVER_DIR)/upstream/grpc_web_inbound_body_stream.cc # Rate limit layer sources -RATE_LIMIT_SRCS = $(SERVER_DIR)/token_bucket.cc $(SERVER_DIR)/rate_limit_zone.cc $(SERVER_DIR)/rate_limiter.cc +RATE_LIMIT_SRCS = $(SERVER_DIR)/rate_limit/token_bucket.cc $(SERVER_DIR)/rate_limit/rate_limit_zone.cc $(SERVER_DIR)/rate_limit/rate_limiter.cc # Circuit breaker layer sources -CIRCUIT_BREAKER_SRCS = $(SERVER_DIR)/circuit_breaker_window.cc $(SERVER_DIR)/circuit_breaker_slice.cc $(SERVER_DIR)/retry_budget.cc $(SERVER_DIR)/circuit_breaker_host.cc $(SERVER_DIR)/circuit_breaker_manager.cc +CIRCUIT_BREAKER_SRCS = $(SERVER_DIR)/circuit_breaker/circuit_breaker_window.cc $(SERVER_DIR)/circuit_breaker/circuit_breaker_slice.cc $(SERVER_DIR)/circuit_breaker/retry_budget.cc $(SERVER_DIR)/circuit_breaker/circuit_breaker_host.cc $(SERVER_DIR)/circuit_breaker/circuit_breaker_manager.cc # Auth layer sources (OAuth 2.0 token validation — Layer 7 middleware) # Note: JWT decode + signature verification is delegated to vendored jwt-cpp # (third_party/jwt-cpp/, header-only). -AUTH_SRCS = $(SERVER_DIR)/token_hasher.cc $(SERVER_DIR)/auth_policy_matcher.cc $(SERVER_DIR)/auth_claims.cc \ - $(SERVER_DIR)/jwks_cache.cc $(SERVER_DIR)/auth_upstream_http_client.cc $(SERVER_DIR)/issuer.cc \ - $(SERVER_DIR)/jwks_fetcher.cc $(SERVER_DIR)/oidc_discovery.cc $(SERVER_DIR)/jwt_verifier.cc \ - $(SERVER_DIR)/auth_error_responses.cc $(SERVER_DIR)/auth_manager.cc $(SERVER_DIR)/auth_middleware.cc \ - $(SERVER_DIR)/auth_url_util.cc $(SERVER_DIR)/introspection_cache.cc \ - $(SERVER_DIR)/introspection_client.cc +AUTH_SRCS = $(SERVER_DIR)/auth/token_hasher.cc $(SERVER_DIR)/auth/auth_policy_matcher.cc $(SERVER_DIR)/auth/auth_claims.cc \ + $(SERVER_DIR)/auth/jwks_cache.cc $(SERVER_DIR)/auth/auth_upstream_http_client.cc $(SERVER_DIR)/auth/issuer.cc \ + $(SERVER_DIR)/auth/jwks_fetcher.cc $(SERVER_DIR)/auth/oidc_discovery.cc $(SERVER_DIR)/auth/jwt_verifier.cc \ + $(SERVER_DIR)/auth/auth_error_responses.cc $(SERVER_DIR)/auth/auth_manager.cc $(SERVER_DIR)/auth/auth_middleware.cc \ + $(SERVER_DIR)/auth/auth_url_util.cc $(SERVER_DIR)/auth/introspection_cache.cc \ + $(SERVER_DIR)/auth/introspection_client.cc # Observability layer sources (OpenTelemetry — Layer 7 middleware) # Foundational value types only at this stage; Span / Tracer / Meter # / OtlpHttpExporter / PrometheusExporter / ObservabilityManager land # in subsequent slices. -OBSERVABILITY_SRCS = $(SERVER_DIR)/trace_id.cc $(SERVER_DIR)/trace_state.cc \ - $(SERVER_DIR)/attr_value.cc $(SERVER_DIR)/sampler.cc \ - $(SERVER_DIR)/span.cc $(SERVER_DIR)/tracer.cc \ - $(SERVER_DIR)/tracer_provider.cc \ - $(SERVER_DIR)/metric_label_registry.cc \ - $(SERVER_DIR)/metric_writer_context.cc \ - $(SERVER_DIR)/counter.cc $(SERVER_DIR)/histogram.cc \ - $(SERVER_DIR)/meter.cc $(SERVER_DIR)/meter_provider.cc \ - $(SERVER_DIR)/metrics_catalog.cc \ - $(SERVER_DIR)/observability_manager.cc \ - $(SERVER_DIR)/observability_middleware.cc \ - $(SERVER_DIR)/propagator.cc \ - $(SERVER_DIR)/jaeger_propagator.cc \ - $(SERVER_DIR)/composite_propagator.cc \ - $(SERVER_DIR)/batch_span_processor.cc \ - $(SERVER_DIR)/periodic_metric_reader.cc \ - $(SERVER_DIR)/otlp_http_exporter.cc \ - $(SERVER_DIR)/otlp_transport.cc \ - $(SERVER_DIR)/prometheus_exporter.cc \ - $(SERVER_DIR)/metrics_handler.cc +OBSERVABILITY_SRCS = $(SERVER_DIR)/observability/trace_id.cc $(SERVER_DIR)/observability/trace_state.cc \ + $(SERVER_DIR)/observability/attr_value.cc $(SERVER_DIR)/observability/sampler.cc \ + $(SERVER_DIR)/observability/span.cc $(SERVER_DIR)/observability/tracer.cc \ + $(SERVER_DIR)/observability/tracer_provider.cc \ + $(SERVER_DIR)/observability/metric_label_registry.cc \ + $(SERVER_DIR)/observability/metric_writer_context.cc \ + $(SERVER_DIR)/observability/counter.cc $(SERVER_DIR)/observability/histogram.cc \ + $(SERVER_DIR)/observability/meter.cc $(SERVER_DIR)/observability/meter_provider.cc \ + $(SERVER_DIR)/observability/metrics_catalog.cc \ + $(SERVER_DIR)/observability/observability_manager.cc \ + $(SERVER_DIR)/observability/observability_middleware.cc \ + $(SERVER_DIR)/observability/propagator.cc \ + $(SERVER_DIR)/observability/jaeger_propagator.cc \ + $(SERVER_DIR)/observability/composite_propagator.cc \ + $(SERVER_DIR)/observability/batch_span_processor.cc \ + $(SERVER_DIR)/observability/periodic_metric_reader.cc \ + $(SERVER_DIR)/observability/otlp_http_exporter.cc \ + $(SERVER_DIR)/observability/otlp_transport.cc \ + $(SERVER_DIR)/observability/prometheus_exporter.cc \ + $(SERVER_DIR)/observability/metrics_handler.cc # CLI layer sources -CLI_SRCS = $(SERVER_DIR)/cli_parser.cc $(SERVER_DIR)/signal_handler.cc $(SERVER_DIR)/pid_file.cc $(SERVER_DIR)/daemonizer.cc +CLI_SRCS = $(SERVER_DIR)/cli/cli_parser.cc $(SERVER_DIR)/cli/signal_handler.cc $(SERVER_DIR)/cli/pid_file.cc $(SERVER_DIR)/cli/daemonizer.cc # Application code (test entry point) APP_SRCS = $(TEST_DIR)/test_framework.cc $(TEST_DIR)/run_test.cc @@ -131,10 +131,10 @@ UTIL_SRCS = $(UTIL_DIR)/timestamp.cc $(UTIL_DIR)/base64.cc # gRPC proxying helpers (Tier-2): status mapping, grpc-timeout parser/encoder, # Trailers-Only response synthesis. -GRPC_SRCS = $(SERVER_DIR)/grpc_status.cc \ - $(SERVER_DIR)/grpc_timeout.cc \ - $(SERVER_DIR)/grpc_synthesis.cc \ - $(SERVER_DIR)/grpc_web_bridge.cc +GRPC_SRCS = $(SERVER_DIR)/grpc/grpc_status.cc \ + $(SERVER_DIR)/grpc/grpc_timeout.cc \ + $(SERVER_DIR)/grpc/grpc_synthesis.cc \ + $(SERVER_DIR)/grpc/grpc_web_bridge.cc # llhttp C sources LLHTTP_SRC = $(THIRD_PARTY_DIR)/llhttp/llhttp.c $(THIRD_PARTY_DIR)/llhttp/api.c $(THIRD_PARTY_DIR)/llhttp/http.c @@ -199,10 +199,12 @@ JWT_CPP_DIR = $(THIRD_PARTY_DIR)/jwt-cpp/include/jwt-cpp AUTH_HEADERS = $(LIB_DIR)/auth/auth_context.h $(LIB_DIR)/auth/auth_config.h $(LIB_DIR)/auth/token_hasher.h $(LIB_DIR)/auth/auth_policy_matcher.h $(LIB_DIR)/auth/auth_claims.h $(LIB_DIR)/auth/auth_result.h $(LIB_DIR)/auth/auth_url_util.h $(LIB_DIR)/auth/jwks_cache.h $(LIB_DIR)/auth/upstream_http_client.h $(LIB_DIR)/auth/issuer.h $(LIB_DIR)/auth/jwks_fetcher.h $(LIB_DIR)/auth/oidc_discovery.h $(LIB_DIR)/auth/jwt_verifier.h $(LIB_DIR)/auth/auth_error_responses.h $(LIB_DIR)/auth/auth_manager.h $(LIB_DIR)/auth/auth_middleware.h $(LIB_DIR)/auth/introspection_cache.h $(LIB_DIR)/auth/introspection_client.h $(JWT_CPP_DIR)/jwt.h $(JWT_CPP_DIR)/base.h $(JWT_CPP_DIR)/traits/nlohmann-json/defaults.h $(JWT_CPP_DIR)/traits/nlohmann-json/traits.h CLI_HEADERS = $(LIB_DIR)/cli/cli_parser.h $(LIB_DIR)/cli/signal_handler.h $(LIB_DIR)/cli/pid_file.h $(LIB_DIR)/cli/version.h $(LIB_DIR)/cli/daemonizer.h GRPC_HEADERS = $(LIB_DIR)/grpc/grpc_reject_kind.h $(LIB_DIR)/grpc/grpc_status.h $(LIB_DIR)/grpc/grpc_timeout.h $(LIB_DIR)/grpc/grpc_synthesis.h -TEST_HEADERS = $(TEST_DIR)/test_framework.h $(TEST_DIR)/http_test_client.h $(TEST_DIR)/basic_test.h $(TEST_DIR)/stress_test.h $(TEST_DIR)/race_condition_test.h $(TEST_DIR)/timeout_test.h $(TEST_DIR)/config_test.h $(TEST_DIR)/http_test.h $(TEST_DIR)/websocket_test.h $(TEST_DIR)/tls_test.h $(TEST_DIR)/cli_test.h $(TEST_DIR)/http2_test.h $(TEST_DIR)/route_test.h $(TEST_DIR)/upstream_pool_test.h $(TEST_DIR)/proxy_test.h $(TEST_DIR)/rate_limit_test.h $(TEST_DIR)/kqueue_test.h $(TEST_DIR)/circuit_breaker_test.h $(TEST_DIR)/circuit_breaker_components_test.h $(TEST_DIR)/circuit_breaker_integration_test.h $(TEST_DIR)/circuit_breaker_retry_budget_test.h $(TEST_DIR)/circuit_breaker_wait_queue_drain_test.h $(TEST_DIR)/circuit_breaker_observability_test.h $(TEST_DIR)/circuit_breaker_reload_test.h $(TEST_DIR)/auth_foundation_test.h $(TEST_DIR)/jwt_verifier_test.h $(TEST_DIR)/jwks_cache_test.h $(TEST_DIR)/oidc_discovery_test.h $(TEST_DIR)/header_rewriter_auth_test.h $(TEST_DIR)/auth_manager_test.h $(TEST_DIR)/auth_integration_test.h $(TEST_DIR)/auth_failure_mode_test.h $(TEST_DIR)/auth_reload_test.h $(TEST_DIR)/auth_multi_issuer_test.h $(TEST_DIR)/auth_websocket_upgrade_test.h $(TEST_DIR)/auth_race_test.h $(TEST_DIR)/dns_resolver_test.h $(TEST_DIR)/dual_stack_test.h $(TEST_DIR)/router_async_middleware_test.h $(TEST_DIR)/introspection_cache_test.h $(TEST_DIR)/introspection_client_test.h $(TEST_DIR)/mock_introspection_server.h $(TEST_DIR)/auth_introspection_integration_test.h $(TEST_DIR)/auth_observability_test.h $(TEST_DIR)/h2_upstream_test.h $(TEST_DIR)/observability_test_helpers.h $(TEST_DIR)/observability_foundation_test.h $(TEST_DIR)/observability_tracer_test.h $(TEST_DIR)/observability_metrics_test.h $(TEST_DIR)/observability_manager_test.h $(TEST_DIR)/observability_propagator_test.h $(TEST_DIR)/observability_export_pipeline_test.h $(TEST_DIR)/observability_prometheus_test.h $(TEST_DIR)/observability_config_test.h $(TEST_DIR)/observability_shutdown_test.h $(TEST_DIR)/observability_link_kill_test.h $(TEST_DIR)/observability_issue_inject_test.h $(TEST_DIR)/observability_stress_test.h $(TEST_DIR)/observability_e2e_test.h $(TEST_DIR)/observability_self_handler_test.h $(TEST_DIR)/observability_proxy_client_test.h $(TEST_DIR)/observability_auth_trace_test.h $(TEST_DIR)/observability_catalog_test.h $(TEST_DIR)/observability_kill_marshal_test.h $(TEST_DIR)/observability_pool_gauges_test.h $(TEST_DIR)/observability_middleware_metrics_test.h $(TEST_DIR)/observability_self_metrics_test.h $(TEST_DIR)/observability_connection_metrics_test.h $(TEST_DIR)/observability_jaeger_propagator_test.h $(TEST_DIR)/observability_ws_messages_test.h $(TEST_DIR)/sharded_lru_cache_test.h \ - $(TEST_DIR)/streaming_request_test.h $(TEST_DIR)/h2_trailer_test.h \ - $(TEST_DIR)/grpc_test.h $(TEST_DIR)/grpc_proxy_test.h $(TEST_DIR)/grpc_obs_test.h \ - $(TEST_DIR)/grpc_web_test.h $(TEST_DIR)/grpc_web_edge_test.h +TEST_HEADERS = $(TEST_DIR)/test_framework.h $(TEST_DIR)/http_test_client.h $(TEST_DIR)/basic_test.h $(TEST_DIR)/stress_test.h $(TEST_DIR)/race_condition_test.h $(TEST_DIR)/http/timeout_test.h $(TEST_DIR)/config/config_test.h $(TEST_DIR)/http/http_test.h $(TEST_DIR)/ws/websocket_test.h $(TEST_DIR)/tls/tls_test.h $(TEST_DIR)/cli/cli_test.h $(TEST_DIR)/http2/http2_test.h $(TEST_DIR)/http/route_test.h $(TEST_DIR)/upstream/upstream_pool_test.h $(TEST_DIR)/upstream/proxy_test.h $(TEST_DIR)/rate_limit/rate_limit_test.h $(TEST_DIR)/kqueue_test.h $(TEST_DIR)/circuit_breaker/circuit_breaker_test.h $(TEST_DIR)/circuit_breaker/circuit_breaker_components_test.h $(TEST_DIR)/circuit_breaker/circuit_breaker_integration_test.h $(TEST_DIR)/circuit_breaker/circuit_breaker_retry_budget_test.h $(TEST_DIR)/circuit_breaker/circuit_breaker_wait_queue_drain_test.h $(TEST_DIR)/circuit_breaker/circuit_breaker_observability_test.h $(TEST_DIR)/circuit_breaker/circuit_breaker_reload_test.h $(TEST_DIR)/auth/auth_foundation_test.h $(TEST_DIR)/auth/jwt_verifier_test.h $(TEST_DIR)/auth/jwks_cache_test.h $(TEST_DIR)/auth/oidc_discovery_test.h $(TEST_DIR)/auth/header_rewriter_auth_test.h $(TEST_DIR)/auth/auth_manager_test.h $(TEST_DIR)/auth/auth_integration_test.h $(TEST_DIR)/auth/auth_failure_mode_test.h $(TEST_DIR)/auth/auth_reload_test.h $(TEST_DIR)/auth/auth_multi_issuer_test.h $(TEST_DIR)/auth/auth_websocket_upgrade_test.h $(TEST_DIR)/auth/auth_race_test.h $(TEST_DIR)/net/dns_resolver_test.h $(TEST_DIR)/net/dual_stack_test.h $(TEST_DIR)/http/router_async_middleware_test.h $(TEST_DIR)/auth/introspection_cache_test.h $(TEST_DIR)/auth/introspection_client_test.h $(TEST_DIR)/mock_introspection_server.h $(TEST_DIR)/auth/auth_introspection_integration_test.h $(TEST_DIR)/auth/auth_observability_test.h $(TEST_DIR)/upstream/h2_upstream_test.h $(TEST_DIR)/observability/observability_test_helpers.h $(TEST_DIR)/observability/observability_foundation_test.h $(TEST_DIR)/observability/observability_tracer_test.h $(TEST_DIR)/observability/observability_metrics_test.h $(TEST_DIR)/observability/observability_manager_test.h $(TEST_DIR)/observability/observability_propagator_test.h $(TEST_DIR)/observability/observability_export_pipeline_test.h $(TEST_DIR)/observability/observability_prometheus_test.h $(TEST_DIR)/observability/observability_config_test.h $(TEST_DIR)/observability/observability_shutdown_test.h $(TEST_DIR)/observability/observability_link_kill_test.h $(TEST_DIR)/observability/observability_issue_inject_test.h $(TEST_DIR)/observability/observability_stress_test.h $(TEST_DIR)/observability/observability_e2e_test.h $(TEST_DIR)/observability/observability_self_handler_test.h $(TEST_DIR)/observability/observability_proxy_client_test.h $(TEST_DIR)/observability/observability_auth_trace_test.h $(TEST_DIR)/observability/observability_catalog_test.h $(TEST_DIR)/observability/observability_kill_marshal_test.h $(TEST_DIR)/observability/observability_pool_gauges_test.h $(TEST_DIR)/observability/observability_middleware_metrics_test.h $(TEST_DIR)/observability/observability_self_metrics_test.h $(TEST_DIR)/observability/observability_connection_metrics_test.h $(TEST_DIR)/observability/observability_jaeger_propagator_test.h $(TEST_DIR)/observability/observability_ws_messages_test.h $(TEST_DIR)/sharded_lru_cache_test.h \ + $(TEST_DIR)/http/streaming_request_test.h $(TEST_DIR)/http2/h2_trailer_test.h \ + $(TEST_DIR)/grpc/grpc_test.h $(TEST_DIR)/grpc/grpc_proxy_test.h $(TEST_DIR)/grpc/grpc_obs_test.h \ + $(TEST_DIR)/grpc/grpc_web_test.h $(TEST_DIR)/grpc/grpc_web_edge_test.h \ + $(TEST_DIR)/http/http_internal_test.h $(TEST_DIR)/http2/http2_internal_test.h \ + $(TEST_DIR)/upstream/proxy_transaction_internal_test.h # All headers combined HEADERS = $(CORE_HEADERS) $(CALLBACK_HEADERS) $(REACTOR_HEADERS) $(NETWORK_HEADERS) $(DNS_HEADERS) $(SERVER_HEADERS) $(THREAD_POOL_HEADERS) $(UTIL_HEADERS) $(FOUNDATION_HEADERS) $(HTTP_HEADERS) $(HTTP2_HEADERS) $(WS_HEADERS) $(TLS_HEADERS) $(UPSTREAM_HEADERS) $(RATE_LIMIT_HEADERS) $(CIRCUIT_BREAKER_HEADERS) $(AUTH_HEADERS) $(CLI_HEADERS) $(GRPC_HEADERS) $(OBSERVABILITY_HEADERS) $(TEST_HEADERS) diff --git a/server/auth_claims.cc b/server/auth/auth_claims.cc similarity index 100% rename from server/auth_claims.cc rename to server/auth/auth_claims.cc diff --git a/server/auth_error_responses.cc b/server/auth/auth_error_responses.cc similarity index 100% rename from server/auth_error_responses.cc rename to server/auth/auth_error_responses.cc diff --git a/server/auth_manager.cc b/server/auth/auth_manager.cc similarity index 100% rename from server/auth_manager.cc rename to server/auth/auth_manager.cc diff --git a/server/auth_middleware.cc b/server/auth/auth_middleware.cc similarity index 100% rename from server/auth_middleware.cc rename to server/auth/auth_middleware.cc diff --git a/server/auth_policy_matcher.cc b/server/auth/auth_policy_matcher.cc similarity index 100% rename from server/auth_policy_matcher.cc rename to server/auth/auth_policy_matcher.cc diff --git a/server/auth_upstream_http_client.cc b/server/auth/auth_upstream_http_client.cc similarity index 100% rename from server/auth_upstream_http_client.cc rename to server/auth/auth_upstream_http_client.cc diff --git a/server/auth_url_util.cc b/server/auth/auth_url_util.cc similarity index 100% rename from server/auth_url_util.cc rename to server/auth/auth_url_util.cc diff --git a/server/introspection_cache.cc b/server/auth/introspection_cache.cc similarity index 100% rename from server/introspection_cache.cc rename to server/auth/introspection_cache.cc diff --git a/server/introspection_client.cc b/server/auth/introspection_client.cc similarity index 100% rename from server/introspection_client.cc rename to server/auth/introspection_client.cc diff --git a/server/issuer.cc b/server/auth/issuer.cc similarity index 100% rename from server/issuer.cc rename to server/auth/issuer.cc diff --git a/server/jwks_cache.cc b/server/auth/jwks_cache.cc similarity index 100% rename from server/jwks_cache.cc rename to server/auth/jwks_cache.cc diff --git a/server/jwks_fetcher.cc b/server/auth/jwks_fetcher.cc similarity index 100% rename from server/jwks_fetcher.cc rename to server/auth/jwks_fetcher.cc diff --git a/server/jwt_verifier.cc b/server/auth/jwt_verifier.cc similarity index 100% rename from server/jwt_verifier.cc rename to server/auth/jwt_verifier.cc diff --git a/server/oidc_discovery.cc b/server/auth/oidc_discovery.cc similarity index 100% rename from server/oidc_discovery.cc rename to server/auth/oidc_discovery.cc diff --git a/server/token_hasher.cc b/server/auth/token_hasher.cc similarity index 100% rename from server/token_hasher.cc rename to server/auth/token_hasher.cc diff --git a/server/circuit_breaker_host.cc b/server/circuit_breaker/circuit_breaker_host.cc similarity index 100% rename from server/circuit_breaker_host.cc rename to server/circuit_breaker/circuit_breaker_host.cc diff --git a/server/circuit_breaker_manager.cc b/server/circuit_breaker/circuit_breaker_manager.cc similarity index 100% rename from server/circuit_breaker_manager.cc rename to server/circuit_breaker/circuit_breaker_manager.cc diff --git a/server/circuit_breaker_slice.cc b/server/circuit_breaker/circuit_breaker_slice.cc similarity index 100% rename from server/circuit_breaker_slice.cc rename to server/circuit_breaker/circuit_breaker_slice.cc diff --git a/server/circuit_breaker_window.cc b/server/circuit_breaker/circuit_breaker_window.cc similarity index 100% rename from server/circuit_breaker_window.cc rename to server/circuit_breaker/circuit_breaker_window.cc diff --git a/server/retry_budget.cc b/server/circuit_breaker/retry_budget.cc similarity index 100% rename from server/retry_budget.cc rename to server/circuit_breaker/retry_budget.cc diff --git a/server/cli_parser.cc b/server/cli/cli_parser.cc similarity index 100% rename from server/cli_parser.cc rename to server/cli/cli_parser.cc diff --git a/server/daemonizer.cc b/server/cli/daemonizer.cc similarity index 100% rename from server/daemonizer.cc rename to server/cli/daemonizer.cc diff --git a/server/pid_file.cc b/server/cli/pid_file.cc similarity index 100% rename from server/pid_file.cc rename to server/cli/pid_file.cc diff --git a/server/signal_handler.cc b/server/cli/signal_handler.cc similarity index 100% rename from server/signal_handler.cc rename to server/cli/signal_handler.cc diff --git a/server/config_loader.cc b/server/config/config_loader.cc similarity index 100% rename from server/config_loader.cc rename to server/config/config_loader.cc diff --git a/server/grpc_status.cc b/server/grpc/grpc_status.cc similarity index 100% rename from server/grpc_status.cc rename to server/grpc/grpc_status.cc diff --git a/server/grpc_synthesis.cc b/server/grpc/grpc_synthesis.cc similarity index 100% rename from server/grpc_synthesis.cc rename to server/grpc/grpc_synthesis.cc diff --git a/server/grpc_timeout.cc b/server/grpc/grpc_timeout.cc similarity index 100% rename from server/grpc_timeout.cc rename to server/grpc/grpc_timeout.cc diff --git a/server/grpc_web_bridge.cc b/server/grpc/grpc_web_bridge.cc similarity index 100% rename from server/grpc_web_bridge.cc rename to server/grpc/grpc_web_bridge.cc diff --git a/server/body_stream.cc b/server/http/body_stream.cc similarity index 100% rename from server/body_stream.cc rename to server/http/body_stream.cc diff --git a/server/http2_trailer_sanitizer.cc b/server/http/http2_trailer_sanitizer.cc similarity index 100% rename from server/http2_trailer_sanitizer.cc rename to server/http/http2_trailer_sanitizer.cc diff --git a/server/http_connection_handler.cc b/server/http/http_connection_handler.cc similarity index 100% rename from server/http_connection_handler.cc rename to server/http/http_connection_handler.cc diff --git a/server/http_parser.cc b/server/http/http_parser.cc similarity index 100% rename from server/http_parser.cc rename to server/http/http_parser.cc diff --git a/server/http_response.cc b/server/http/http_response.cc similarity index 100% rename from server/http_response.cc rename to server/http/http_response.cc diff --git a/server/http_router.cc b/server/http/http_router.cc similarity index 100% rename from server/http_router.cc rename to server/http/http_router.cc diff --git a/server/http_server.cc b/server/http/http_server.cc similarity index 100% rename from server/http_server.cc rename to server/http/http_server.cc diff --git a/server/route_trie.cc b/server/http/route_trie.cc similarity index 100% rename from server/route_trie.cc rename to server/http/route_trie.cc diff --git a/server/http2_connection_handler.cc b/server/http2/http2_connection_handler.cc similarity index 100% rename from server/http2_connection_handler.cc rename to server/http2/http2_connection_handler.cc diff --git a/server/http2_session.cc b/server/http2/http2_session.cc similarity index 100% rename from server/http2_session.cc rename to server/http2/http2_session.cc diff --git a/server/http2_stream.cc b/server/http2/http2_stream.cc similarity index 100% rename from server/http2_stream.cc rename to server/http2/http2_stream.cc diff --git a/server/protocol_detector.cc b/server/http2/protocol_detector.cc similarity index 100% rename from server/protocol_detector.cc rename to server/http2/protocol_detector.cc diff --git a/server/logger.cc b/server/log/logger.cc similarity index 100% rename from server/logger.cc rename to server/log/logger.cc diff --git a/server/dns_resolver.cc b/server/net/dns_resolver.cc similarity index 100% rename from server/dns_resolver.cc rename to server/net/dns_resolver.cc diff --git a/server/attr_value.cc b/server/observability/attr_value.cc similarity index 100% rename from server/attr_value.cc rename to server/observability/attr_value.cc diff --git a/server/batch_span_processor.cc b/server/observability/batch_span_processor.cc similarity index 100% rename from server/batch_span_processor.cc rename to server/observability/batch_span_processor.cc diff --git a/server/composite_propagator.cc b/server/observability/composite_propagator.cc similarity index 100% rename from server/composite_propagator.cc rename to server/observability/composite_propagator.cc diff --git a/server/counter.cc b/server/observability/counter.cc similarity index 100% rename from server/counter.cc rename to server/observability/counter.cc diff --git a/server/histogram.cc b/server/observability/histogram.cc similarity index 100% rename from server/histogram.cc rename to server/observability/histogram.cc diff --git a/server/jaeger_propagator.cc b/server/observability/jaeger_propagator.cc similarity index 100% rename from server/jaeger_propagator.cc rename to server/observability/jaeger_propagator.cc diff --git a/server/meter.cc b/server/observability/meter.cc similarity index 100% rename from server/meter.cc rename to server/observability/meter.cc diff --git a/server/meter_provider.cc b/server/observability/meter_provider.cc similarity index 100% rename from server/meter_provider.cc rename to server/observability/meter_provider.cc diff --git a/server/metric_label_registry.cc b/server/observability/metric_label_registry.cc similarity index 100% rename from server/metric_label_registry.cc rename to server/observability/metric_label_registry.cc diff --git a/server/metric_writer_context.cc b/server/observability/metric_writer_context.cc similarity index 100% rename from server/metric_writer_context.cc rename to server/observability/metric_writer_context.cc diff --git a/server/metrics_catalog.cc b/server/observability/metrics_catalog.cc similarity index 100% rename from server/metrics_catalog.cc rename to server/observability/metrics_catalog.cc diff --git a/server/metrics_handler.cc b/server/observability/metrics_handler.cc similarity index 100% rename from server/metrics_handler.cc rename to server/observability/metrics_handler.cc diff --git a/server/observability_manager.cc b/server/observability/observability_manager.cc similarity index 100% rename from server/observability_manager.cc rename to server/observability/observability_manager.cc diff --git a/server/observability_middleware.cc b/server/observability/observability_middleware.cc similarity index 100% rename from server/observability_middleware.cc rename to server/observability/observability_middleware.cc diff --git a/server/otlp_http_exporter.cc b/server/observability/otlp_http_exporter.cc similarity index 100% rename from server/otlp_http_exporter.cc rename to server/observability/otlp_http_exporter.cc diff --git a/server/otlp_transport.cc b/server/observability/otlp_transport.cc similarity index 100% rename from server/otlp_transport.cc rename to server/observability/otlp_transport.cc diff --git a/server/periodic_metric_reader.cc b/server/observability/periodic_metric_reader.cc similarity index 100% rename from server/periodic_metric_reader.cc rename to server/observability/periodic_metric_reader.cc diff --git a/server/prometheus_exporter.cc b/server/observability/prometheus_exporter.cc similarity index 100% rename from server/prometheus_exporter.cc rename to server/observability/prometheus_exporter.cc diff --git a/server/propagator.cc b/server/observability/propagator.cc similarity index 100% rename from server/propagator.cc rename to server/observability/propagator.cc diff --git a/server/sampler.cc b/server/observability/sampler.cc similarity index 100% rename from server/sampler.cc rename to server/observability/sampler.cc diff --git a/server/span.cc b/server/observability/span.cc similarity index 100% rename from server/span.cc rename to server/observability/span.cc diff --git a/server/trace_id.cc b/server/observability/trace_id.cc similarity index 100% rename from server/trace_id.cc rename to server/observability/trace_id.cc diff --git a/server/trace_state.cc b/server/observability/trace_state.cc similarity index 100% rename from server/trace_state.cc rename to server/observability/trace_state.cc diff --git a/server/tracer.cc b/server/observability/tracer.cc similarity index 100% rename from server/tracer.cc rename to server/observability/tracer.cc diff --git a/server/tracer_provider.cc b/server/observability/tracer_provider.cc similarity index 100% rename from server/tracer_provider.cc rename to server/observability/tracer_provider.cc diff --git a/server/rate_limit_zone.cc b/server/rate_limit/rate_limit_zone.cc similarity index 100% rename from server/rate_limit_zone.cc rename to server/rate_limit/rate_limit_zone.cc diff --git a/server/rate_limiter.cc b/server/rate_limit/rate_limiter.cc similarity index 100% rename from server/rate_limiter.cc rename to server/rate_limit/rate_limiter.cc diff --git a/server/token_bucket.cc b/server/rate_limit/token_bucket.cc similarity index 100% rename from server/token_bucket.cc rename to server/rate_limit/token_bucket.cc diff --git a/server/tls_client_context.cc b/server/tls/tls_client_context.cc similarity index 100% rename from server/tls_client_context.cc rename to server/tls/tls_client_context.cc diff --git a/server/tls_connection.cc b/server/tls/tls_connection.cc similarity index 100% rename from server/tls_connection.cc rename to server/tls/tls_connection.cc diff --git a/server/tls_context.cc b/server/tls/tls_context.cc similarity index 100% rename from server/tls_context.cc rename to server/tls/tls_context.cc diff --git a/server/grpc_web_inbound_body_stream.cc b/server/upstream/grpc_web_inbound_body_stream.cc similarity index 100% rename from server/grpc_web_inbound_body_stream.cc rename to server/upstream/grpc_web_inbound_body_stream.cc diff --git a/server/h2_connection_table.cc b/server/upstream/h2_connection_table.cc similarity index 100% rename from server/h2_connection_table.cc rename to server/upstream/h2_connection_table.cc diff --git a/server/header_rewriter.cc b/server/upstream/header_rewriter.cc similarity index 100% rename from server/header_rewriter.cc rename to server/upstream/header_rewriter.cc diff --git a/server/http_request_serializer.cc b/server/upstream/http_request_serializer.cc similarity index 100% rename from server/http_request_serializer.cc rename to server/upstream/http_request_serializer.cc diff --git a/server/pool_partition.cc b/server/upstream/pool_partition.cc similarity index 100% rename from server/pool_partition.cc rename to server/upstream/pool_partition.cc diff --git a/server/proxy_handler.cc b/server/upstream/proxy_handler.cc similarity index 100% rename from server/proxy_handler.cc rename to server/upstream/proxy_handler.cc diff --git a/server/proxy_transaction.cc b/server/upstream/proxy_transaction.cc similarity index 100% rename from server/proxy_transaction.cc rename to server/upstream/proxy_transaction.cc diff --git a/server/retry_policy.cc b/server/upstream/retry_policy.cc similarity index 100% rename from server/retry_policy.cc rename to server/upstream/retry_policy.cc diff --git a/server/upstream_connection.cc b/server/upstream/upstream_connection.cc similarity index 100% rename from server/upstream_connection.cc rename to server/upstream/upstream_connection.cc diff --git a/server/upstream_h2_codec.cc b/server/upstream/upstream_h2_codec.cc similarity index 100% rename from server/upstream_h2_codec.cc rename to server/upstream/upstream_h2_codec.cc diff --git a/server/upstream_h2_connection.cc b/server/upstream/upstream_h2_connection.cc similarity index 100% rename from server/upstream_h2_connection.cc rename to server/upstream/upstream_h2_connection.cc diff --git a/server/upstream_host_pool.cc b/server/upstream/upstream_host_pool.cc similarity index 100% rename from server/upstream_host_pool.cc rename to server/upstream/upstream_host_pool.cc diff --git a/server/upstream_http_codec.cc b/server/upstream/upstream_http_codec.cc similarity index 100% rename from server/upstream_http_codec.cc rename to server/upstream/upstream_http_codec.cc diff --git a/server/upstream_manager.cc b/server/upstream/upstream_manager.cc similarity index 100% rename from server/upstream_manager.cc rename to server/upstream/upstream_manager.cc diff --git a/server/websocket_connection.cc b/server/ws/websocket_connection.cc similarity index 100% rename from server/websocket_connection.cc rename to server/ws/websocket_connection.cc diff --git a/server/websocket_frame.cc b/server/ws/websocket_frame.cc similarity index 100% rename from server/websocket_frame.cc rename to server/ws/websocket_frame.cc diff --git a/server/websocket_handshake.cc b/server/ws/websocket_handshake.cc similarity index 100% rename from server/websocket_handshake.cc rename to server/ws/websocket_handshake.cc diff --git a/server/websocket_parser.cc b/server/ws/websocket_parser.cc similarity index 100% rename from server/websocket_parser.cc rename to server/ws/websocket_parser.cc diff --git a/test/auth_failure_mode_test.h b/test/auth/auth_failure_mode_test.h similarity index 100% rename from test/auth_failure_mode_test.h rename to test/auth/auth_failure_mode_test.h diff --git a/test/auth_foundation_test.h b/test/auth/auth_foundation_test.h similarity index 100% rename from test/auth_foundation_test.h rename to test/auth/auth_foundation_test.h diff --git a/test/auth_integration_test.h b/test/auth/auth_integration_test.h similarity index 100% rename from test/auth_integration_test.h rename to test/auth/auth_integration_test.h diff --git a/test/auth_introspection_integration_test.h b/test/auth/auth_introspection_integration_test.h similarity index 100% rename from test/auth_introspection_integration_test.h rename to test/auth/auth_introspection_integration_test.h diff --git a/test/auth_manager_test.h b/test/auth/auth_manager_test.h similarity index 100% rename from test/auth_manager_test.h rename to test/auth/auth_manager_test.h diff --git a/test/auth_multi_issuer_test.h b/test/auth/auth_multi_issuer_test.h similarity index 100% rename from test/auth_multi_issuer_test.h rename to test/auth/auth_multi_issuer_test.h diff --git a/test/auth_observability_test.h b/test/auth/auth_observability_test.h similarity index 100% rename from test/auth_observability_test.h rename to test/auth/auth_observability_test.h diff --git a/test/auth_race_test.h b/test/auth/auth_race_test.h similarity index 100% rename from test/auth_race_test.h rename to test/auth/auth_race_test.h diff --git a/test/auth_reload_test.h b/test/auth/auth_reload_test.h similarity index 100% rename from test/auth_reload_test.h rename to test/auth/auth_reload_test.h diff --git a/test/auth_websocket_upgrade_test.h b/test/auth/auth_websocket_upgrade_test.h similarity index 100% rename from test/auth_websocket_upgrade_test.h rename to test/auth/auth_websocket_upgrade_test.h diff --git a/test/header_rewriter_auth_test.h b/test/auth/header_rewriter_auth_test.h similarity index 100% rename from test/header_rewriter_auth_test.h rename to test/auth/header_rewriter_auth_test.h diff --git a/test/introspection_cache_test.h b/test/auth/introspection_cache_test.h similarity index 100% rename from test/introspection_cache_test.h rename to test/auth/introspection_cache_test.h diff --git a/test/introspection_client_test.h b/test/auth/introspection_client_test.h similarity index 100% rename from test/introspection_client_test.h rename to test/auth/introspection_client_test.h diff --git a/test/jwks_cache_test.h b/test/auth/jwks_cache_test.h similarity index 100% rename from test/jwks_cache_test.h rename to test/auth/jwks_cache_test.h diff --git a/test/jwt_verifier_test.h b/test/auth/jwt_verifier_test.h similarity index 100% rename from test/jwt_verifier_test.h rename to test/auth/jwt_verifier_test.h diff --git a/test/oidc_discovery_test.h b/test/auth/oidc_discovery_test.h similarity index 100% rename from test/oidc_discovery_test.h rename to test/auth/oidc_discovery_test.h diff --git a/test/circuit_breaker_components_test.h b/test/circuit_breaker/circuit_breaker_components_test.h similarity index 100% rename from test/circuit_breaker_components_test.h rename to test/circuit_breaker/circuit_breaker_components_test.h diff --git a/test/circuit_breaker_integration_test.h b/test/circuit_breaker/circuit_breaker_integration_test.h similarity index 100% rename from test/circuit_breaker_integration_test.h rename to test/circuit_breaker/circuit_breaker_integration_test.h diff --git a/test/circuit_breaker_observability_test.h b/test/circuit_breaker/circuit_breaker_observability_test.h similarity index 100% rename from test/circuit_breaker_observability_test.h rename to test/circuit_breaker/circuit_breaker_observability_test.h diff --git a/test/circuit_breaker_reload_test.h b/test/circuit_breaker/circuit_breaker_reload_test.h similarity index 100% rename from test/circuit_breaker_reload_test.h rename to test/circuit_breaker/circuit_breaker_reload_test.h diff --git a/test/circuit_breaker_retry_budget_test.h b/test/circuit_breaker/circuit_breaker_retry_budget_test.h similarity index 100% rename from test/circuit_breaker_retry_budget_test.h rename to test/circuit_breaker/circuit_breaker_retry_budget_test.h diff --git a/test/circuit_breaker_test.h b/test/circuit_breaker/circuit_breaker_test.h similarity index 100% rename from test/circuit_breaker_test.h rename to test/circuit_breaker/circuit_breaker_test.h diff --git a/test/circuit_breaker_wait_queue_drain_test.h b/test/circuit_breaker/circuit_breaker_wait_queue_drain_test.h similarity index 100% rename from test/circuit_breaker_wait_queue_drain_test.h rename to test/circuit_breaker/circuit_breaker_wait_queue_drain_test.h diff --git a/test/cli_test.h b/test/cli/cli_test.h similarity index 100% rename from test/cli_test.h rename to test/cli/cli_test.h diff --git a/test/config_test.h b/test/config/config_test.h similarity index 100% rename from test/config_test.h rename to test/config/config_test.h diff --git a/test/grpc_obs_test.h b/test/grpc/grpc_obs_test.h similarity index 99% rename from test/grpc_obs_test.h rename to test/grpc/grpc_obs_test.h index fcfb2d16..36cb86c4 100644 --- a/test/grpc_obs_test.h +++ b/test/grpc/grpc_obs_test.h @@ -73,7 +73,7 @@ #include "observability/sampler.h" #include "observability/trace_id.h" -#include "h2_trailer_test.h" // TrailerAwareHttp2Client + FindTrailer +#include "http2/h2_trailer_test.h" // TrailerAwareHttp2Client + FindTrailer #include #include diff --git a/test/grpc_proxy_test.h b/test/grpc/grpc_proxy_test.h similarity index 99% rename from test/grpc_proxy_test.h rename to test/grpc/grpc_proxy_test.h index c8d00df1..1063abd8 100644 --- a/test/grpc_proxy_test.h +++ b/test/grpc/grpc_proxy_test.h @@ -44,7 +44,7 @@ #include "observability/sampler.h" #include "observability/trace_id.h" // RandomSource -#include "h2_trailer_test.h" // reuse TrailerAwareHttp2Client + FindTrailer +#include "http2/h2_trailer_test.h" // reuse TrailerAwareHttp2Client + FindTrailer #include "grpc/grpc_web_bridge.h" // BuildTrailerFrame for GW1 expected-bytes #include "base64.h" // UTIL_NAMESPACE::EncodeNoNewline for GW2 #include "http_test_client.h" // SendHttpRequest, HasStatus, ExtractBody diff --git a/test/grpc_test.h b/test/grpc/grpc_test.h similarity index 100% rename from test/grpc_test.h rename to test/grpc/grpc_test.h diff --git a/test/grpc_web_edge_test.h b/test/grpc/grpc_web_edge_test.h similarity index 99% rename from test/grpc_web_edge_test.h rename to test/grpc/grpc_web_edge_test.h index 11d5f107..979efccc 100644 --- a/test/grpc_web_edge_test.h +++ b/test/grpc/grpc_web_edge_test.h @@ -78,7 +78,7 @@ #include "upstream/grpc_web_inbound_body_stream.h" #include "base64.h" -#include "h2_trailer_test.h" // TrailerAwareHttp2Client, FindTrailer +#include "http2/h2_trailer_test.h" // TrailerAwareHttp2Client, FindTrailer #include #include diff --git a/test/grpc_web_test.h b/test/grpc/grpc_web_test.h similarity index 100% rename from test/grpc_web_test.h rename to test/grpc/grpc_web_test.h diff --git a/test/http_internal_test.h b/test/http/http_internal_test.h similarity index 100% rename from test/http_internal_test.h rename to test/http/http_internal_test.h diff --git a/test/http_test.h b/test/http/http_test.h similarity index 100% rename from test/http_test.h rename to test/http/http_test.h diff --git a/test/route_test.h b/test/http/route_test.h similarity index 100% rename from test/route_test.h rename to test/http/route_test.h diff --git a/test/router_async_middleware_test.h b/test/http/router_async_middleware_test.h similarity index 99% rename from test/router_async_middleware_test.h rename to test/http/router_async_middleware_test.h index 0c241afb..069237e8 100644 --- a/test/router_async_middleware_test.h +++ b/test/http/router_async_middleware_test.h @@ -25,7 +25,7 @@ #include // Pull in the H2 test client (declared in http2_test.h). -#include "http2_test.h" +#include "http2/http2_test.h" namespace RouterAsyncMiddlewareTests { diff --git a/test/streaming_request_test.h b/test/http/streaming_request_test.h similarity index 100% rename from test/streaming_request_test.h rename to test/http/streaming_request_test.h diff --git a/test/timeout_test.h b/test/http/timeout_test.h similarity index 100% rename from test/timeout_test.h rename to test/http/timeout_test.h diff --git a/test/h2_trailer_test.h b/test/http2/h2_trailer_test.h similarity index 100% rename from test/h2_trailer_test.h rename to test/http2/h2_trailer_test.h diff --git a/test/http2_internal_test.h b/test/http2/http2_internal_test.h similarity index 100% rename from test/http2_internal_test.h rename to test/http2/http2_internal_test.h diff --git a/test/http2_test.h b/test/http2/http2_test.h similarity index 100% rename from test/http2_test.h rename to test/http2/http2_test.h diff --git a/test/dns_resolver_test.h b/test/net/dns_resolver_test.h similarity index 100% rename from test/dns_resolver_test.h rename to test/net/dns_resolver_test.h diff --git a/test/dual_stack_test.h b/test/net/dual_stack_test.h similarity index 100% rename from test/dual_stack_test.h rename to test/net/dual_stack_test.h diff --git a/test/observability_auth_trace_test.h b/test/observability/observability_auth_trace_test.h similarity index 100% rename from test/observability_auth_trace_test.h rename to test/observability/observability_auth_trace_test.h diff --git a/test/observability_catalog_test.h b/test/observability/observability_catalog_test.h similarity index 100% rename from test/observability_catalog_test.h rename to test/observability/observability_catalog_test.h diff --git a/test/observability_config_test.h b/test/observability/observability_config_test.h similarity index 100% rename from test/observability_config_test.h rename to test/observability/observability_config_test.h diff --git a/test/observability_connection_metrics_test.h b/test/observability/observability_connection_metrics_test.h similarity index 100% rename from test/observability_connection_metrics_test.h rename to test/observability/observability_connection_metrics_test.h diff --git a/test/observability_e2e_test.h b/test/observability/observability_e2e_test.h similarity index 100% rename from test/observability_e2e_test.h rename to test/observability/observability_e2e_test.h diff --git a/test/observability_export_pipeline_test.h b/test/observability/observability_export_pipeline_test.h similarity index 100% rename from test/observability_export_pipeline_test.h rename to test/observability/observability_export_pipeline_test.h diff --git a/test/observability_foundation_test.h b/test/observability/observability_foundation_test.h similarity index 100% rename from test/observability_foundation_test.h rename to test/observability/observability_foundation_test.h diff --git a/test/observability_issue_inject_test.h b/test/observability/observability_issue_inject_test.h similarity index 99% rename from test/observability_issue_inject_test.h rename to test/observability/observability_issue_inject_test.h index eeea05c0..9b6171d5 100644 --- a/test/observability_issue_inject_test.h +++ b/test/observability/observability_issue_inject_test.h @@ -14,7 +14,7 @@ #include "observability/trace_id.h" #include "observability/tracer.h" #include "observability/tracer_provider.h" -#include "observability_test_helpers.h" +#include "observability/observability_test_helpers.h" #include #include diff --git a/test/observability_jaeger_propagator_test.h b/test/observability/observability_jaeger_propagator_test.h similarity index 100% rename from test/observability_jaeger_propagator_test.h rename to test/observability/observability_jaeger_propagator_test.h diff --git a/test/observability_kill_marshal_test.h b/test/observability/observability_kill_marshal_test.h similarity index 100% rename from test/observability_kill_marshal_test.h rename to test/observability/observability_kill_marshal_test.h diff --git a/test/observability_link_kill_test.h b/test/observability/observability_link_kill_test.h similarity index 96% rename from test/observability_link_kill_test.h rename to test/observability/observability_link_kill_test.h index d0f95ea8..a1d13ffb 100644 --- a/test/observability_link_kill_test.h +++ b/test/observability/observability_link_kill_test.h @@ -14,8 +14,8 @@ #include "test_framework.h" #include "observability/observability_manager.h" #include "observability/observability_snapshot.h" -#include "observability_test_helpers.h" -#include "proxy_transaction_internal_test.h" +#include "observability/observability_test_helpers.h" +#include "upstream/proxy_transaction_internal_test.h" #include #include @@ -53,7 +53,7 @@ class FakeTxLink final : public UpstreamTransactionLink { // ---- ProxyTransaction implements the interface correctly ---- -void TestProxyTxIsLink() { +inline void TestProxyTxIsLink() { try { HttpRequest req; auto tx = ProxyTransactionInternalTests::MakeInternalProxyTransaction(req); @@ -75,7 +75,7 @@ void TestProxyTxIsLink() { // ---- Linked snapshot kill flow: KillOutstandingSnapshots fires the kill ---- -void TestKillFlipsLinkedTransaction() { +inline void TestKillFlipsLinkedTransaction() { try { auto m = MakeManager(); auto snap = std::make_shared(); @@ -108,7 +108,7 @@ void TestKillFlipsLinkedTransaction() { // ---- Empty link slot — kill loop must not crash on weak.lock() == null ---- -void TestKillTolerantOfMissingLink() { +inline void TestKillTolerantOfMissingLink() { try { auto m = MakeManager(); auto snap = std::make_shared(); @@ -135,7 +135,7 @@ void TestKillTolerantOfMissingLink() { // finalized state under link_mtx and immediately mark the link // killed-for-shutdown so the caller's terminal gates short-circuit. -void TestAttachAfterKillFlipsLinkImmediately() { +inline void TestAttachAfterKillFlipsLinkImmediately() { try { auto m = MakeManager(); auto snap = std::make_shared(); @@ -192,7 +192,7 @@ void TestAttachAfterKillFlipsLinkImmediately() { // false, and leave the link's kill flag untouched. The kill loop // (or any future finalizer) is still in charge of marking the link. -void TestAttachBeforeKillIsBenign() { +inline void TestAttachBeforeKillIsBenign() { try { auto m = MakeManager(); auto snap = std::make_shared(); @@ -233,7 +233,7 @@ void TestAttachBeforeKillIsBenign() { // reach `serialized_request_ = HttpRequestSerializer::Serialize(...)` // and produce a non-empty wire image — the assertion catches that. -void TestStartShortCircuitsOnFinalizedSnapshot() { +inline void TestStartShortCircuitsOnFinalizedSnapshot() { try { auto m = MakeManager(); auto snap = std::make_shared(); @@ -266,7 +266,7 @@ void TestStartShortCircuitsOnFinalizedSnapshot() { // ---- AttachObservabilitySnapshot stores the snapshot for the link site ---- -void TestAttachSnapshotStoresHandle() { +inline void TestAttachSnapshotStoresHandle() { try { HttpRequest req; auto tx = ProxyTransactionInternalTests::MakeInternalProxyTransaction(req); diff --git a/test/observability_manager_test.h b/test/observability/observability_manager_test.h similarity index 100% rename from test/observability_manager_test.h rename to test/observability/observability_manager_test.h diff --git a/test/observability_metrics_test.h b/test/observability/observability_metrics_test.h similarity index 100% rename from test/observability_metrics_test.h rename to test/observability/observability_metrics_test.h diff --git a/test/observability_middleware_metrics_test.h b/test/observability/observability_middleware_metrics_test.h similarity index 100% rename from test/observability_middleware_metrics_test.h rename to test/observability/observability_middleware_metrics_test.h diff --git a/test/observability_pool_gauges_test.h b/test/observability/observability_pool_gauges_test.h similarity index 100% rename from test/observability_pool_gauges_test.h rename to test/observability/observability_pool_gauges_test.h diff --git a/test/observability_prometheus_test.h b/test/observability/observability_prometheus_test.h similarity index 100% rename from test/observability_prometheus_test.h rename to test/observability/observability_prometheus_test.h diff --git a/test/observability_propagator_test.h b/test/observability/observability_propagator_test.h similarity index 100% rename from test/observability_propagator_test.h rename to test/observability/observability_propagator_test.h diff --git a/test/observability_proxy_client_test.h b/test/observability/observability_proxy_client_test.h similarity index 100% rename from test/observability_proxy_client_test.h rename to test/observability/observability_proxy_client_test.h diff --git a/test/observability_self_handler_test.h b/test/observability/observability_self_handler_test.h similarity index 100% rename from test/observability_self_handler_test.h rename to test/observability/observability_self_handler_test.h diff --git a/test/observability_self_metrics_test.h b/test/observability/observability_self_metrics_test.h similarity index 100% rename from test/observability_self_metrics_test.h rename to test/observability/observability_self_metrics_test.h diff --git a/test/observability_shutdown_test.h b/test/observability/observability_shutdown_test.h similarity index 99% rename from test/observability_shutdown_test.h rename to test/observability/observability_shutdown_test.h index f48c650c..9fafc555 100644 --- a/test/observability_shutdown_test.h +++ b/test/observability/observability_shutdown_test.h @@ -8,7 +8,7 @@ #include "test_framework.h" #include "observability/observability_manager.h" #include "observability/observability_snapshot.h" -#include "observability_test_helpers.h" +#include "observability/observability_test_helpers.h" #include #include diff --git a/test/observability_stress_test.h b/test/observability/observability_stress_test.h similarity index 99% rename from test/observability_stress_test.h rename to test/observability/observability_stress_test.h index f57bfc97..9a2f3523 100644 --- a/test/observability_stress_test.h +++ b/test/observability/observability_stress_test.h @@ -13,7 +13,7 @@ #include "observability/observability_manager.h" #include "observability/observability_snapshot.h" #include "observability/resource.h" -#include "observability_test_helpers.h" +#include "observability/observability_test_helpers.h" #include #include diff --git a/test/observability_test_helpers.h b/test/observability/observability_test_helpers.h similarity index 100% rename from test/observability_test_helpers.h rename to test/observability/observability_test_helpers.h diff --git a/test/observability_tracer_test.h b/test/observability/observability_tracer_test.h similarity index 100% rename from test/observability_tracer_test.h rename to test/observability/observability_tracer_test.h diff --git a/test/observability_ws_messages_test.h b/test/observability/observability_ws_messages_test.h similarity index 100% rename from test/observability_ws_messages_test.h rename to test/observability/observability_ws_messages_test.h diff --git a/test/rate_limit_test.h b/test/rate_limit/rate_limit_test.h similarity index 100% rename from test/rate_limit_test.h rename to test/rate_limit/rate_limit_test.h diff --git a/test/run_test.cc b/test/run_test.cc index 4b0daa35..4db97f23 100644 --- a/test/run_test.cc +++ b/test/run_test.cc @@ -1,80 +1,80 @@ -#include "proxy_transaction_internal_test.h" -#include "http_internal_test.h" -#include "http2_internal_test.h" +#include "upstream/proxy_transaction_internal_test.h" +#include "http/http_internal_test.h" +#include "http2/http2_internal_test.h" #include "stress_test.h" #include "basic_test.h" #include "race_condition_test.h" -#include "timeout_test.h" -#include "config_test.h" -#include "http_test.h" -#include "websocket_test.h" -#include "tls_test.h" -#include "cli_test.h" -#include "http2_test.h" -#include "route_test.h" +#include "http/timeout_test.h" +#include "config/config_test.h" +#include "http/http_test.h" +#include "ws/websocket_test.h" +#include "tls/tls_test.h" +#include "cli/cli_test.h" +#include "http2/http2_test.h" +#include "http/route_test.h" #include "kqueue_test.h" -#include "upstream_pool_test.h" -#include "proxy_test.h" -#include "rate_limit_test.h" -#include "circuit_breaker_test.h" -#include "circuit_breaker_components_test.h" -#include "circuit_breaker_integration_test.h" -#include "circuit_breaker_retry_budget_test.h" -#include "circuit_breaker_wait_queue_drain_test.h" -#include "circuit_breaker_observability_test.h" -#include "circuit_breaker_reload_test.h" -#include "auth_foundation_test.h" -#include "jwt_verifier_test.h" -#include "jwks_cache_test.h" -#include "oidc_discovery_test.h" -#include "header_rewriter_auth_test.h" -#include "auth_manager_test.h" -#include "auth_integration_test.h" -#include "auth_failure_mode_test.h" -#include "auth_reload_test.h" -#include "auth_multi_issuer_test.h" -#include "auth_websocket_upgrade_test.h" -#include "auth_race_test.h" -#include "dns_resolver_test.h" -#include "dual_stack_test.h" -#include "h2_upstream_test.h" -#include "router_async_middleware_test.h" -#include "introspection_cache_test.h" +#include "upstream/upstream_pool_test.h" +#include "upstream/proxy_test.h" +#include "rate_limit/rate_limit_test.h" +#include "circuit_breaker/circuit_breaker_test.h" +#include "circuit_breaker/circuit_breaker_components_test.h" +#include "circuit_breaker/circuit_breaker_integration_test.h" +#include "circuit_breaker/circuit_breaker_retry_budget_test.h" +#include "circuit_breaker/circuit_breaker_wait_queue_drain_test.h" +#include "circuit_breaker/circuit_breaker_observability_test.h" +#include "circuit_breaker/circuit_breaker_reload_test.h" +#include "auth/auth_foundation_test.h" +#include "auth/jwt_verifier_test.h" +#include "auth/jwks_cache_test.h" +#include "auth/oidc_discovery_test.h" +#include "auth/header_rewriter_auth_test.h" +#include "auth/auth_manager_test.h" +#include "auth/auth_integration_test.h" +#include "auth/auth_failure_mode_test.h" +#include "auth/auth_reload_test.h" +#include "auth/auth_multi_issuer_test.h" +#include "auth/auth_websocket_upgrade_test.h" +#include "auth/auth_race_test.h" +#include "net/dns_resolver_test.h" +#include "net/dual_stack_test.h" +#include "upstream/h2_upstream_test.h" +#include "http/router_async_middleware_test.h" +#include "auth/introspection_cache_test.h" #include "sharded_lru_cache_test.h" -#include "introspection_client_test.h" -#include "auth_introspection_integration_test.h" -#include "auth_observability_test.h" -#include "observability_foundation_test.h" -#include "observability_tracer_test.h" -#include "observability_metrics_test.h" -#include "observability_manager_test.h" -#include "observability_propagator_test.h" -#include "observability_jaeger_propagator_test.h" -#include "observability_export_pipeline_test.h" -#include "observability_prometheus_test.h" -#include "observability_config_test.h" -#include "observability_shutdown_test.h" -#include "observability_link_kill_test.h" -#include "observability_issue_inject_test.h" -#include "observability_stress_test.h" -#include "observability_e2e_test.h" -#include "observability_self_handler_test.h" -#include "observability_proxy_client_test.h" -#include "observability_auth_trace_test.h" -#include "observability_catalog_test.h" -#include "observability_middleware_metrics_test.h" -#include "observability_kill_marshal_test.h" -#include "observability_ws_messages_test.h" -#include "observability_self_metrics_test.h" -#include "observability_connection_metrics_test.h" -#include "observability_pool_gauges_test.h" -#include "streaming_request_test.h" -#include "h2_trailer_test.h" -#include "grpc_test.h" -#include "grpc_proxy_test.h" -#include "grpc_obs_test.h" -#include "grpc_web_test.h" -#include "grpc_web_edge_test.h" +#include "auth/introspection_client_test.h" +#include "auth/auth_introspection_integration_test.h" +#include "auth/auth_observability_test.h" +#include "observability/observability_foundation_test.h" +#include "observability/observability_tracer_test.h" +#include "observability/observability_metrics_test.h" +#include "observability/observability_manager_test.h" +#include "observability/observability_propagator_test.h" +#include "observability/observability_jaeger_propagator_test.h" +#include "observability/observability_export_pipeline_test.h" +#include "observability/observability_prometheus_test.h" +#include "observability/observability_config_test.h" +#include "observability/observability_shutdown_test.h" +#include "observability/observability_link_kill_test.h" +#include "observability/observability_issue_inject_test.h" +#include "observability/observability_stress_test.h" +#include "observability/observability_e2e_test.h" +#include "observability/observability_self_handler_test.h" +#include "observability/observability_proxy_client_test.h" +#include "observability/observability_auth_trace_test.h" +#include "observability/observability_catalog_test.h" +#include "observability/observability_middleware_metrics_test.h" +#include "observability/observability_kill_marshal_test.h" +#include "observability/observability_ws_messages_test.h" +#include "observability/observability_self_metrics_test.h" +#include "observability/observability_connection_metrics_test.h" +#include "observability/observability_pool_gauges_test.h" +#include "http/streaming_request_test.h" +#include "http2/h2_trailer_test.h" +#include "grpc/grpc_test.h" +#include "grpc/grpc_proxy_test.h" +#include "grpc/grpc_obs_test.h" +#include "grpc/grpc_web_test.h" +#include "grpc/grpc_web_edge_test.h" #include "test_framework.h" #include #include diff --git a/test/tls_test.h b/test/tls/tls_test.h similarity index 100% rename from test/tls_test.h rename to test/tls/tls_test.h diff --git a/test/h2_upstream_test.h b/test/upstream/h2_upstream_test.h similarity index 99% rename from test/h2_upstream_test.h rename to test/upstream/h2_upstream_test.h index c50e492f..3dea2852 100644 --- a/test/h2_upstream_test.h +++ b/test/upstream/h2_upstream_test.h @@ -5622,7 +5622,7 @@ void TestN9pH2ResponseTimeoutClosureHonorsShutdownKill() { // the lighter regression-prevention check. bool pass = false; try { - std::ifstream in("server/proxy_transaction.cc"); + std::ifstream in("server/upstream/proxy_transaction.cc"); std::string src((std::istreambuf_iterator(in)), std::istreambuf_iterator()); // Locate the H2 response-timeout closure (uniquely identified diff --git a/test/proxy_test.h b/test/upstream/proxy_test.h similarity index 100% rename from test/proxy_test.h rename to test/upstream/proxy_test.h diff --git a/test/proxy_transaction_internal_test.h b/test/upstream/proxy_transaction_internal_test.h similarity index 100% rename from test/proxy_transaction_internal_test.h rename to test/upstream/proxy_transaction_internal_test.h diff --git a/test/upstream_pool_test.h b/test/upstream/upstream_pool_test.h similarity index 100% rename from test/upstream_pool_test.h rename to test/upstream/upstream_pool_test.h diff --git a/test/websocket_test.h b/test/ws/websocket_test.h similarity index 100% rename from test/websocket_test.h rename to test/ws/websocket_test.h From 592945374d9e73790d06f3c19e43815ad04408af Mon Sep 17 00:00:00 2001 From: mwfj Date: Mon, 25 May 2026 17:32:51 +0800 Subject: [PATCH 2/3] Fix review comment --- docs/testing.md | 4 +- test/run_test.cc | 168 ++++++++++++++++++++++++++++++----------------- 2 files changed, 108 insertions(+), 64 deletions(-) diff --git a/docs/testing.md b/docs/testing.md index 2abff1af..fd3f6ec3 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -3,7 +3,7 @@ ## Running Tests ```bash -make test # Build and run all suites (1694 tests across 44+ suites at HEAD) +make test # Build and run all suites (1901 tests across 47+ suites at HEAD) ./test_runner # Run all tests directly (after building) ./test_runner help # Print every supported flag @@ -95,7 +95,7 @@ make test_auth_race make test_auth_observability ``` -At current head, `./test_runner` reports **1694 / 1694 passing** (100 %). +At current head, `./test_runner` reports **1901 / 1901 passing** (100 %). ## Test Suites diff --git a/test/run_test.cc b/test/run_test.cc index 4db97f23..72c5d326 100644 --- a/test/run_test.cc +++ b/test/run_test.cc @@ -1,81 +1,125 @@ +// Internal tests use `#define private public` to access private members of +// production classes. They MUST be included before any other header pulls in +// those production classes with default access (the production headers' +// #pragma once guard would otherwise prevent a second include with the macro +// in effect). Within this group, proxy_transaction_internal_test.h goes FIRST +// because its `#define private public` block also covers ConnectionHandler / +// SocketHandler / UpstreamConnection — superset of the other internal tests' +// reach. #include "upstream/proxy_transaction_internal_test.h" #include "http/http_internal_test.h" #include "http2/http2_internal_test.h" -#include "stress_test.h" -#include "basic_test.h" -#include "race_condition_test.h" -#include "http/timeout_test.h" -#include "config/config_test.h" -#include "http/http_test.h" -#include "ws/websocket_test.h" -#include "tls/tls_test.h" -#include "cli/cli_test.h" -#include "http2/http2_test.h" -#include "http/route_test.h" -#include "kqueue_test.h" -#include "upstream/upstream_pool_test.h" -#include "upstream/proxy_test.h" -#include "rate_limit/rate_limit_test.h" -#include "circuit_breaker/circuit_breaker_test.h" -#include "circuit_breaker/circuit_breaker_components_test.h" -#include "circuit_breaker/circuit_breaker_integration_test.h" -#include "circuit_breaker/circuit_breaker_retry_budget_test.h" -#include "circuit_breaker/circuit_breaker_wait_queue_drain_test.h" -#include "circuit_breaker/circuit_breaker_observability_test.h" -#include "circuit_breaker/circuit_breaker_reload_test.h" +#include "observability/observability_link_kill_test.h" + +// Test suite headers — grouped by feature subfolder (mirroring include/), +// alphabetical within each group. Root-level cross-cutting tests + the shared +// test_framework header follow at the end. Subfolder names are lowercase to +// match include/'s convention; namespace identifiers (e.g. HTTP_NAMESPACE) +// remain UPPER_SNAKE_CASE per CODE_CONVENTIONS.md but folder paths do not. + +// auth/ +#include "auth/auth_failure_mode_test.h" #include "auth/auth_foundation_test.h" -#include "auth/jwt_verifier_test.h" -#include "auth/jwks_cache_test.h" -#include "auth/oidc_discovery_test.h" -#include "auth/header_rewriter_auth_test.h" -#include "auth/auth_manager_test.h" #include "auth/auth_integration_test.h" -#include "auth/auth_failure_mode_test.h" -#include "auth/auth_reload_test.h" +#include "auth/auth_introspection_integration_test.h" +#include "auth/auth_manager_test.h" #include "auth/auth_multi_issuer_test.h" -#include "auth/auth_websocket_upgrade_test.h" +#include "auth/auth_observability_test.h" #include "auth/auth_race_test.h" -#include "net/dns_resolver_test.h" -#include "net/dual_stack_test.h" -#include "upstream/h2_upstream_test.h" -#include "http/router_async_middleware_test.h" +#include "auth/auth_reload_test.h" +#include "auth/auth_websocket_upgrade_test.h" +#include "auth/header_rewriter_auth_test.h" #include "auth/introspection_cache_test.h" -#include "sharded_lru_cache_test.h" #include "auth/introspection_client_test.h" -#include "auth/auth_introspection_integration_test.h" -#include "auth/auth_observability_test.h" +#include "auth/jwks_cache_test.h" +#include "auth/jwt_verifier_test.h" +#include "auth/oidc_discovery_test.h" + +// circuit_breaker/ +#include "circuit_breaker/circuit_breaker_components_test.h" +#include "circuit_breaker/circuit_breaker_integration_test.h" +#include "circuit_breaker/circuit_breaker_observability_test.h" +#include "circuit_breaker/circuit_breaker_reload_test.h" +#include "circuit_breaker/circuit_breaker_retry_budget_test.h" +#include "circuit_breaker/circuit_breaker_test.h" +#include "circuit_breaker/circuit_breaker_wait_queue_drain_test.h" + +// cli/ +#include "cli/cli_test.h" + +// config/ +#include "config/config_test.h" + +// grpc/ +#include "grpc/grpc_obs_test.h" +#include "grpc/grpc_proxy_test.h" +#include "grpc/grpc_test.h" +#include "grpc/grpc_web_edge_test.h" +#include "grpc/grpc_web_test.h" + +// http/ (http_internal_test.h included above in the internal-tests group) +#include "http/http_test.h" +#include "http/route_test.h" +#include "http/router_async_middleware_test.h" +#include "http/streaming_request_test.h" +#include "http/timeout_test.h" + +// http2/ (http2_internal_test.h included above in the internal-tests group) +#include "http2/h2_trailer_test.h" +#include "http2/http2_test.h" + +// net/ +#include "net/dns_resolver_test.h" +#include "net/dual_stack_test.h" + +// observability/ +#include "observability/observability_auth_trace_test.h" +#include "observability/observability_catalog_test.h" +#include "observability/observability_config_test.h" +#include "observability/observability_connection_metrics_test.h" +#include "observability/observability_e2e_test.h" +#include "observability/observability_export_pipeline_test.h" #include "observability/observability_foundation_test.h" -#include "observability/observability_tracer_test.h" -#include "observability/observability_metrics_test.h" -#include "observability/observability_manager_test.h" -#include "observability/observability_propagator_test.h" +#include "observability/observability_issue_inject_test.h" #include "observability/observability_jaeger_propagator_test.h" -#include "observability/observability_export_pipeline_test.h" +#include "observability/observability_kill_marshal_test.h" +// observability_link_kill_test.h included above in the internal-tests group +#include "observability/observability_manager_test.h" +#include "observability/observability_metrics_test.h" +#include "observability/observability_middleware_metrics_test.h" +#include "observability/observability_pool_gauges_test.h" #include "observability/observability_prometheus_test.h" -#include "observability/observability_config_test.h" +#include "observability/observability_propagator_test.h" +#include "observability/observability_proxy_client_test.h" +#include "observability/observability_self_handler_test.h" +#include "observability/observability_self_metrics_test.h" #include "observability/observability_shutdown_test.h" -#include "observability/observability_link_kill_test.h" -#include "observability/observability_issue_inject_test.h" #include "observability/observability_stress_test.h" -#include "observability/observability_e2e_test.h" -#include "observability/observability_self_handler_test.h" -#include "observability/observability_proxy_client_test.h" -#include "observability/observability_auth_trace_test.h" -#include "observability/observability_catalog_test.h" -#include "observability/observability_middleware_metrics_test.h" -#include "observability/observability_kill_marshal_test.h" +#include "observability/observability_tracer_test.h" #include "observability/observability_ws_messages_test.h" -#include "observability/observability_self_metrics_test.h" -#include "observability/observability_connection_metrics_test.h" -#include "observability/observability_pool_gauges_test.h" -#include "http/streaming_request_test.h" -#include "http2/h2_trailer_test.h" -#include "grpc/grpc_test.h" -#include "grpc/grpc_proxy_test.h" -#include "grpc/grpc_obs_test.h" -#include "grpc/grpc_web_test.h" -#include "grpc/grpc_web_edge_test.h" + +// rate_limit/ +#include "rate_limit/rate_limit_test.h" + +// tls/ +#include "tls/tls_test.h" + +// upstream/ (proxy_transaction_internal_test.h included above in the internal-tests group) +#include "upstream/h2_upstream_test.h" +#include "upstream/proxy_test.h" +#include "upstream/upstream_pool_test.h" + +// ws/ +#include "ws/websocket_test.h" + +// test/ (root — cross-cutting infrastructure + shared framework) +#include "basic_test.h" +#include "kqueue_test.h" +#include "race_condition_test.h" +#include "sharded_lru_cache_test.h" +#include "stress_test.h" #include "test_framework.h" + #include #include From 9cc9c96d511542042731945b73ec0c6b81420d27 Mon Sep 17 00:00:00 2001 From: mwfj Date: Mon, 25 May 2026 17:33:07 +0800 Subject: [PATCH 3/3] Fix review comment --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 610f3be8..5f116629 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ A C++17 network server and gateway built on the Reactor pattern. It uses non-blo - **TLS/SSL** — OpenSSL 3.x integration for downstream server TLS and upstream client TLS - **Upstream Proxy** — per-service connection pools with TLS, streaming response relay, retry policy, trailer handling, and header rewriting - **HTTP/2 Upstream** — per-upstream opt-in multiplexed H2 client (donated-lease pattern), ALPN-negotiated `auto / always / never` dispatch, two-deadline send-stall + response-timeout model, transport-drain-driven sink dispatch, GOAWAY/PING liveness, live-reloadable session settings -- **gRPC Proxying** — inbound classifier (HTTP/2 + `application/grpc` content-type, with per-route `proxy.protocol: auto/grpc/rest` override), `grpc-timeout` quad-state parser + dedicated `ArmGrpcDeadline` enforcement, Trailers-Only synthesis for every middleware-reject / proxy-failure / deadline path (`MakeGrpcErrorResponse` + HTTP→gRPC status mapping), `te: trailers` outbound force-fold, distinct `RESULT_GRPC_DEADLINE_EXCEEDED` for circuit-breaker classification, happy-path peer-trailer `grpc-status` snapshot for observability +- **gRPC Proxying** — inbound classifier (HTTP/2 + `application/grpc` content-type, with per-route `proxy.protocol: auto/grpc/rest` override), `grpc-timeout` quad-state parser + dedicated `ArmGrpcDeadline` enforcement, Trailers-Only synthesis for every middleware-reject / proxy-failure / deadline path, `te: trailers` outbound force-fold, distinct `RESULT_GRPC_DEADLINE_EXCEEDED` for circuit-breaker classification, trailer-status retry on `grpc-status: UNAVAILABLE` with gRFC A6 pushback support, OTel SERVER/CLIENT span split per gRPC semconv with `rpc.server.call.duration` + `rpc.client.call.duration` histograms, and a per-route gRPC-Web bridge (`proxy.grpc_web.enabled`) that translates `application/grpc-web[-text]` from HTTP/1.1 + HTTP/2 carriers into canonical gRPC - **Rate Limiting** — per-client / per-route token-bucket middleware with LRU eviction, `RateLimit-*` headers, dry-run mode, hot reload - **Circuit Breaking** — per-upstream state machines, retry budgets, dry-run mode, wait-queue drain, hot-reloadable breaker tuning - **OAuth 2.0 Token Validation** — JWT validation with JWKS/OIDC discovery, multi-issuer policies, outbound identity headers, and RFC 7662 introspection mode