11import pytest
2+ from unittest .mock import patch
23from openai import OpenAI
34from traceloop .sdk .decorators import workflow
45
@@ -8,6 +9,51 @@ def openai_client():
89 return OpenAI ()
910
1011
12+ class TestInitSpansExporter :
13+ """Tests for init_spans_exporter with different URL schemes."""
14+
15+ @pytest .mark .parametrize ("endpoint" , [
16+ "http://localhost:4318" ,
17+ "https://localhost:4318" ,
18+ "HTTP://localhost:4318" ,
19+ ])
20+ def test_http_schemes (self , endpoint ):
21+ from traceloop .sdk .tracing .tracing import init_spans_exporter
22+ from opentelemetry .exporter .otlp .proto .http .trace_exporter import OTLPSpanExporter
23+ assert isinstance (init_spans_exporter (endpoint , {}), OTLPSpanExporter )
24+
25+ @pytest .mark .parametrize ("endpoint,expected_endpoint" , [
26+ ("http://localhost:4318" , "http://localhost:4318/v1/traces" ),
27+ ("http://localhost:4318/" , "http://localhost:4318/v1/traces" ),
28+ ("http://localhost:4318/v1/traces" , "http://localhost:4318/v1/traces" ),
29+ ("https://api.example.com" , "https://api.example.com/v1/traces" ),
30+ (" http://localhost:4318 " , "http://localhost:4318/v1/traces" ),
31+ ])
32+ def test_http_endpoint_construction (self , endpoint , expected_endpoint ):
33+ from traceloop .sdk .tracing .tracing import init_spans_exporter
34+ from opentelemetry .exporter .otlp .proto .http .trace_exporter import OTLPSpanExporter
35+
36+ with patch .object (OTLPSpanExporter , "__init__" , return_value = None ) as mock :
37+ init_spans_exporter (endpoint , {})
38+ mock .assert_called_once_with (endpoint = expected_endpoint , headers = {})
39+
40+ @pytest .mark .parametrize ("endpoint,expected_endpoint,insecure" , [
41+ ("grpc://localhost:4317" , "localhost:4317" , True ),
42+ ("GRPC://host:4317" , "host:4317" , True ),
43+ ("grpcs://localhost:4317" , "localhost:4317" , False ),
44+ ("GRPCS://host:4317" , "host:4317" , False ),
45+ (" grpc://localhost:4317 " , "localhost:4317" , True ), # whitespace stripped
46+ ("localhost:4317" , "localhost:4317" , True ), # no scheme = insecure gRPC
47+ ])
48+ def test_grpc_schemes (self , endpoint , expected_endpoint , insecure ):
49+ from traceloop .sdk .tracing .tracing import init_spans_exporter
50+ from opentelemetry .exporter .otlp .proto .grpc .trace_exporter import OTLPSpanExporter
51+
52+ with patch .object (OTLPSpanExporter , "__init__" , return_value = None ) as mock :
53+ init_spans_exporter (endpoint , {})
54+ mock .assert_called_once_with (endpoint = expected_endpoint , headers = {}, insecure = insecure )
55+
56+
1157@pytest .mark .vcr
1258def test_resource_attributes (exporter , openai_client ):
1359 openai_client .chat .completions .create (
0 commit comments