-
Notifications
You must be signed in to change notification settings - Fork 3
Fill code coverage gaps #214
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 3 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| function result = callbackWithAttributes3() | ||
| % Test callback function for asynchronous instruments that uses attributes | ||
| % in a dictionary | ||
| % | ||
| % Copyright 2025 The MathWorks, Inc. | ||
|
|
||
| value = 30; | ||
| result = opentelemetry.metrics.ObservableResult; | ||
| result = result.observe(value, dictionary({"Level1"}, {"D"},{"Level2"},{"E"})); | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,147 @@ | ||
| classdef tformat < matlab.unittest.TestCase | ||
| % Tests for setting format in the exporter | ||
|
|
||
| % Copyright 2025 The MathWorks, Inc. | ||
|
|
||
| properties | ||
| OtelConfigFile | ||
| JsonFile | ||
| PidFile | ||
| OtelcolName | ||
| Otelcol | ||
| ListPid | ||
| ReadPidList | ||
| ExtractPid | ||
| Sigint | ||
| Sigterm | ||
| end | ||
|
|
||
| methods (TestClassSetup) | ||
| function setupOnce(testCase) | ||
| % add the utils folder to the path | ||
| utilsfolder = fullfile(fileparts(mfilename('fullpath')), "utils"); | ||
| testCase.applyFixture(matlab.unittest.fixtures.PathFixture(utilsfolder)); | ||
| commonSetupOnce(testCase); | ||
| end | ||
| end | ||
|
|
||
| methods (TestMethodSetup) | ||
| function setup(testCase) | ||
| config = fullfile(fileparts(mfilename("fullpath")), "config", "otelcol_config.yml"); | ||
|
||
| commonSetup(testCase, config); | ||
| end | ||
| end | ||
|
|
||
| methods (TestMethodTeardown) | ||
| function teardown(testCase) | ||
| commonTeardown(testCase); | ||
| end | ||
| end | ||
|
|
||
| methods (Test) | ||
| function testNondefaultFormat(testCase) | ||
| % testNondefaultFormat: using an alternative format | ||
|
|
||
| testCase.assumeTrue(logical(exist("opentelemetry.exporters.otlp.OtlpHttpSpanExporter", "class")), ... | ||
| "Otlp HTTP exporter must be installed."); | ||
|
|
||
| tracername = "foo"; | ||
| spanname = "bar"; | ||
|
|
||
| exp = opentelemetry.exporters.otlp.OtlpHttpSpanExporter(... | ||
| "Format", "binary"); | ||
| processor = opentelemetry.sdk.trace.SimpleSpanProcessor(exp); | ||
| tp = opentelemetry.sdk.trace.TracerProvider(processor); | ||
| tr = getTracer(tp, tracername); | ||
| sp = startSpan(tr, spanname); | ||
| pause(1); | ||
| endSpan(sp); | ||
|
|
||
| % perform test comparisons | ||
| results = readJsonResults(testCase); | ||
| results = results{1}; | ||
|
|
||
| % check span and tracer names | ||
| verifyEqual(testCase, string(results.resourceSpans.scopeSpans.spans.name), spanname); | ||
| verifyEqual(testCase, string(results.resourceSpans.scopeSpans.scope.name), tracername); | ||
| end | ||
|
|
||
| function testNondefaultGrpcFormat(testCase) | ||
| % testNondefaultGrpcFormat: using an alternative format | ||
|
|
||
| testCase.assumeTrue(logical(exist("opentelemetry.exporters.otlp.OtlpGrpcSpanExporter", "class")), ... | ||
| "Otlp gRPC exporter must be installed."); | ||
|
|
||
| tracername = "foo"; | ||
| spanname = "bar"; | ||
|
|
||
| exp = opentelemetry.exporters.otlp.OtlpGrpcSpanExporter(... | ||
| "Format", "binary"); | ||
| processor = opentelemetry.sdk.trace.SimpleSpanProcessor(exp); | ||
| tp = opentelemetry.sdk.trace.TracerProvider(processor); | ||
| tr = getTracer(tp, tracername); | ||
| sp = startSpan(tr, spanname); | ||
| pause(1); | ||
| endSpan(sp); | ||
|
|
||
| % perform test comparisons | ||
| results = readJsonResults(testCase); | ||
| results = results{1}; | ||
|
|
||
| % check span and tracer names | ||
| verifyEqual(testCase, string(results.resourceSpans.scopeSpans.spans.name), spanname); | ||
| verifyEqual(testCase, string(results.resourceSpans.scopeSpans.scope.name), tracername); | ||
| end | ||
|
|
||
| function NondefaultMetricsFormat(testCase) | ||
| % testNondefaultMetricsFormat: using an alternative format | ||
| testCase.assumeTrue(logical(exist("opentelemetry.exporters.otlp.OtlpHttpMetricExporter", "class")), ... | ||
| "Otlp HTTP exporter must be installed."); | ||
|
|
||
| exp = opentelemetry.exporters.otlp.OtlpHttpMetricExporter(... | ||
| "Format", "binary"); | ||
| reader = opentelemetry.sdk.metrics.PeriodicExportingMetricReader(... | ||
| exp, "Interval", seconds(2), "Timeout", seconds(1)); | ||
| p = opentelemetry.sdk.metrics.MeterProvider(reader); | ||
| mt = p.getMeter("foo"); | ||
| ct = mt.createCounter("bar"); | ||
|
|
||
| val = 4; | ||
| ct.add(val); | ||
| pause(2.5); | ||
|
|
||
| % fetch result | ||
| clear p; | ||
| results = readJsonResults(testCase); | ||
|
|
||
| % verify counter value | ||
| verifyEqual(testCase, results{end}.resourceMetrics.scopeMetrics.metrics.sum.dataPoints.asDouble, val); | ||
| end | ||
|
|
||
| function NondefaultGrpcMetricsFormat(testCase) | ||
| % testNondefaultGrpcMetricsFormat: using an alternative format | ||
| testCase.assumeTrue(logical(exist("opentelemetry.exporters.otlp.OtlpGrpcMetricExporter", "class")), ... | ||
| "Otlp gRPC exporter must be installed."); | ||
|
|
||
| exp = opentelemetry.exporters.otlp.OtlpGrpcMetricExporter(... | ||
| "Format", "binary"); | ||
| reader = opentelemetry.sdk.metrics.PeriodicExportingMetricReader(... | ||
| exp, "Interval", seconds(2), "Timeout", seconds(1)); | ||
| p = opentelemetry.sdk.metrics.MeterProvider(reader); | ||
| mt = p.getMeter("foo"); | ||
| ct = mt.createCounter("bar"); | ||
|
|
||
| val = 8; | ||
| ct.add(val); | ||
| pause(2.5); | ||
|
|
||
| % fetch result | ||
| clear p; | ||
| results = readJsonResults(testCase); | ||
|
|
||
| % verify counter value | ||
| verifyEqual(testCase, results{end}.resourceMetrics.scopeMetrics.metrics.sum.dataPoints.asDouble, val); | ||
| end | ||
|
|
||
| end | ||
| end | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,147 @@ | ||
| classdef thttpheaders < matlab.unittest.TestCase | ||
| % tests for setting HTTPHeaders in the exporter | ||
|
|
||
| % Copyright 2025 The MathWorks, Inc. | ||
|
|
||
| properties | ||
| OtelConfigFile | ||
| JsonFile | ||
| PidFile | ||
| OtelcolName | ||
| Otelcol | ||
| ListPid | ||
| ReadPidList | ||
| ExtractPid | ||
| Sigint | ||
| Sigterm | ||
| end | ||
|
|
||
| methods (TestClassSetup) | ||
| function setupOnce(testCase) | ||
| % add the utils folder to the path | ||
| utilsfolder = fullfile(fileparts(mfilename('fullpath')), "utils"); | ||
| testCase.applyFixture(matlab.unittest.fixtures.PathFixture(utilsfolder)); | ||
| commonSetupOnce(testCase); | ||
| end | ||
| end | ||
|
|
||
| methods (TestMethodSetup) | ||
| function setup(testCase) | ||
| config = fullfile(fileparts(mfilename("fullpath")), "config", "otelcol_config.yml"); | ||
|
||
| commonSetup(testCase, config); | ||
| end | ||
| end | ||
|
|
||
| methods (TestMethodTeardown) | ||
| function teardown(testCase) | ||
| commonTeardown(testCase); | ||
| end | ||
| end | ||
|
|
||
| methods (Test) | ||
| function testNondefaultHTTPHeaders(testCase) | ||
| % testNondefaultHTTPHeaders: using an alternative HTTPHeaders | ||
|
|
||
| testCase.assumeTrue(logical(exist("opentelemetry.exporters.otlp.OtlpHttpSpanExporter", "class")), ... | ||
| "Otlp HTTP exporter must be installed."); | ||
|
|
||
| tracername = "foo"; | ||
| spanname = "bar"; | ||
|
|
||
| exp = opentelemetry.exporters.otlp.OtlpHttpSpanExporter(... | ||
| "HTTPHeaders", dictionary("new","header")); | ||
| processor = opentelemetry.sdk.trace.SimpleSpanProcessor(exp); | ||
| tp = opentelemetry.sdk.trace.TracerProvider(processor); | ||
| tr = getTracer(tp, tracername); | ||
| sp = startSpan(tr, spanname); | ||
| pause(1); | ||
| endSpan(sp); | ||
|
|
||
| % perform test comparisons | ||
| results = readJsonResults(testCase); | ||
| results = results{1}; | ||
|
|
||
| % check span and tracer names | ||
| verifyEqual(testCase, string(results.resourceSpans.scopeSpans.spans.name), spanname); | ||
| verifyEqual(testCase, string(results.resourceSpans.scopeSpans.scope.name), tracername); | ||
| end | ||
|
|
||
| function testNondefaultGrpcHTTPHeaders(testCase) | ||
| % testNondefaultGrpcHTTPHeaders: using an alternative HTTPHeaders | ||
|
|
||
| testCase.assumeTrue(logical(exist("opentelemetry.exporters.otlp.OtlpGrpcSpanExporter", "class")), ... | ||
| "Otlp gRPC exporter must be installed."); | ||
|
|
||
| tracername = "foo"; | ||
| spanname = "bar"; | ||
|
|
||
| exp = opentelemetry.exporters.otlp.OtlpGrpcSpanExporter(... | ||
| "HTTPHeaders", dictionary("new","header")); | ||
| processor = opentelemetry.sdk.trace.SimpleSpanProcessor(exp); | ||
| tp = opentelemetry.sdk.trace.TracerProvider(processor); | ||
| tr = getTracer(tp, tracername); | ||
| sp = startSpan(tr, spanname); | ||
| pause(1); | ||
| endSpan(sp); | ||
|
|
||
| % perform test comparisons | ||
| results = readJsonResults(testCase); | ||
| results = results{1}; | ||
|
|
||
| % check span and tracer names | ||
| verifyEqual(testCase, string(results.resourceSpans.scopeSpans.spans.name), spanname); | ||
| verifyEqual(testCase, string(results.resourceSpans.scopeSpans.scope.name), tracername); | ||
| end | ||
|
|
||
| function NondefaultMetricsHTTPHeaders(testCase) | ||
| % testNondefaultMetricsHTTPHeaders: using an alternative HTTPHeaders | ||
| testCase.assumeTrue(logical(exist("opentelemetry.exporters.otlp.OtlpHttpMetricExporter", "class")), ... | ||
| "Otlp HTTP exporter must be installed."); | ||
|
|
||
| exp = opentelemetry.exporters.otlp.OtlpHttpMetricExporter(... | ||
| "HTTPHeaders", dictionary("new","header")); | ||
| reader = opentelemetry.sdk.metrics.PeriodicExportingMetricReader(... | ||
| exp, "Interval", seconds(2), "Timeout", seconds(1)); | ||
| p = opentelemetry.sdk.metrics.MeterProvider(reader); | ||
| mt = p.getMeter("foo"); | ||
| ct = mt.createCounter("bar"); | ||
|
|
||
| val = 4; | ||
| ct.add(val); | ||
| pause(2.5); | ||
|
|
||
| % fetch result | ||
| clear p; | ||
| results = readJsonResults(testCase); | ||
|
|
||
| % verify counter value | ||
| verifyEqual(testCase, results{end}.resourceMetrics.scopeMetrics.metrics.sum.dataPoints.asDouble, val); | ||
| end | ||
|
|
||
| function NondefaultGrpcMetricsHTTPHeaders(testCase) | ||
| % testNondefaultGrpcMetricsHTTPHeaders: using an alternative HTTPHeaders | ||
| testCase.assumeTrue(logical(exist("opentelemetry.exporters.otlp.OtlpGrpcMetricExporter", "class")), ... | ||
| "Otlp gRPC exporter must be installed."); | ||
|
|
||
| exp = opentelemetry.exporters.otlp.OtlpGrpcMetricExporter(... | ||
| "HTTPHeaders", dictionary("new","header")); | ||
| reader = opentelemetry.sdk.metrics.PeriodicExportingMetricReader(... | ||
| exp, "Interval", seconds(2), "Timeout", seconds(1)); | ||
| p = opentelemetry.sdk.metrics.MeterProvider(reader); | ||
| mt = p.getMeter("foo"); | ||
| ct = mt.createCounter("bar"); | ||
|
|
||
| val = 8; | ||
| ct.add(val); | ||
| pause(2.5); | ||
|
|
||
| % fetch result | ||
| clear p; | ||
| results = readJsonResults(testCase); | ||
|
|
||
| % verify counter value | ||
| verifyEqual(testCase, results{end}.resourceMetrics.scopeMetrics.metrics.sum.dataPoints.asDouble, val); | ||
| end | ||
|
|
||
| end | ||
| end | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you really need cell arrays of strings in the dictionary? Can you avoid using cell arrays:
dictionary("Level1", "D", "Level2", "E")