|
7 | 7 | require 'google/protobuf/wrappers_pb' |
8 | 8 | require 'google/protobuf/well_known_types' |
9 | 9 |
|
10 | | -describe OpenTelemetry::Exporter::OTLP::HTTP::Exporter do |
| 10 | +describe OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter do |
11 | 11 | SUCCESS = OpenTelemetry::SDK::Trace::Export::SUCCESS |
12 | 12 | FAILURE = OpenTelemetry::SDK::Trace::Export::FAILURE |
13 | 13 |
|
14 | 14 | describe '#initialize' do |
15 | 15 | it 'initializes with defaults' do |
16 | | - exp = OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 16 | + exp = OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
17 | 17 | _(exp).wont_be_nil |
18 | 18 | _(exp.instance_variable_get(:@headers)).must_be_empty |
19 | 19 | _(exp.instance_variable_get(:@timeout)).must_equal 10.0 |
|
29 | 29 |
|
30 | 30 | it 'refuses invalid endpoint' do |
31 | 31 | assert_raises ArgumentError do |
32 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new(endpoint: 'not a url') |
| 32 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new(endpoint: 'not a url') |
33 | 33 | end |
34 | 34 | end |
35 | 35 |
|
36 | 36 | it 'uses endpoints path if provided' do |
37 | | - exp = OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new(endpoint: 'https://localhost/custom/path') |
| 37 | + exp = OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new(endpoint: 'https://localhost/custom/path') |
38 | 38 | _(exp.instance_variable_get(:@path)).must_equal '/custom/path' |
39 | 39 | end |
40 | 40 |
|
41 | 41 | it 'only allows gzip compression or none' do |
42 | 42 | assert_raises ArgumentError do |
43 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new(compression: 'flate') |
| 43 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new(compression: 'flate') |
44 | 44 | end |
45 | | - exp = OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new(compression: nil) |
| 45 | + exp = OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new(compression: nil) |
46 | 46 | _(exp.instance_variable_get(:@compression)).must_be_nil |
47 | 47 |
|
48 | 48 | %w[gzip none].each do |compression| |
49 | | - exp = OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new(compression: compression) |
| 49 | + exp = OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new(compression: compression) |
50 | 50 | _(exp.instance_variable_get(:@compression)).must_equal(compression) |
51 | 51 | end |
52 | 52 |
|
|
57 | 57 | { envar: 'OTEL_EXPORTER_OTLP_TRACES_COMPRESSION', value: 'none' } |
58 | 58 | ].each do |example| |
59 | 59 | OpenTelemetry::TestHelpers.with_env(example[:envar] => example[:value]) do |
60 | | - exp = OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 60 | + exp = OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
61 | 61 | _(exp.instance_variable_get(:@compression)).must_equal(example[:value]) |
62 | 62 | end |
63 | 63 | end |
|
70 | 70 | 'OTEL_EXPORTER_OTLP_COMPRESSION' => 'gzip', |
71 | 71 | 'OTEL_RUBY_EXPORTER_OTLP_SSL_VERIFY_NONE' => 'true', |
72 | 72 | 'OTEL_EXPORTER_OTLP_TIMEOUT' => '11') do |
73 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 73 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
74 | 74 | end |
75 | 75 | _(exp.instance_variable_get(:@headers)).must_equal('a' => 'b', 'c' => 'd') |
76 | 76 | _(exp.instance_variable_get(:@timeout)).must_equal 11.0 |
|
91 | 91 | 'OTEL_EXPORTER_OTLP_COMPRESSION' => 'flate', |
92 | 92 | 'OTEL_RUBY_EXPORTER_OTLP_SSL_VERIFY_PEER' => 'true', |
93 | 93 | 'OTEL_EXPORTER_OTLP_TIMEOUT' => '11') do |
94 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new(endpoint: 'http://localhost:4321', |
95 | | - certificate_file: '/baz', |
96 | | - headers: { 'x' => 'y' }, |
97 | | - compression: 'gzip', |
98 | | - ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE, |
99 | | - timeout: 12) |
| 94 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new(endpoint: 'http://localhost:4321', |
| 95 | + certificate_file: '/baz', |
| 96 | + headers: { 'x' => 'y' }, |
| 97 | + compression: 'gzip', |
| 98 | + ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE, |
| 99 | + timeout: 12) |
100 | 100 | end |
101 | 101 | _(exp.instance_variable_get(:@headers)).must_equal('x' => 'y') |
102 | 102 | _(exp.instance_variable_get(:@timeout)).must_equal 12.0 |
|
111 | 111 | end |
112 | 112 |
|
113 | 113 | it 'restricts explicit headers to a String or Hash' do |
114 | | - exp = OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new(headers: { 'token' => 'über' }) |
| 114 | + exp = OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new(headers: { 'token' => 'über' }) |
115 | 115 | _(exp.instance_variable_get(:@headers)).must_equal('token' => 'über') |
116 | 116 |
|
117 | | - exp = OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new(headers: 'token=%C3%BCber') |
| 117 | + exp = OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new(headers: 'token=%C3%BCber') |
118 | 118 | _(exp.instance_variable_get(:@headers)).must_equal('token' => 'über') |
119 | 119 |
|
120 | | - error = _() { |
121 | | - exp = OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new(headers: Object.new) |
| 120 | + error = _ do |
| 121 | + exp = OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new(headers: Object.new) |
122 | 122 | _(exp.instance_variable_get(:@headers)).must_equal('token' => 'über') |
123 | | - }.must_raise(ArgumentError) |
| 123 | + end.must_raise(ArgumentError) |
124 | 124 | _(error.message).must_match(/headers/i) |
125 | 125 | end |
126 | 126 |
|
127 | 127 | describe 'Headers Environment Variable' do |
128 | 128 | it 'allows any number of the equal sign (=) characters in the value' do |
129 | 129 | exp = OpenTelemetry::TestHelpers.with_env('OTEL_EXPORTER_OTLP_HEADERS' => 'a=b,c=d==,e=f') do |
130 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 130 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
131 | 131 | end |
132 | 132 | _(exp.instance_variable_get(:@headers)).must_equal('a' => 'b', 'c' => 'd==', 'e' => 'f') |
133 | 133 |
|
134 | 134 | exp = OpenTelemetry::TestHelpers.with_env('OTEL_EXPORTER_OTLP_TRACES_HEADERS' => 'a=b,c=d==,e=f') do |
135 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 135 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
136 | 136 | end |
137 | 137 | _(exp.instance_variable_get(:@headers)).must_equal('a' => 'b', 'c' => 'd==', 'e' => 'f') |
138 | 138 | end |
139 | 139 |
|
140 | 140 | it 'trims any leading or trailing whitespaces in keys and values' do |
141 | 141 | exp = OpenTelemetry::TestHelpers.with_env('OTEL_EXPORTER_OTLP_HEADERS' => 'a = b ,c=d , e=f') do |
142 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 142 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
143 | 143 | end |
144 | 144 | _(exp.instance_variable_get(:@headers)).must_equal('a' => 'b', 'c' => 'd', 'e' => 'f') |
145 | 145 |
|
146 | 146 | exp = OpenTelemetry::TestHelpers.with_env('OTEL_EXPORTER_OTLP_TRACES_HEADERS' => 'a = b ,c=d , e=f') do |
147 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 147 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
148 | 148 | end |
149 | 149 | _(exp.instance_variable_get(:@headers)).must_equal('a' => 'b', 'c' => 'd', 'e' => 'f') |
150 | 150 | end |
151 | 151 |
|
152 | 152 | it 'decodes values as URL encoded UTF-8 strings' do |
153 | 153 | exp = OpenTelemetry::TestHelpers.with_env('OTEL_EXPORTER_OTLP_HEADERS' => 'token=%C3%BCber') do |
154 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 154 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
155 | 155 | end |
156 | 156 | _(exp.instance_variable_get(:@headers)).must_equal('token' => 'über') |
157 | 157 |
|
158 | 158 | exp = OpenTelemetry::TestHelpers.with_env('OTEL_EXPORTER_OTLP_HEADERS' => '%C3%BCber=token') do |
159 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 159 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
160 | 160 | end |
161 | 161 | _(exp.instance_variable_get(:@headers)).must_equal('über' => 'token') |
162 | 162 |
|
163 | 163 | exp = OpenTelemetry::TestHelpers.with_env('OTEL_EXPORTER_OTLP_TRACES_HEADERS' => 'token=%C3%BCber') do |
164 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 164 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
165 | 165 | end |
166 | 166 | _(exp.instance_variable_get(:@headers)).must_equal('token' => 'über') |
167 | 167 |
|
168 | 168 | exp = OpenTelemetry::TestHelpers.with_env('OTEL_EXPORTER_OTLP_TRACES_HEADERS' => '%C3%BCber=token') do |
169 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 169 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
170 | 170 | end |
171 | 171 | _(exp.instance_variable_get(:@headers)).must_equal('über' => 'token') |
172 | 172 | end |
173 | 173 |
|
174 | 174 | it 'prefers TRACES specific variable' do |
175 | 175 | exp = OpenTelemetry::TestHelpers.with_env('OTEL_EXPORTER_OTLP_HEADERS' => 'a=b,c=d==,e=f', 'OTEL_EXPORTER_OTLP_TRACES_HEADERS' => 'token=%C3%BCber') do |
176 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 176 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
177 | 177 | end |
178 | 178 | _(exp.instance_variable_get(:@headers)).must_equal('token' => 'über') |
179 | 179 | end |
180 | 180 |
|
181 | 181 | it 'fails fast when header values are missing' do |
182 | | - error = _() { |
| 182 | + error = _ do |
183 | 183 | OpenTelemetry::TestHelpers.with_env('OTEL_EXPORTER_OTLP_HEADERS' => 'a = ') do |
184 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 184 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
185 | 185 | end |
186 | | - }.must_raise(ArgumentError) |
| 186 | + end.must_raise(ArgumentError) |
187 | 187 | _(error.message).must_match(/headers/i) |
188 | 188 |
|
189 | | - error = _() { |
| 189 | + error = _ do |
190 | 190 | OpenTelemetry::TestHelpers.with_env('OTEL_EXPORTER_OTLP_TRACES_HEADERS' => 'a = ') do |
191 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 191 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
192 | 192 | end |
193 | | - }.must_raise(ArgumentError) |
| 193 | + end.must_raise(ArgumentError) |
194 | 194 | _(error.message).must_match(/headers/i) |
195 | 195 | end |
196 | 196 |
|
197 | 197 | it 'fails fast when header or values are not found' do |
198 | | - error = _() { |
| 198 | + error = _ do |
199 | 199 | OpenTelemetry::TestHelpers.with_env('OTEL_EXPORTER_OTLP_HEADERS' => ',') do |
200 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 200 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
201 | 201 | end |
202 | | - }.must_raise(ArgumentError) |
| 202 | + end.must_raise(ArgumentError) |
203 | 203 | _(error.message).must_match(/headers/i) |
204 | 204 |
|
205 | | - error = _() { |
| 205 | + error = _ do |
206 | 206 | OpenTelemetry::TestHelpers.with_env('OTEL_EXPORTER_OTLP_TRACES_HEADERS' => ',') do |
207 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 207 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
208 | 208 | end |
209 | | - }.must_raise(ArgumentError) |
| 209 | + end.must_raise(ArgumentError) |
210 | 210 | _(error.message).must_match(/headers/i) |
211 | 211 | end |
212 | 212 |
|
213 | 213 | it 'fails fast when header values contain invalid escape characters' do |
214 | | - error = _() { |
| 214 | + error = _ do |
215 | 215 | OpenTelemetry::TestHelpers.with_env('OTEL_EXPORTER_OTLP_HEADERS' => 'c=hi%F3') do |
216 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 216 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
217 | 217 | end |
218 | | - }.must_raise(ArgumentError) |
| 218 | + end.must_raise(ArgumentError) |
219 | 219 | _(error.message).must_match(/headers/i) |
220 | 220 |
|
221 | | - error = _() { |
| 221 | + error = _ do |
222 | 222 | OpenTelemetry::TestHelpers.with_env('OTEL_EXPORTER_OTLP_TRACES_HEADERS' => 'c=hi%F3') do |
223 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 223 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
224 | 224 | end |
225 | | - }.must_raise(ArgumentError) |
| 225 | + end.must_raise(ArgumentError) |
226 | 226 | _(error.message).must_match(/headers/i) |
227 | 227 | end |
228 | 228 |
|
229 | 229 | it 'fails fast when headers are invalid' do |
230 | | - error = _() { |
| 230 | + error = _ do |
231 | 231 | OpenTelemetry::TestHelpers.with_env('OTEL_EXPORTER_OTLP_HEADERS' => 'this is not a header') do |
232 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 232 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
233 | 233 | end |
234 | | - }.must_raise(ArgumentError) |
| 234 | + end.must_raise(ArgumentError) |
235 | 235 | _(error.message).must_match(/headers/i) |
236 | 236 |
|
237 | | - error = _() { |
| 237 | + error = _ do |
238 | 238 | OpenTelemetry::TestHelpers.with_env('OTEL_EXPORTER_OTLP_TRACES_HEADERS' => 'this is not a header') do |
239 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 239 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
240 | 240 | end |
241 | | - }.must_raise(ArgumentError) |
| 241 | + end.must_raise(ArgumentError) |
242 | 242 | _(error.message).must_match(/headers/i) |
243 | 243 | end |
244 | 244 | end |
|
247 | 247 | describe 'ssl_verify_mode:' do |
248 | 248 | it 'can be set to VERIFY_NONE by an envvar' do |
249 | 249 | exp = OpenTelemetry::TestHelpers.with_env('OTEL_RUBY_EXPORTER_OTLP_SSL_VERIFY_NONE' => 'true') do |
250 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 250 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
251 | 251 | end |
252 | 252 | http = exp.instance_variable_get(:@http) |
253 | 253 | _(http.verify_mode).must_equal OpenSSL::SSL::VERIFY_NONE |
254 | 254 | end |
255 | 255 |
|
256 | 256 | it 'can be set to VERIFY_PEER by an envvar' do |
257 | 257 | exp = OpenTelemetry::TestHelpers.with_env('OTEL_RUBY_EXPORTER_OTLP_SSL_VERIFY_PEER' => 'true') do |
258 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 258 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
259 | 259 | end |
260 | 260 | http = exp.instance_variable_get(:@http) |
261 | 261 | _(http.verify_mode).must_equal OpenSSL::SSL::VERIFY_PEER |
|
264 | 264 | it 'VERIFY_PEER will override VERIFY_NONE' do |
265 | 265 | exp = OpenTelemetry::TestHelpers.with_env('OTEL_RUBY_EXPORTER_OTLP_SSL_VERIFY_NONE' => 'true', |
266 | 266 | 'OTEL_RUBY_EXPORTER_OTLP_SSL_VERIFY_PEER' => 'true') do |
267 | | - OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new |
| 267 | + OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new |
268 | 268 | end |
269 | 269 | http = exp.instance_variable_get(:@http) |
270 | 270 | _(http.verify_mode).must_equal OpenSSL::SSL::VERIFY_PEER |
271 | 271 | end |
272 | 272 | end |
273 | 273 |
|
274 | 274 | describe '#export' do |
275 | | - let(:exporter) { OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new } |
| 275 | + let(:exporter) { OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new } |
276 | 276 |
|
277 | 277 | before do |
278 | 278 | OpenTelemetry.tracer_provider = OpenTelemetry::SDK::Trace::TracerProvider.new(resource: OpenTelemetry::SDK::Resources::Resource.telemetry_sdk) |
|
282 | 282 | skip unless ENV['TRACING_INTEGRATION_TEST'] |
283 | 283 | WebMock.disable_net_connect!(allow: 'localhost') |
284 | 284 | span_data = OpenTelemetry::TestHelpers.create_span_data |
285 | | - exporter = OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new(endpoint: 'http://localhost:4318', compression: 'gzip') |
| 285 | + exporter = OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new(endpoint: 'http://localhost:4318/v1/traces', compression: 'gzip') |
286 | 286 | result = exporter.export([span_data]) |
287 | 287 | _(result).must_equal(SUCCESS) |
288 | 288 | end |
|
363 | 363 | end |
364 | 364 |
|
365 | 365 | it 'returns FAILURE when encryption to receiver endpoint fails' do |
366 | | - exporter = OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new(endpoint: 'https://localhost:4318/v1/traces') |
| 366 | + exporter = OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new(endpoint: 'https://localhost:4318/v1/traces') |
367 | 367 | stub_request(:post, 'https://localhost:4318/v1/traces').to_raise(OpenSSL::SSL::SSLError.new('enigma wedged')) |
368 | 368 | span_data = OpenTelemetry::TestHelpers.create_span_data |
369 | 369 | exporter.stub(:backoff?, ->(**_) { false }) do |
|
436 | 436 | end |
437 | 437 |
|
438 | 438 | it 'compresses with gzip if enabled' do |
439 | | - exporter = OpenTelemetry::Exporter::OTLP::HTTP::Exporter.new(compression: 'gzip') |
| 439 | + exporter = OpenTelemetry::Exporter::OTLP::HTTP::TraceExporter.new(compression: 'gzip') |
440 | 440 | stub_post = stub_request(:post, 'http://localhost:4318/v1/traces').to_return do |request| |
441 | 441 | Opentelemetry::Proto::Collector::Trace::V1::ExportTraceServiceRequest.decode(Zlib.gunzip(request.body)) |
442 | 442 | { status: 200 } |
|
0 commit comments