github.com/ajac-zero/latticelm/cmd/gateway coverage: 0.0% of statements === RUN TestInputUnion_UnmarshalJSON === RUN TestInputUnion_UnmarshalJSON/string_input === RUN TestInputUnion_UnmarshalJSON/empty_string_input === RUN TestInputUnion_UnmarshalJSON/null_input === RUN TestInputUnion_UnmarshalJSON/array_input_with_single_message === RUN TestInputUnion_UnmarshalJSON/array_input_with_multiple_messages === RUN TestInputUnion_UnmarshalJSON/empty_array === RUN TestInputUnion_UnmarshalJSON/array_with_function_call_output === RUN TestInputUnion_UnmarshalJSON/invalid_JSON === RUN TestInputUnion_UnmarshalJSON/invalid_type_-_number === RUN TestInputUnion_UnmarshalJSON/invalid_type_-_object --- PASS: TestInputUnion_UnmarshalJSON (0.00s) --- PASS: TestInputUnion_UnmarshalJSON/string_input (0.00s) --- PASS: TestInputUnion_UnmarshalJSON/empty_string_input (0.00s) --- PASS: TestInputUnion_UnmarshalJSON/null_input (0.00s) --- PASS: TestInputUnion_UnmarshalJSON/array_input_with_single_message (0.00s) --- PASS: TestInputUnion_UnmarshalJSON/array_input_with_multiple_messages (0.00s) --- PASS: TestInputUnion_UnmarshalJSON/empty_array (0.00s) --- PASS: TestInputUnion_UnmarshalJSON/array_with_function_call_output (0.00s) --- PASS: TestInputUnion_UnmarshalJSON/invalid_JSON (0.00s) --- PASS: TestInputUnion_UnmarshalJSON/invalid_type_-_number (0.00s) --- PASS: TestInputUnion_UnmarshalJSON/invalid_type_-_object (0.00s) === RUN TestInputUnion_MarshalJSON === RUN TestInputUnion_MarshalJSON/string_value === RUN TestInputUnion_MarshalJSON/empty_string === RUN TestInputUnion_MarshalJSON/array_value === RUN TestInputUnion_MarshalJSON/empty_array === RUN TestInputUnion_MarshalJSON/nil_values --- PASS: TestInputUnion_MarshalJSON (0.00s) --- PASS: TestInputUnion_MarshalJSON/string_value (0.00s) --- PASS: TestInputUnion_MarshalJSON/empty_string (0.00s) --- PASS: TestInputUnion_MarshalJSON/array_value (0.00s) --- PASS: TestInputUnion_MarshalJSON/empty_array (0.00s) --- PASS: TestInputUnion_MarshalJSON/nil_values (0.00s) === RUN TestInputUnion_RoundTrip === RUN TestInputUnion_RoundTrip/string === RUN TestInputUnion_RoundTrip/array_with_messages --- PASS: TestInputUnion_RoundTrip (0.00s) --- PASS: TestInputUnion_RoundTrip/string (0.00s) --- PASS: TestInputUnion_RoundTrip/array_with_messages (0.00s) === RUN TestResponseRequest_NormalizeInput === RUN TestResponseRequest_NormalizeInput/string_input_creates_user_message === RUN TestResponseRequest_NormalizeInput/message_with_string_content === RUN TestResponseRequest_NormalizeInput/assistant_message_with_string_content_uses_output_text === RUN TestResponseRequest_NormalizeInput/message_with_content_blocks_array === RUN TestResponseRequest_NormalizeInput/message_with_tool_use_blocks === RUN TestResponseRequest_NormalizeInput/message_with_mixed_text_and_tool_use === RUN TestResponseRequest_NormalizeInput/multiple_tool_use_blocks === RUN TestResponseRequest_NormalizeInput/function_call_output_item === RUN TestResponseRequest_NormalizeInput/multiple_messages_in_conversation === RUN TestResponseRequest_NormalizeInput/complete_tool_calling_flow === RUN TestResponseRequest_NormalizeInput/message_without_type_defaults_to_message === RUN TestResponseRequest_NormalizeInput/message_with_nil_content === RUN TestResponseRequest_NormalizeInput/tool_use_with_empty_input === RUN TestResponseRequest_NormalizeInput/content_blocks_with_unknown_types_ignored --- PASS: TestResponseRequest_NormalizeInput (0.00s) --- PASS: TestResponseRequest_NormalizeInput/string_input_creates_user_message (0.00s) --- PASS: TestResponseRequest_NormalizeInput/message_with_string_content (0.00s) --- PASS: TestResponseRequest_NormalizeInput/assistant_message_with_string_content_uses_output_text (0.00s) --- PASS: TestResponseRequest_NormalizeInput/message_with_content_blocks_array (0.00s) --- PASS: TestResponseRequest_NormalizeInput/message_with_tool_use_blocks (0.00s) --- PASS: TestResponseRequest_NormalizeInput/message_with_mixed_text_and_tool_use (0.00s) --- PASS: TestResponseRequest_NormalizeInput/multiple_tool_use_blocks (0.00s) --- PASS: TestResponseRequest_NormalizeInput/function_call_output_item (0.00s) --- PASS: TestResponseRequest_NormalizeInput/multiple_messages_in_conversation (0.00s) --- PASS: TestResponseRequest_NormalizeInput/complete_tool_calling_flow (0.00s) --- PASS: TestResponseRequest_NormalizeInput/message_without_type_defaults_to_message (0.00s) --- PASS: TestResponseRequest_NormalizeInput/message_with_nil_content (0.00s) --- PASS: TestResponseRequest_NormalizeInput/tool_use_with_empty_input (0.00s) --- PASS: TestResponseRequest_NormalizeInput/content_blocks_with_unknown_types_ignored (0.00s) === RUN TestResponseRequest_Validate === RUN TestResponseRequest_Validate/valid_request_with_string_input === RUN TestResponseRequest_Validate/valid_request_with_array_input === RUN TestResponseRequest_Validate/nil_request === RUN TestResponseRequest_Validate/missing_model === RUN TestResponseRequest_Validate/missing_input === RUN TestResponseRequest_Validate/empty_string_input_is_invalid === RUN TestResponseRequest_Validate/empty_array_input_is_invalid --- PASS: TestResponseRequest_Validate (0.00s) --- PASS: TestResponseRequest_Validate/valid_request_with_string_input (0.00s) --- PASS: TestResponseRequest_Validate/valid_request_with_array_input (0.00s) --- PASS: TestResponseRequest_Validate/nil_request (0.00s) --- PASS: TestResponseRequest_Validate/missing_model (0.00s) --- PASS: TestResponseRequest_Validate/missing_input (0.00s) --- PASS: TestResponseRequest_Validate/empty_string_input_is_invalid (0.00s) --- PASS: TestResponseRequest_Validate/empty_array_input_is_invalid (0.00s) === RUN TestGetStringField === RUN TestGetStringField/existing_string_field === RUN TestGetStringField/missing_field === RUN TestGetStringField/wrong_type_-_int === RUN TestGetStringField/wrong_type_-_bool === RUN TestGetStringField/wrong_type_-_object === RUN TestGetStringField/empty_string_value === RUN TestGetStringField/nil_map --- PASS: TestGetStringField (0.00s) --- PASS: TestGetStringField/existing_string_field (0.00s) --- PASS: TestGetStringField/missing_field (0.00s) --- PASS: TestGetStringField/wrong_type_-_int (0.00s) --- PASS: TestGetStringField/wrong_type_-_bool (0.00s) --- PASS: TestGetStringField/wrong_type_-_object (0.00s) --- PASS: TestGetStringField/empty_string_value (0.00s) --- PASS: TestGetStringField/nil_map (0.00s) === RUN TestInputItem_ComplexContent === RUN TestInputItem_ComplexContent/content_with_nested_objects === RUN TestInputItem_ComplexContent/content_with_array_in_input --- PASS: TestInputItem_ComplexContent (0.00s) --- PASS: TestInputItem_ComplexContent/content_with_nested_objects (0.00s) --- PASS: TestInputItem_ComplexContent/content_with_array_in_input (0.00s) === RUN TestResponseRequest_CompleteWorkflow --- PASS: TestResponseRequest_CompleteWorkflow (0.00s) PASS coverage: 100.0% of statements ok github.com/ajac-zero/latticelm/internal/api 0.011s coverage: 100.0% of statements === RUN TestNew === RUN TestNew/disabled_auth_returns_empty_middleware === RUN TestNew/enabled_without_issuer_returns_error === RUN TestNew/enabled_with_valid_config_fetches_JWKS === RUN TestNew/JWKS_fetch_failure_returns_error --- PASS: TestNew (0.00s) --- PASS: TestNew/disabled_auth_returns_empty_middleware (0.00s) --- PASS: TestNew/enabled_without_issuer_returns_error (0.00s) --- PASS: TestNew/enabled_with_valid_config_fetches_JWKS (0.00s) --- PASS: TestNew/JWKS_fetch_failure_returns_error (0.00s) === RUN TestMiddleware_Handler === RUN TestMiddleware_Handler/missing_authorization_header === RUN TestMiddleware_Handler/malformed_authorization_header_-_no_bearer === RUN TestMiddleware_Handler/malformed_authorization_header_-_wrong_scheme === RUN TestMiddleware_Handler/valid_token_with_correct_claims === RUN TestMiddleware_Handler/expired_token === RUN TestMiddleware_Handler/token_with_wrong_issuer === RUN TestMiddleware_Handler/token_with_wrong_audience === RUN TestMiddleware_Handler/token_with_missing_kid --- PASS: TestMiddleware_Handler (0.01s) --- PASS: TestMiddleware_Handler/missing_authorization_header (0.00s) --- PASS: TestMiddleware_Handler/malformed_authorization_header_-_no_bearer (0.00s) --- PASS: TestMiddleware_Handler/malformed_authorization_header_-_wrong_scheme (0.00s) --- PASS: TestMiddleware_Handler/valid_token_with_correct_claims (0.00s) --- PASS: TestMiddleware_Handler/expired_token (0.00s) --- PASS: TestMiddleware_Handler/token_with_wrong_issuer (0.00s) --- PASS: TestMiddleware_Handler/token_with_wrong_audience (0.00s) --- PASS: TestMiddleware_Handler/token_with_missing_kid (0.00s) === RUN TestMiddleware_Handler_DisabledAuth --- PASS: TestMiddleware_Handler_DisabledAuth (0.00s) === RUN TestValidateToken === RUN TestValidateToken/valid_token_with_all_required_claims === RUN TestValidateToken/token_with_audience_as_array === RUN TestValidateToken/token_with_audience_array_not_matching === RUN TestValidateToken/token_with_invalid_audience_format === RUN TestValidateToken/token_signed_with_wrong_key === RUN TestValidateToken/token_with_unknown_kid_triggers_JWKS_refresh === RUN TestValidateToken/token_with_completely_unknown_kid_after_refresh === RUN TestValidateToken/malformed_token === RUN TestValidateToken/token_with_non-RSA_signing_method --- PASS: TestValidateToken (0.80s) --- PASS: TestValidateToken/valid_token_with_all_required_claims (0.00s) --- PASS: TestValidateToken/token_with_audience_as_array (0.00s) --- PASS: TestValidateToken/token_with_audience_array_not_matching (0.00s) --- PASS: TestValidateToken/token_with_invalid_audience_format (0.00s) --- PASS: TestValidateToken/token_signed_with_wrong_key (0.15s) --- PASS: TestValidateToken/token_with_unknown_kid_triggers_JWKS_refresh (0.42s) --- PASS: TestValidateToken/token_with_completely_unknown_kid_after_refresh (0.22s) --- PASS: TestValidateToken/malformed_token (0.00s) --- PASS: TestValidateToken/token_with_non-RSA_signing_method (0.00s) === RUN TestValidateToken_NoAudienceConfigured --- PASS: TestValidateToken_NoAudienceConfigured (0.00s) === RUN TestRefreshJWKS === RUN TestRefreshJWKS/successful_JWKS_fetch_and_parse === RUN TestRefreshJWKS/OIDC_discovery_failure === RUN TestRefreshJWKS/JWKS_with_multiple_keys === RUN TestRefreshJWKS/JWKS_with_non-RSA_keys_skipped === RUN TestRefreshJWKS/JWKS_with_wrong_use_field_skipped === RUN TestRefreshJWKS/JWKS_with_invalid_base64_encoding_skipped --- PASS: TestRefreshJWKS (0.14s) --- PASS: TestRefreshJWKS/successful_JWKS_fetch_and_parse (0.00s) --- PASS: TestRefreshJWKS/OIDC_discovery_failure (0.00s) --- PASS: TestRefreshJWKS/JWKS_with_multiple_keys (0.14s) --- PASS: TestRefreshJWKS/JWKS_with_non-RSA_keys_skipped (0.00s) --- PASS: TestRefreshJWKS/JWKS_with_wrong_use_field_skipped (0.00s) --- PASS: TestRefreshJWKS/JWKS_with_invalid_base64_encoding_skipped (0.00s) === RUN TestRefreshJWKS_Concurrency --- PASS: TestRefreshJWKS_Concurrency (0.01s) === RUN TestGetClaims === RUN TestGetClaims/context_with_claims === RUN TestGetClaims/context_without_claims === RUN TestGetClaims/context_with_wrong_type --- PASS: TestGetClaims (0.00s) --- PASS: TestGetClaims/context_with_claims (0.00s) --- PASS: TestGetClaims/context_without_claims (0.00s) --- PASS: TestGetClaims/context_with_wrong_type (0.00s) === RUN TestMiddleware_IssuerWithTrailingSlash --- PASS: TestMiddleware_IssuerWithTrailingSlash (0.00s) PASS coverage: 91.7% of statements ok github.com/ajac-zero/latticelm/internal/auth 1.251s coverage: 91.7% of statements === RUN TestLoad === RUN TestLoad/basic_config_with_all_fields === RUN TestLoad/config_with_environment_variables === RUN TestLoad/minimal_config === RUN TestLoad/azure_openai_provider === RUN TestLoad/vertex_ai_provider === RUN TestLoad/sql_conversation_store === RUN TestLoad/redis_conversation_store === RUN TestLoad/invalid_model_references_unknown_provider === RUN TestLoad/invalid_YAML === RUN TestLoad/multiple_models_same_provider --- PASS: TestLoad (0.01s) --- PASS: TestLoad/basic_config_with_all_fields (0.00s) --- PASS: TestLoad/config_with_environment_variables (0.00s) --- PASS: TestLoad/minimal_config (0.00s) --- PASS: TestLoad/azure_openai_provider (0.00s) --- PASS: TestLoad/vertex_ai_provider (0.00s) --- PASS: TestLoad/sql_conversation_store (0.00s) --- PASS: TestLoad/redis_conversation_store (0.00s) --- PASS: TestLoad/invalid_model_references_unknown_provider (0.00s) --- PASS: TestLoad/invalid_YAML (0.00s) --- PASS: TestLoad/multiple_models_same_provider (0.00s) === RUN TestLoadNonExistentFile --- PASS: TestLoadNonExistentFile (0.00s) === RUN TestConfigValidate === RUN TestConfigValidate/valid_config === RUN TestConfigValidate/model_references_unknown_provider === RUN TestConfigValidate/no_models === RUN TestConfigValidate/multiple_models_multiple_providers --- PASS: TestConfigValidate (0.00s) --- PASS: TestConfigValidate/valid_config (0.00s) --- PASS: TestConfigValidate/model_references_unknown_provider (0.00s) --- PASS: TestConfigValidate/no_models (0.00s) --- PASS: TestConfigValidate/multiple_models_multiple_providers (0.00s) === RUN TestEnvironmentVariableExpansion --- PASS: TestEnvironmentVariableExpansion (0.00s) PASS coverage: 100.0% of statements ok github.com/ajac-zero/latticelm/internal/config 0.040s coverage: 100.0% of statements === RUN TestMemoryStore_CreateAndGet --- PASS: TestMemoryStore_CreateAndGet (0.00s) === RUN TestMemoryStore_GetNonExistent --- PASS: TestMemoryStore_GetNonExistent (0.00s) === RUN TestMemoryStore_Append --- PASS: TestMemoryStore_Append (0.00s) === RUN TestMemoryStore_AppendNonExistent --- PASS: TestMemoryStore_AppendNonExistent (0.00s) === RUN TestMemoryStore_Delete --- PASS: TestMemoryStore_Delete (0.00s) === RUN TestMemoryStore_Size --- PASS: TestMemoryStore_Size (0.00s) === RUN TestMemoryStore_ConcurrentAccess --- PASS: TestMemoryStore_ConcurrentAccess (0.00s) === RUN TestMemoryStore_DeepCopy --- PASS: TestMemoryStore_DeepCopy (0.00s) === RUN TestMemoryStore_TTLCleanup --- PASS: TestMemoryStore_TTLCleanup (0.15s) === RUN TestMemoryStore_NoTTL --- PASS: TestMemoryStore_NoTTL (0.00s) === RUN TestMemoryStore_UpdatedAtTracking --- PASS: TestMemoryStore_UpdatedAtTracking (0.01s) === RUN TestMemoryStore_MultipleConversations --- PASS: TestMemoryStore_MultipleConversations (0.00s) === RUN TestNewRedisStore --- PASS: TestNewRedisStore (0.00s) === RUN TestRedisStore_Create --- PASS: TestRedisStore_Create (0.00s) === RUN TestRedisStore_Get --- PASS: TestRedisStore_Get (0.00s) === RUN TestRedisStore_Append --- PASS: TestRedisStore_Append (0.00s) === RUN TestRedisStore_Delete --- PASS: TestRedisStore_Delete (0.00s) === RUN TestRedisStore_Size --- PASS: TestRedisStore_Size (0.00s) === RUN TestRedisStore_TTL --- PASS: TestRedisStore_TTL (0.00s) === RUN TestRedisStore_KeyStorage --- PASS: TestRedisStore_KeyStorage (0.00s) === RUN TestRedisStore_Concurrent --- PASS: TestRedisStore_Concurrent (0.01s) === RUN TestRedisStore_JSONEncoding --- PASS: TestRedisStore_JSONEncoding (0.00s) === RUN TestRedisStore_EmptyMessages --- PASS: TestRedisStore_EmptyMessages (0.00s) === RUN TestRedisStore_UpdateExisting --- PASS: TestRedisStore_UpdateExisting (0.01s) === RUN TestRedisStore_ContextCancellation --- PASS: TestRedisStore_ContextCancellation (0.01s) === RUN TestRedisStore_ScanPagination --- PASS: TestRedisStore_ScanPagination (0.00s) === RUN TestNewSQLStore --- PASS: TestNewSQLStore (0.00s) === RUN TestSQLStore_Create --- PASS: TestSQLStore_Create (0.00s) === RUN TestSQLStore_Get --- PASS: TestSQLStore_Get (0.00s) === RUN TestSQLStore_Append --- PASS: TestSQLStore_Append (0.00s) === RUN TestSQLStore_Delete --- PASS: TestSQLStore_Delete (0.00s) === RUN TestSQLStore_Size --- PASS: TestSQLStore_Size (0.00s) === RUN TestSQLStore_Cleanup sql_store_test.go:198: Error Trace: /home/coder/go-llm-gateway/internal/conversation/sql_store_test.go:198 Error: Not equal: expected: 0 actual : 1 Test: TestSQLStore_Cleanup --- FAIL: TestSQLStore_Cleanup (0.50s) === RUN TestSQLStore_ConcurrentAccess --- PASS: TestSQLStore_ConcurrentAccess (0.00s) === RUN TestSQLStore_ContextCancellation --- PASS: TestSQLStore_ContextCancellation (0.00s) === RUN TestSQLStore_JSONEncoding --- PASS: TestSQLStore_JSONEncoding (0.00s) === RUN TestSQLStore_EmptyMessages --- PASS: TestSQLStore_EmptyMessages (0.00s) === RUN TestSQLStore_UpdateExisting --- PASS: TestSQLStore_UpdateExisting (0.01s) FAIL coverage: 66.0% of statements FAIL github.com/ajac-zero/latticelm/internal/conversation 0.768s github.com/ajac-zero/latticelm/internal/logger coverage: 0.0% of statements === RUN TestInitMetrics --- PASS: TestInitMetrics (0.00s) === RUN TestRecordCircuitBreakerStateChange === RUN TestRecordCircuitBreakerStateChange/transition_to_closed === RUN TestRecordCircuitBreakerStateChange/transition_to_open === RUN TestRecordCircuitBreakerStateChange/transition_to_half-open === RUN TestRecordCircuitBreakerStateChange/closed_to_half-open === RUN TestRecordCircuitBreakerStateChange/half-open_to_closed === RUN TestRecordCircuitBreakerStateChange/half-open_to_open --- PASS: TestRecordCircuitBreakerStateChange (0.00s) --- PASS: TestRecordCircuitBreakerStateChange/transition_to_closed (0.00s) --- PASS: TestRecordCircuitBreakerStateChange/transition_to_open (0.00s) --- PASS: TestRecordCircuitBreakerStateChange/transition_to_half-open (0.00s) --- PASS: TestRecordCircuitBreakerStateChange/closed_to_half-open (0.00s) --- PASS: TestRecordCircuitBreakerStateChange/half-open_to_closed (0.00s) --- PASS: TestRecordCircuitBreakerStateChange/half-open_to_open (0.00s) === RUN TestMetricLabels === RUN TestMetricLabels/basic_labels === RUN TestMetricLabels/different_labels === RUN TestMetricLabels/empty_labels --- PASS: TestMetricLabels (0.00s) --- PASS: TestMetricLabels/basic_labels (0.00s) --- PASS: TestMetricLabels/different_labels (0.00s) --- PASS: TestMetricLabels/empty_labels (0.00s) === RUN TestHTTPMetrics === RUN TestHTTPMetrics/GET_request === RUN TestHTTPMetrics/POST_request === RUN TestHTTPMetrics/error_response --- PASS: TestHTTPMetrics (0.00s) --- PASS: TestHTTPMetrics/GET_request (0.00s) --- PASS: TestHTTPMetrics/POST_request (0.00s) --- PASS: TestHTTPMetrics/error_response (0.00s) === RUN TestProviderMetrics === RUN TestProviderMetrics/OpenAI_generate_success === RUN TestProviderMetrics/Anthropic_stream_success === RUN TestProviderMetrics/Google_generate_error --- PASS: TestProviderMetrics (0.00s) --- PASS: TestProviderMetrics/OpenAI_generate_success (0.00s) --- PASS: TestProviderMetrics/Anthropic_stream_success (0.00s) --- PASS: TestProviderMetrics/Google_generate_error (0.00s) === RUN TestConversationStoreMetrics === RUN TestConversationStoreMetrics/create_success === RUN TestConversationStoreMetrics/get_success === RUN TestConversationStoreMetrics/delete_error --- PASS: TestConversationStoreMetrics (0.00s) --- PASS: TestConversationStoreMetrics/create_success (0.00s) --- PASS: TestConversationStoreMetrics/get_success (0.00s) --- PASS: TestConversationStoreMetrics/delete_error (0.00s) === RUN TestMetricHelp --- PASS: TestMetricHelp (0.00s) === RUN TestMetricTypes --- PASS: TestMetricTypes (0.00s) === RUN TestCircuitBreakerInvalidState --- PASS: TestCircuitBreakerInvalidState (0.00s) === RUN TestMetricNaming --- PASS: TestMetricNaming (0.00s) === RUN TestNewInstrumentedProvider === RUN TestNewInstrumentedProvider/with_registry_and_tracer === RUN TestNewInstrumentedProvider/with_registry_only === RUN TestNewInstrumentedProvider/with_tracer_only === RUN TestNewInstrumentedProvider/without_observability --- PASS: TestNewInstrumentedProvider (0.00s) --- PASS: TestNewInstrumentedProvider/with_registry_and_tracer (0.00s) --- PASS: TestNewInstrumentedProvider/with_registry_only (0.00s) --- PASS: TestNewInstrumentedProvider/with_tracer_only (0.00s) --- PASS: TestNewInstrumentedProvider/without_observability (0.00s) === RUN TestInstrumentedProvider_Generate === RUN TestInstrumentedProvider_Generate/successful_generation === RUN TestInstrumentedProvider_Generate/generation_error === RUN TestInstrumentedProvider_Generate/nil_result === RUN TestInstrumentedProvider_Generate/empty_tokens --- PASS: TestInstrumentedProvider_Generate (0.00s) --- PASS: TestInstrumentedProvider_Generate/successful_generation (0.00s) --- PASS: TestInstrumentedProvider_Generate/generation_error (0.00s) --- PASS: TestInstrumentedProvider_Generate/nil_result (0.00s) --- PASS: TestInstrumentedProvider_Generate/empty_tokens (0.00s) === RUN TestInstrumentedProvider_GenerateStream === RUN TestInstrumentedProvider_GenerateStream/successful_streaming provider_wrapper_test.go:438: Error Trace: /home/coder/go-llm-gateway/internal/observability/provider_wrapper_test.go:438 Error: Not equal: expected: 4 actual : 2 Test: TestInstrumentedProvider_GenerateStream/successful_streaming provider_wrapper_test.go:455: Error Trace: /home/coder/go-llm-gateway/internal/observability/provider_wrapper_test.go:455 Error: Not equal: expected: 1 actual : 0 Test: TestInstrumentedProvider_GenerateStream/successful_streaming Messages: stream request counter should be incremented === RUN TestInstrumentedProvider_GenerateStream/streaming_error provider_wrapper_test.go:455: Error Trace: /home/coder/go-llm-gateway/internal/observability/provider_wrapper_test.go:455 Error: Not equal: expected: 1 actual : 0 Test: TestInstrumentedProvider_GenerateStream/streaming_error Messages: stream request counter should be incremented === RUN TestInstrumentedProvider_GenerateStream/empty_stream provider_wrapper_test.go:455: Error Trace: /home/coder/go-llm-gateway/internal/observability/provider_wrapper_test.go:455 Error: Not equal: expected: 1 actual : 0 Test: TestInstrumentedProvider_GenerateStream/empty_stream Messages: stream request counter should be incremented --- FAIL: TestInstrumentedProvider_GenerateStream (0.61s) --- FAIL: TestInstrumentedProvider_GenerateStream/successful_streaming (0.20s) --- FAIL: TestInstrumentedProvider_GenerateStream/streaming_error (0.20s) --- FAIL: TestInstrumentedProvider_GenerateStream/empty_stream (0.20s) === RUN TestInstrumentedProvider_MetricsRecording --- PASS: TestInstrumentedProvider_MetricsRecording (0.00s) === RUN TestInstrumentedProvider_TracingSpans --- PASS: TestInstrumentedProvider_TracingSpans (0.00s) === RUN TestInstrumentedProvider_WithoutObservability --- PASS: TestInstrumentedProvider_WithoutObservability (0.00s) === RUN TestInstrumentedProvider_Name === RUN TestInstrumentedProvider_Name/openai_provider === RUN TestInstrumentedProvider_Name/anthropic_provider === RUN TestInstrumentedProvider_Name/google_provider --- PASS: TestInstrumentedProvider_Name (0.00s) --- PASS: TestInstrumentedProvider_Name/openai_provider (0.00s) --- PASS: TestInstrumentedProvider_Name/anthropic_provider (0.00s) --- PASS: TestInstrumentedProvider_Name/google_provider (0.00s) === RUN TestInstrumentedProvider_ConcurrentCalls --- PASS: TestInstrumentedProvider_ConcurrentCalls (0.00s) === RUN TestInstrumentedProvider_StreamTTFB --- PASS: TestInstrumentedProvider_StreamTTFB (0.15s) === RUN TestInitTracer_StdoutExporter === RUN TestInitTracer_StdoutExporter/stdout_exporter_with_always_sampler tracing_test.go:74: Error Trace: /home/coder/go-llm-gateway/internal/observability/tracing_test.go:74 Error: Received unexpected error: failed to create resource: conflicting Schema URL: https://opentelemetry.io/schemas/1.26.0 and https://opentelemetry.io/schemas/1.24.0 Test: TestInitTracer_StdoutExporter/stdout_exporter_with_always_sampler === RUN TestInitTracer_StdoutExporter/stdout_exporter_with_never_sampler tracing_test.go:74: Error Trace: /home/coder/go-llm-gateway/internal/observability/tracing_test.go:74 Error: Received unexpected error: failed to create resource: conflicting Schema URL: https://opentelemetry.io/schemas/1.26.0 and https://opentelemetry.io/schemas/1.24.0 Test: TestInitTracer_StdoutExporter/stdout_exporter_with_never_sampler === RUN TestInitTracer_StdoutExporter/stdout_exporter_with_probability_sampler tracing_test.go:74: Error Trace: /home/coder/go-llm-gateway/internal/observability/tracing_test.go:74 Error: Received unexpected error: failed to create resource: conflicting Schema URL: https://opentelemetry.io/schemas/1.26.0 and https://opentelemetry.io/schemas/1.24.0 Test: TestInitTracer_StdoutExporter/stdout_exporter_with_probability_sampler --- FAIL: TestInitTracer_StdoutExporter (0.00s) --- FAIL: TestInitTracer_StdoutExporter/stdout_exporter_with_always_sampler (0.00s) --- FAIL: TestInitTracer_StdoutExporter/stdout_exporter_with_never_sampler (0.00s) --- FAIL: TestInitTracer_StdoutExporter/stdout_exporter_with_probability_sampler (0.00s) === RUN TestInitTracer_InvalidExporter tracing_test.go:102: Error Trace: /home/coder/go-llm-gateway/internal/observability/tracing_test.go:102 Error: "failed to create resource: conflicting Schema URL: https://opentelemetry.io/schemas/1.26.0 and https://opentelemetry.io/schemas/1.24.0" does not contain "unsupported exporter type" Test: TestInitTracer_InvalidExporter --- FAIL: TestInitTracer_InvalidExporter (0.00s) === RUN TestCreateSampler === RUN TestCreateSampler/always_sampler === RUN TestCreateSampler/never_sampler === RUN TestCreateSampler/probability_sampler_-_100% === RUN TestCreateSampler/probability_sampler_-_0% === RUN TestCreateSampler/probability_sampler_-_50% === RUN TestCreateSampler/default_sampler_(invalid_type) --- PASS: TestCreateSampler (0.00s) --- PASS: TestCreateSampler/always_sampler (0.00s) --- PASS: TestCreateSampler/never_sampler (0.00s) --- PASS: TestCreateSampler/probability_sampler_-_100% (0.00s) --- PASS: TestCreateSampler/probability_sampler_-_0% (0.00s) --- PASS: TestCreateSampler/probability_sampler_-_50% (0.00s) --- PASS: TestCreateSampler/default_sampler_(invalid_type) (0.00s) === RUN TestShutdown === RUN TestShutdown/shutdown_valid_tracer_provider === RUN TestShutdown/shutdown_nil_tracer_provider --- PASS: TestShutdown (0.00s) --- PASS: TestShutdown/shutdown_valid_tracer_provider (0.00s) --- PASS: TestShutdown/shutdown_nil_tracer_provider (0.00s) === RUN TestShutdown_ContextTimeout --- PASS: TestShutdown_ContextTimeout (0.00s) === RUN TestTracerConfig_ServiceName === RUN TestTracerConfig_ServiceName/default_service_name === RUN TestTracerConfig_ServiceName/custom_service_name === RUN TestTracerConfig_ServiceName/empty_service_name --- PASS: TestTracerConfig_ServiceName (0.00s) --- PASS: TestTracerConfig_ServiceName/default_service_name (0.00s) --- PASS: TestTracerConfig_ServiceName/custom_service_name (0.00s) --- PASS: TestTracerConfig_ServiceName/empty_service_name (0.00s) === RUN TestCreateSampler_EdgeCases === RUN TestCreateSampler_EdgeCases/negative_rate === RUN TestCreateSampler_EdgeCases/rate_greater_than_1 === RUN TestCreateSampler_EdgeCases/empty_type --- PASS: TestCreateSampler_EdgeCases (0.00s) --- PASS: TestCreateSampler_EdgeCases/negative_rate (0.00s) --- PASS: TestCreateSampler_EdgeCases/rate_greater_than_1 (0.00s) --- PASS: TestCreateSampler_EdgeCases/empty_type (0.00s) === RUN TestTracerProvider_MultipleShutdowns --- PASS: TestTracerProvider_MultipleShutdowns (0.00s) === RUN TestSamplerDescription === RUN TestSamplerDescription/always_sampler_description === RUN TestSamplerDescription/never_sampler_description === RUN TestSamplerDescription/probability_sampler_description --- PASS: TestSamplerDescription (0.00s) --- PASS: TestSamplerDescription/always_sampler_description (0.00s) --- PASS: TestSamplerDescription/never_sampler_description (0.00s) --- PASS: TestSamplerDescription/probability_sampler_description (0.00s) === RUN TestInitTracer_ResourceAttributes --- PASS: TestInitTracer_ResourceAttributes (0.00s) === RUN TestProbabilitySampler_Boundaries === RUN TestProbabilitySampler_Boundaries/rate_0.0_-_never_sample === RUN TestProbabilitySampler_Boundaries/rate_1.0_-_always_sample === RUN TestProbabilitySampler_Boundaries/rate_0.5_-_probabilistic --- PASS: TestProbabilitySampler_Boundaries (0.00s) --- PASS: TestProbabilitySampler_Boundaries/rate_0.0_-_never_sample (0.00s) --- PASS: TestProbabilitySampler_Boundaries/rate_1.0_-_always_sample (0.00s) --- PASS: TestProbabilitySampler_Boundaries/rate_0.5_-_probabilistic (0.00s) FAIL coverage: 35.1% of statements FAIL github.com/ajac-zero/latticelm/internal/observability 0.783s === RUN TestNewRegistry === RUN TestNewRegistry/valid_config_with_OpenAI === RUN TestNewRegistry/valid_config_with_multiple_providers === RUN TestNewRegistry/no_providers_returns_error === RUN TestNewRegistry/Azure_OpenAI_without_endpoint_returns_error === RUN TestNewRegistry/Azure_OpenAI_with_endpoint_succeeds === RUN TestNewRegistry/Azure_Anthropic_without_endpoint_returns_error === RUN TestNewRegistry/Azure_Anthropic_with_endpoint_succeeds === RUN TestNewRegistry/Google_provider === RUN TestNewRegistry/Vertex_AI_without_project/location_returns_error === RUN TestNewRegistry/Vertex_AI_with_project_and_location_succeeds === RUN TestNewRegistry/unknown_provider_type_returns_error === RUN TestNewRegistry/provider_with_no_API_key_is_skipped === RUN TestNewRegistry/model_with_provider_model_id --- PASS: TestNewRegistry (0.00s) --- PASS: TestNewRegistry/valid_config_with_OpenAI (0.00s) --- PASS: TestNewRegistry/valid_config_with_multiple_providers (0.00s) --- PASS: TestNewRegistry/no_providers_returns_error (0.00s) --- PASS: TestNewRegistry/Azure_OpenAI_without_endpoint_returns_error (0.00s) --- PASS: TestNewRegistry/Azure_OpenAI_with_endpoint_succeeds (0.00s) --- PASS: TestNewRegistry/Azure_Anthropic_without_endpoint_returns_error (0.00s) --- PASS: TestNewRegistry/Azure_Anthropic_with_endpoint_succeeds (0.00s) --- PASS: TestNewRegistry/Google_provider (0.00s) --- PASS: TestNewRegistry/Vertex_AI_without_project/location_returns_error (0.00s) --- PASS: TestNewRegistry/Vertex_AI_with_project_and_location_succeeds (0.00s) --- PASS: TestNewRegistry/unknown_provider_type_returns_error (0.00s) --- PASS: TestNewRegistry/provider_with_no_API_key_is_skipped (0.00s) --- PASS: TestNewRegistry/model_with_provider_model_id (0.00s) === RUN TestRegistry_Get === RUN TestRegistry_Get/existing_provider === RUN TestRegistry_Get/another_existing_provider === RUN TestRegistry_Get/nonexistent_provider --- PASS: TestRegistry_Get (0.00s) --- PASS: TestRegistry_Get/existing_provider (0.00s) --- PASS: TestRegistry_Get/another_existing_provider (0.00s) --- PASS: TestRegistry_Get/nonexistent_provider (0.00s) === RUN TestRegistry_Models === RUN TestRegistry_Models/single_model === RUN TestRegistry_Models/multiple_models === RUN TestRegistry_Models/no_models --- PASS: TestRegistry_Models (0.00s) --- PASS: TestRegistry_Models/single_model (0.00s) --- PASS: TestRegistry_Models/multiple_models (0.00s) --- PASS: TestRegistry_Models/no_models (0.00s) === RUN TestRegistry_ResolveModelID === RUN TestRegistry_ResolveModelID/model_without_provider_model_id_returns_model_name === RUN TestRegistry_ResolveModelID/model_with_provider_model_id_returns_provider_model_id === RUN TestRegistry_ResolveModelID/unknown_model_returns_model_name --- PASS: TestRegistry_ResolveModelID (0.00s) --- PASS: TestRegistry_ResolveModelID/model_without_provider_model_id_returns_model_name (0.00s) --- PASS: TestRegistry_ResolveModelID/model_with_provider_model_id_returns_provider_model_id (0.00s) --- PASS: TestRegistry_ResolveModelID/unknown_model_returns_model_name (0.00s) === RUN TestRegistry_Default === RUN TestRegistry_Default/returns_provider_for_known_model === RUN TestRegistry_Default/returns_first_provider_for_unknown_model === RUN TestRegistry_Default/returns_first_provider_for_empty_model_name --- PASS: TestRegistry_Default (0.00s) --- PASS: TestRegistry_Default/returns_provider_for_known_model (0.00s) --- PASS: TestRegistry_Default/returns_first_provider_for_unknown_model (0.00s) --- PASS: TestRegistry_Default/returns_first_provider_for_empty_model_name (0.00s) === RUN TestBuildProvider === RUN TestBuildProvider/OpenAI_provider === RUN TestBuildProvider/OpenAI_provider_with_custom_endpoint === RUN TestBuildProvider/Anthropic_provider === RUN TestBuildProvider/Google_provider === RUN TestBuildProvider/provider_without_API_key_returns_nil === RUN TestBuildProvider/unknown_provider_type --- PASS: TestBuildProvider (0.00s) --- PASS: TestBuildProvider/OpenAI_provider (0.00s) --- PASS: TestBuildProvider/OpenAI_provider_with_custom_endpoint (0.00s) --- PASS: TestBuildProvider/Anthropic_provider (0.00s) --- PASS: TestBuildProvider/Google_provider (0.00s) --- PASS: TestBuildProvider/provider_without_API_key_returns_nil (0.00s) --- PASS: TestBuildProvider/unknown_provider_type (0.00s) PASS coverage: 63.1% of statements ok github.com/ajac-zero/latticelm/internal/providers 0.035s coverage: 63.1% of statements === RUN TestParseTools --- PASS: TestParseTools (0.00s) === RUN TestParseToolChoice === RUN TestParseToolChoice/auto === RUN TestParseToolChoice/any === RUN TestParseToolChoice/required === RUN TestParseToolChoice/specific_tool --- PASS: TestParseToolChoice (0.00s) --- PASS: TestParseToolChoice/auto (0.00s) --- PASS: TestParseToolChoice/any (0.00s) --- PASS: TestParseToolChoice/required (0.00s) --- PASS: TestParseToolChoice/specific_tool (0.00s) PASS coverage: 16.2% of statements ok github.com/ajac-zero/latticelm/internal/providers/anthropic 0.016s coverage: 16.2% of statements === RUN TestParseTools === RUN TestParseTools/flat_format_tool === RUN TestParseTools/nested_format_tool === RUN TestParseTools/multiple_tools === RUN TestParseTools/tool_without_description === RUN TestParseTools/tool_without_parameters === RUN TestParseTools/tool_without_name_(should_skip) === RUN TestParseTools/nil_tools === RUN TestParseTools/invalid_JSON === RUN TestParseTools/empty_array --- PASS: TestParseTools (0.00s) --- PASS: TestParseTools/flat_format_tool (0.00s) --- PASS: TestParseTools/nested_format_tool (0.00s) --- PASS: TestParseTools/multiple_tools (0.00s) --- PASS: TestParseTools/tool_without_description (0.00s) --- PASS: TestParseTools/tool_without_parameters (0.00s) --- PASS: TestParseTools/tool_without_name_(should_skip) (0.00s) --- PASS: TestParseTools/nil_tools (0.00s) --- PASS: TestParseTools/invalid_JSON (0.00s) --- PASS: TestParseTools/empty_array (0.00s) === RUN TestParseToolChoice === RUN TestParseToolChoice/auto_mode === RUN TestParseToolChoice/none_mode === RUN TestParseToolChoice/required_mode === RUN TestParseToolChoice/any_mode === RUN TestParseToolChoice/specific_function === RUN TestParseToolChoice/nil_tool_choice === RUN TestParseToolChoice/unknown_string_mode === RUN TestParseToolChoice/invalid_JSON === RUN TestParseToolChoice/unsupported_object_format --- PASS: TestParseToolChoice (0.00s) --- PASS: TestParseToolChoice/auto_mode (0.00s) --- PASS: TestParseToolChoice/none_mode (0.00s) --- PASS: TestParseToolChoice/required_mode (0.00s) --- PASS: TestParseToolChoice/any_mode (0.00s) --- PASS: TestParseToolChoice/specific_function (0.00s) --- PASS: TestParseToolChoice/nil_tool_choice (0.00s) --- PASS: TestParseToolChoice/unknown_string_mode (0.00s) --- PASS: TestParseToolChoice/invalid_JSON (0.00s) --- PASS: TestParseToolChoice/unsupported_object_format (0.00s) === RUN TestExtractToolCalls === RUN TestExtractToolCalls/single_tool_call === RUN TestExtractToolCalls/tool_call_without_ID_generates_one === RUN TestExtractToolCalls/response_with_nil_candidates === RUN TestExtractToolCalls/empty_candidates --- PASS: TestExtractToolCalls (0.00s) --- PASS: TestExtractToolCalls/single_tool_call (0.00s) --- PASS: TestExtractToolCalls/tool_call_without_ID_generates_one (0.00s) --- PASS: TestExtractToolCalls/response_with_nil_candidates (0.00s) --- PASS: TestExtractToolCalls/empty_candidates (0.00s) === RUN TestGenerateRandomID === RUN TestGenerateRandomID/generates_non-empty_ID === RUN TestGenerateRandomID/generates_unique_IDs === RUN TestGenerateRandomID/only_contains_valid_characters --- PASS: TestGenerateRandomID (0.00s) --- PASS: TestGenerateRandomID/generates_non-empty_ID (0.00s) --- PASS: TestGenerateRandomID/generates_unique_IDs (0.00s) --- PASS: TestGenerateRandomID/only_contains_valid_characters (0.00s) PASS coverage: 27.7% of statements ok github.com/ajac-zero/latticelm/internal/providers/google 0.017s coverage: 27.7% of statements === RUN TestParseTools === RUN TestParseTools/single_tool_with_all_fields === RUN TestParseTools/multiple_tools === RUN TestParseTools/tool_without_description === RUN TestParseTools/tool_without_parameters === RUN TestParseTools/nil_tools === RUN TestParseTools/invalid_JSON === RUN TestParseTools/empty_array --- PASS: TestParseTools (0.00s) --- PASS: TestParseTools/single_tool_with_all_fields (0.00s) --- PASS: TestParseTools/multiple_tools (0.00s) --- PASS: TestParseTools/tool_without_description (0.00s) --- PASS: TestParseTools/tool_without_parameters (0.00s) --- PASS: TestParseTools/nil_tools (0.00s) --- PASS: TestParseTools/invalid_JSON (0.00s) --- PASS: TestParseTools/empty_array (0.00s) === RUN TestParseToolChoice === RUN TestParseToolChoice/auto_string === RUN TestParseToolChoice/none_string === RUN TestParseToolChoice/required_string === RUN TestParseToolChoice/specific_function === RUN TestParseToolChoice/nil_tool_choice === RUN TestParseToolChoice/invalid_JSON === RUN TestParseToolChoice/unsupported_format_(object_without_proper_structure) --- PASS: TestParseToolChoice (0.00s) --- PASS: TestParseToolChoice/auto_string (0.00s) --- PASS: TestParseToolChoice/none_string (0.00s) --- PASS: TestParseToolChoice/required_string (0.00s) --- PASS: TestParseToolChoice/specific_function (0.00s) --- PASS: TestParseToolChoice/nil_tool_choice (0.00s) --- PASS: TestParseToolChoice/invalid_JSON (0.00s) --- PASS: TestParseToolChoice/unsupported_format_(object_without_proper_structure) (0.00s) === RUN TestExtractToolCalls === RUN TestExtractToolCalls/nil_message_returns_nil --- PASS: TestExtractToolCalls (0.00s) --- PASS: TestExtractToolCalls/nil_message_returns_nil (0.00s) === RUN TestExtractToolCallDelta === RUN TestExtractToolCallDelta/empty_delta_returns_nil --- PASS: TestExtractToolCallDelta (0.00s) --- PASS: TestExtractToolCallDelta/empty_delta_returns_nil (0.00s) PASS coverage: 16.1% of statements ok github.com/ajac-zero/latticelm/internal/providers/openai 0.024s coverage: 16.1% of statements === RUN TestRateLimitMiddleware === RUN TestRateLimitMiddleware/disabled_rate_limiting_allows_all_requests === RUN TestRateLimitMiddleware/enabled_rate_limiting_enforces_limits time=2026-03-05T17:59:57.097Z level=WARN msg="rate limit exceeded" ip=192.168.1.1:1234 path=/test time=2026-03-05T17:59:57.097Z level=WARN msg="rate limit exceeded" ip=192.168.1.1:1234 path=/test time=2026-03-05T17:59:57.097Z level=WARN msg="rate limit exceeded" ip=192.168.1.1:1234 path=/test --- PASS: TestRateLimitMiddleware (0.00s) --- PASS: TestRateLimitMiddleware/disabled_rate_limiting_allows_all_requests (0.00s) --- PASS: TestRateLimitMiddleware/enabled_rate_limiting_enforces_limits (0.00s) === RUN TestGetClientIP === RUN TestGetClientIP/uses_X-Forwarded-For_if_present === RUN TestGetClientIP/uses_X-Real-IP_if_X-Forwarded-For_not_present === RUN TestGetClientIP/uses_RemoteAddr_as_fallback --- PASS: TestGetClientIP (0.00s) --- PASS: TestGetClientIP/uses_X-Forwarded-For_if_present (0.00s) --- PASS: TestGetClientIP/uses_X-Real-IP_if_X-Forwarded-For_not_present (0.00s) --- PASS: TestGetClientIP/uses_RemoteAddr_as_fallback (0.00s) === RUN TestRateLimitRefill time=2026-03-05T17:59:57.097Z level=WARN msg="rate limit exceeded" ip=192.168.1.1:1234 path=/test --- PASS: TestRateLimitRefill (0.15s) PASS coverage: 87.2% of statements ok github.com/ajac-zero/latticelm/internal/ratelimit 0.160s coverage: 87.2% of statements === RUN TestHealthEndpoint === RUN TestHealthEndpoint/GET_returns_healthy_status === RUN TestHealthEndpoint/POST_returns_method_not_allowed --- PASS: TestHealthEndpoint (0.00s) --- PASS: TestHealthEndpoint/GET_returns_healthy_status (0.00s) --- PASS: TestHealthEndpoint/POST_returns_method_not_allowed (0.00s) === RUN TestReadyEndpoint === RUN TestReadyEndpoint/returns_ready_when_all_checks_pass === RUN TestReadyEndpoint/returns_not_ready_when_no_providers_configured --- PASS: TestReadyEndpoint (0.00s) --- PASS: TestReadyEndpoint/returns_ready_when_all_checks_pass (0.00s) --- PASS: TestReadyEndpoint/returns_not_ready_when_no_providers_configured (0.00s) === RUN TestReadyEndpointMethodNotAllowed --- PASS: TestReadyEndpointMethodNotAllowed (0.00s) === RUN TestPanicRecoveryMiddleware === RUN TestPanicRecoveryMiddleware/no_panic_-_request_succeeds === RUN TestPanicRecoveryMiddleware/panic_with_string_-_recovers_gracefully === RUN TestPanicRecoveryMiddleware/panic_with_error_-_recovers_gracefully === RUN TestPanicRecoveryMiddleware/panic_with_struct_-_recovers_gracefully --- PASS: TestPanicRecoveryMiddleware (0.00s) --- PASS: TestPanicRecoveryMiddleware/no_panic_-_request_succeeds (0.00s) --- PASS: TestPanicRecoveryMiddleware/panic_with_string_-_recovers_gracefully (0.00s) --- PASS: TestPanicRecoveryMiddleware/panic_with_error_-_recovers_gracefully (0.00s) --- PASS: TestPanicRecoveryMiddleware/panic_with_struct_-_recovers_gracefully (0.00s) === RUN TestRequestSizeLimitMiddleware === RUN TestRequestSizeLimitMiddleware/small_POST_request_-_succeeds === RUN TestRequestSizeLimitMiddleware/exact_size_POST_request_-_succeeds === RUN TestRequestSizeLimitMiddleware/oversized_POST_request_-_fails === RUN TestRequestSizeLimitMiddleware/large_POST_request_-_fails === RUN TestRequestSizeLimitMiddleware/oversized_PUT_request_-_fails === RUN TestRequestSizeLimitMiddleware/oversized_PATCH_request_-_fails === RUN TestRequestSizeLimitMiddleware/GET_request_-_no_size_limit_applied === RUN TestRequestSizeLimitMiddleware/DELETE_request_-_no_size_limit_applied --- PASS: TestRequestSizeLimitMiddleware (0.00s) --- PASS: TestRequestSizeLimitMiddleware/small_POST_request_-_succeeds (0.00s) --- PASS: TestRequestSizeLimitMiddleware/exact_size_POST_request_-_succeeds (0.00s) --- PASS: TestRequestSizeLimitMiddleware/oversized_POST_request_-_fails (0.00s) --- PASS: TestRequestSizeLimitMiddleware/large_POST_request_-_fails (0.00s) --- PASS: TestRequestSizeLimitMiddleware/oversized_PUT_request_-_fails (0.00s) --- PASS: TestRequestSizeLimitMiddleware/oversized_PATCH_request_-_fails (0.00s) --- PASS: TestRequestSizeLimitMiddleware/GET_request_-_no_size_limit_applied (0.00s) --- PASS: TestRequestSizeLimitMiddleware/DELETE_request_-_no_size_limit_applied (0.00s) === RUN TestRequestSizeLimitMiddleware_WithJSONDecoding === RUN TestRequestSizeLimitMiddleware_WithJSONDecoding/small_JSON_payload_-_succeeds === RUN TestRequestSizeLimitMiddleware_WithJSONDecoding/large_JSON_payload_-_fails --- PASS: TestRequestSizeLimitMiddleware_WithJSONDecoding (0.00s) --- PASS: TestRequestSizeLimitMiddleware_WithJSONDecoding/small_JSON_payload_-_succeeds (0.00s) --- PASS: TestRequestSizeLimitMiddleware_WithJSONDecoding/large_JSON_payload_-_fails (0.00s) === RUN TestWriteJSONError === RUN TestWriteJSONError/simple_error_message === RUN TestWriteJSONError/internal_server_error === RUN TestWriteJSONError/unauthorized_error --- PASS: TestWriteJSONError (0.00s) --- PASS: TestWriteJSONError/simple_error_message (0.00s) --- PASS: TestWriteJSONError/internal_server_error (0.00s) --- PASS: TestWriteJSONError/unauthorized_error (0.00s) === RUN TestPanicRecoveryMiddleware_Integration --- PASS: TestPanicRecoveryMiddleware_Integration (0.00s) === RUN TestHandleModels === RUN TestHandleModels/GET_returns_model_list === RUN TestHandleModels/POST_returns_405 === RUN TestHandleModels/empty_registry_returns_empty_list --- PASS: TestHandleModels (0.00s) --- PASS: TestHandleModels/GET_returns_model_list (0.00s) --- PASS: TestHandleModels/POST_returns_405 (0.00s) --- PASS: TestHandleModels/empty_registry_returns_empty_list (0.00s) === RUN TestHandleResponses_Validation === RUN TestHandleResponses_Validation/GET_returns_405 === RUN TestHandleResponses_Validation/invalid_JSON_returns_400 === RUN TestHandleResponses_Validation/missing_model_returns_400 === RUN TestHandleResponses_Validation/missing_input_returns_400 --- PASS: TestHandleResponses_Validation (0.00s) --- PASS: TestHandleResponses_Validation/GET_returns_405 (0.00s) --- PASS: TestHandleResponses_Validation/invalid_JSON_returns_400 (0.00s) --- PASS: TestHandleResponses_Validation/missing_model_returns_400 (0.00s) --- PASS: TestHandleResponses_Validation/missing_input_returns_400 (0.00s) === RUN TestHandleResponses_Sync_Success === RUN TestHandleResponses_Sync_Success/simple_text_response === RUN TestHandleResponses_Sync_Success/response_with_tool_calls === RUN TestHandleResponses_Sync_Success/response_with_multiple_tool_calls === RUN TestHandleResponses_Sync_Success/response_with_only_tool_calls_(no_text) === RUN TestHandleResponses_Sync_Success/response_echoes_request_parameters --- PASS: TestHandleResponses_Sync_Success (0.00s) --- PASS: TestHandleResponses_Sync_Success/simple_text_response (0.00s) --- PASS: TestHandleResponses_Sync_Success/response_with_tool_calls (0.00s) --- PASS: TestHandleResponses_Sync_Success/response_with_multiple_tool_calls (0.00s) --- PASS: TestHandleResponses_Sync_Success/response_with_only_tool_calls_(no_text) (0.00s) --- PASS: TestHandleResponses_Sync_Success/response_echoes_request_parameters (0.00s) === RUN TestHandleResponses_Sync_ConversationHistory === RUN TestHandleResponses_Sync_ConversationHistory/without_previous_response_id === RUN TestHandleResponses_Sync_ConversationHistory/with_valid_previous_response_id === RUN TestHandleResponses_Sync_ConversationHistory/with_instructions_prepends_developer_message === RUN TestHandleResponses_Sync_ConversationHistory/nonexistent_conversation_returns_404 === RUN TestHandleResponses_Sync_ConversationHistory/conversation_store_error_returns_500 --- PASS: TestHandleResponses_Sync_ConversationHistory (0.00s) --- PASS: TestHandleResponses_Sync_ConversationHistory/without_previous_response_id (0.00s) --- PASS: TestHandleResponses_Sync_ConversationHistory/with_valid_previous_response_id (0.00s) --- PASS: TestHandleResponses_Sync_ConversationHistory/with_instructions_prepends_developer_message (0.00s) --- PASS: TestHandleResponses_Sync_ConversationHistory/nonexistent_conversation_returns_404 (0.00s) --- PASS: TestHandleResponses_Sync_ConversationHistory/conversation_store_error_returns_500 (0.00s) === RUN TestHandleResponses_Sync_ProviderErrors === RUN TestHandleResponses_Sync_ProviderErrors/provider_returns_error === RUN TestHandleResponses_Sync_ProviderErrors/provider_not_configured --- PASS: TestHandleResponses_Sync_ProviderErrors (0.00s) --- PASS: TestHandleResponses_Sync_ProviderErrors/provider_returns_error (0.00s) --- PASS: TestHandleResponses_Sync_ProviderErrors/provider_not_configured (0.00s) === RUN TestHandleResponses_Stream_Success === RUN TestHandleResponses_Stream_Success/simple_text_streaming === RUN TestHandleResponses_Stream_Success/streaming_with_tool_calls === RUN TestHandleResponses_Stream_Success/streaming_with_multiple_tool_calls --- PASS: TestHandleResponses_Stream_Success (0.00s) --- PASS: TestHandleResponses_Stream_Success/simple_text_streaming (0.00s) --- PASS: TestHandleResponses_Stream_Success/streaming_with_tool_calls (0.00s) --- PASS: TestHandleResponses_Stream_Success/streaming_with_multiple_tool_calls (0.00s) === RUN TestHandleResponses_Stream_Errors === RUN TestHandleResponses_Stream_Errors/stream_error_returns_failed_event --- PASS: TestHandleResponses_Stream_Errors (0.00s) --- PASS: TestHandleResponses_Stream_Errors/stream_error_returns_failed_event (0.00s) === RUN TestResolveProvider === RUN TestResolveProvider/explicit_provider_selection === RUN TestResolveProvider/default_by_model_name === RUN TestResolveProvider/provider_not_found_returns_error --- PASS: TestResolveProvider (0.00s) --- PASS: TestResolveProvider/explicit_provider_selection (0.00s) --- PASS: TestResolveProvider/default_by_model_name (0.00s) --- PASS: TestResolveProvider/provider_not_found_returns_error (0.00s) === RUN TestGenerateID === RUN TestGenerateID/resp__prefix === RUN TestGenerateID/msg__prefix === RUN TestGenerateID/item__prefix --- PASS: TestGenerateID (0.00s) --- PASS: TestGenerateID/resp__prefix (0.00s) --- PASS: TestGenerateID/msg__prefix (0.00s) --- PASS: TestGenerateID/item__prefix (0.00s) === RUN TestBuildResponse === RUN TestBuildResponse/minimal_response_structure === RUN TestBuildResponse/response_with_tool_calls === RUN TestBuildResponse/parameter_echoing_with_defaults === RUN TestBuildResponse/parameter_echoing_with_custom_values === RUN TestBuildResponse/usage_included_when_text_present === RUN TestBuildResponse/no_usage_when_no_text === RUN TestBuildResponse/instructions_prepended === RUN TestBuildResponse/previous_response_id_included --- PASS: TestBuildResponse (0.00s) --- PASS: TestBuildResponse/minimal_response_structure (0.00s) --- PASS: TestBuildResponse/response_with_tool_calls (0.00s) --- PASS: TestBuildResponse/parameter_echoing_with_defaults (0.00s) --- PASS: TestBuildResponse/parameter_echoing_with_custom_values (0.00s) --- PASS: TestBuildResponse/usage_included_when_text_present (0.00s) --- PASS: TestBuildResponse/no_usage_when_no_text (0.00s) --- PASS: TestBuildResponse/instructions_prepended (0.00s) --- PASS: TestBuildResponse/previous_response_id_included (0.00s) === RUN TestSendSSE --- PASS: TestSendSSE (0.00s) PASS coverage: 90.8% of statements ok github.com/ajac-zero/latticelm/internal/server 0.018s coverage: 90.8% of statements FAIL