Skip to content

Commit 174b98a

Browse files
authored
Merge pull request #214 from mathworks/CodeCoverage_Submission
Fill code coverage gaps
2 parents 4bbba44 + a06bb44 commit 174b98a

File tree

11 files changed

+892
-0
lines changed

11 files changed

+892
-0
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,3 +546,4 @@ install(FILES ${OPENTELEMETRY_PROXY_RUNTIME_LIBRARIES} DESTINATION ${LIBMEXCLASS
546546
if(WITH_EXAMPLES)
547547
add_subdirectory(examples)
548548
endif()
549+
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
function result = callbackWithAttributes3()
2+
% Test callback function for asynchronous instruments that uses attributes
3+
% in a dictionary
4+
%
5+
% Copyright 2025 The MathWorks, Inc.
6+
7+
value = 30;
8+
result = opentelemetry.metrics.ObservableResult;
9+
result = result.observe(value, dictionary("Level1", "D","Level2","E"));

test/tformat.m

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
classdef tformat < matlab.unittest.TestCase
2+
% Tests for setting format in the exporter
3+
4+
% Copyright 2025 The MathWorks, Inc.
5+
6+
properties
7+
OtelConfigFile
8+
JsonFile
9+
PidFile
10+
OtelcolName
11+
Otelcol
12+
ListPid
13+
ReadPidList
14+
ExtractPid
15+
Sigint
16+
Sigterm
17+
end
18+
19+
methods (TestClassSetup)
20+
function setupOnce(testCase)
21+
% add the utils folder to the path
22+
utilsfolder = fullfile(fileparts(mfilename('fullpath')), "utils");
23+
testCase.applyFixture(matlab.unittest.fixtures.PathFixture(utilsfolder));
24+
commonSetupOnce(testCase);
25+
end
26+
end
27+
28+
methods (TestMethodSetup)
29+
function setup(testCase)
30+
commonSetup(testCase);
31+
end
32+
end
33+
34+
methods (TestMethodTeardown)
35+
function teardown(testCase)
36+
commonTeardown(testCase);
37+
end
38+
end
39+
40+
methods (Test)
41+
function testNondefaultFormat(testCase)
42+
% testNondefaultFormat: using an alternative format
43+
44+
testCase.assumeTrue(logical(exist("opentelemetry.exporters.otlp.OtlpHttpSpanExporter", "class")), ...
45+
"Otlp HTTP exporter must be installed.");
46+
47+
tracername = "foo";
48+
spanname = "bar";
49+
50+
exp = opentelemetry.exporters.otlp.OtlpHttpSpanExporter(...
51+
"Format", "binary");
52+
processor = opentelemetry.sdk.trace.SimpleSpanProcessor(exp);
53+
tp = opentelemetry.sdk.trace.TracerProvider(processor);
54+
tr = getTracer(tp, tracername);
55+
sp = startSpan(tr, spanname);
56+
pause(1);
57+
endSpan(sp);
58+
59+
% perform test comparisons
60+
results = readJsonResults(testCase);
61+
results = results{1};
62+
63+
% check span and tracer names
64+
verifyEqual(testCase, string(results.resourceSpans.scopeSpans.spans.name), spanname);
65+
verifyEqual(testCase, string(results.resourceSpans.scopeSpans.scope.name), tracername);
66+
end
67+
68+
function testNondefaultGrpcFormat(testCase)
69+
% testNondefaultGrpcFormat: using an alternative format
70+
71+
testCase.assumeTrue(logical(exist("opentelemetry.exporters.otlp.OtlpGrpcSpanExporter", "class")), ...
72+
"Otlp gRPC exporter must be installed.");
73+
74+
tracername = "foo";
75+
spanname = "bar";
76+
77+
exp = opentelemetry.exporters.otlp.OtlpGrpcSpanExporter(...
78+
"Format", "binary");
79+
processor = opentelemetry.sdk.trace.SimpleSpanProcessor(exp);
80+
tp = opentelemetry.sdk.trace.TracerProvider(processor);
81+
tr = getTracer(tp, tracername);
82+
sp = startSpan(tr, spanname);
83+
pause(1);
84+
endSpan(sp);
85+
86+
% perform test comparisons
87+
results = readJsonResults(testCase);
88+
results = results{1};
89+
90+
% check span and tracer names
91+
verifyEqual(testCase, string(results.resourceSpans.scopeSpans.spans.name), spanname);
92+
verifyEqual(testCase, string(results.resourceSpans.scopeSpans.scope.name), tracername);
93+
end
94+
95+
function NondefaultMetricsFormat(testCase)
96+
% testNondefaultMetricsFormat: using an alternative format
97+
testCase.assumeTrue(logical(exist("opentelemetry.exporters.otlp.OtlpHttpMetricExporter", "class")), ...
98+
"Otlp HTTP exporter must be installed.");
99+
100+
exp = opentelemetry.exporters.otlp.OtlpHttpMetricExporter(...
101+
"Format", "binary");
102+
reader = opentelemetry.sdk.metrics.PeriodicExportingMetricReader(...
103+
exp, "Interval", seconds(2), "Timeout", seconds(1));
104+
p = opentelemetry.sdk.metrics.MeterProvider(reader);
105+
mt = p.getMeter("foo");
106+
ct = mt.createCounter("bar");
107+
108+
val = 4;
109+
ct.add(val);
110+
pause(2.5);
111+
112+
% fetch result
113+
clear p;
114+
results = readJsonResults(testCase);
115+
116+
% verify counter value
117+
verifyEqual(testCase, results{end}.resourceMetrics.scopeMetrics.metrics.sum.dataPoints.asDouble, val);
118+
end
119+
120+
function NondefaultGrpcMetricsFormat(testCase)
121+
% testNondefaultGrpcMetricsFormat: using an alternative format
122+
testCase.assumeTrue(logical(exist("opentelemetry.exporters.otlp.OtlpGrpcMetricExporter", "class")), ...
123+
"Otlp gRPC exporter must be installed.");
124+
125+
exp = opentelemetry.exporters.otlp.OtlpGrpcMetricExporter(...
126+
"Format", "binary");
127+
reader = opentelemetry.sdk.metrics.PeriodicExportingMetricReader(...
128+
exp, "Interval", seconds(2), "Timeout", seconds(1));
129+
p = opentelemetry.sdk.metrics.MeterProvider(reader);
130+
mt = p.getMeter("foo");
131+
ct = mt.createCounter("bar");
132+
133+
val = 8;
134+
ct.add(val);
135+
pause(2.5);
136+
137+
% fetch result
138+
clear p;
139+
results = readJsonResults(testCase);
140+
141+
% verify counter value
142+
verifyEqual(testCase, results{end}.resourceMetrics.scopeMetrics.metrics.sum.dataPoints.asDouble, val);
143+
end
144+
145+
end
146+
end

test/thttpheaders.m

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
classdef thttpheaders < matlab.unittest.TestCase
2+
% tests for setting HTTPHeaders in the exporter
3+
4+
% Copyright 2025 The MathWorks, Inc.
5+
6+
properties
7+
OtelConfigFile
8+
JsonFile
9+
PidFile
10+
OtelcolName
11+
Otelcol
12+
ListPid
13+
ReadPidList
14+
ExtractPid
15+
Sigint
16+
Sigterm
17+
end
18+
19+
methods (TestClassSetup)
20+
function setupOnce(testCase)
21+
% add the utils folder to the path
22+
utilsfolder = fullfile(fileparts(mfilename('fullpath')), "utils");
23+
testCase.applyFixture(matlab.unittest.fixtures.PathFixture(utilsfolder));
24+
commonSetupOnce(testCase);
25+
end
26+
end
27+
28+
methods (TestMethodSetup)
29+
function setup(testCase)
30+
commonSetup(testCase);
31+
end
32+
end
33+
34+
methods (TestMethodTeardown)
35+
function teardown(testCase)
36+
commonTeardown(testCase);
37+
end
38+
end
39+
40+
methods (Test)
41+
function testNondefaultHTTPHeaders(testCase)
42+
% testNondefaultHTTPHeaders: using an alternative HTTPHeaders
43+
44+
testCase.assumeTrue(logical(exist("opentelemetry.exporters.otlp.OtlpHttpSpanExporter", "class")), ...
45+
"Otlp HTTP exporter must be installed.");
46+
47+
tracername = "foo";
48+
spanname = "bar";
49+
50+
exp = opentelemetry.exporters.otlp.OtlpHttpSpanExporter(...
51+
"HTTPHeaders", dictionary("new","header"));
52+
processor = opentelemetry.sdk.trace.SimpleSpanProcessor(exp);
53+
tp = opentelemetry.sdk.trace.TracerProvider(processor);
54+
tr = getTracer(tp, tracername);
55+
sp = startSpan(tr, spanname);
56+
pause(1);
57+
endSpan(sp);
58+
59+
% perform test comparisons
60+
results = readJsonResults(testCase);
61+
results = results{1};
62+
63+
% check span and tracer names
64+
verifyEqual(testCase, string(results.resourceSpans.scopeSpans.spans.name), spanname);
65+
verifyEqual(testCase, string(results.resourceSpans.scopeSpans.scope.name), tracername);
66+
end
67+
68+
function testNondefaultGrpcHTTPHeaders(testCase)
69+
% testNondefaultGrpcHTTPHeaders: using an alternative HTTPHeaders
70+
71+
testCase.assumeTrue(logical(exist("opentelemetry.exporters.otlp.OtlpGrpcSpanExporter", "class")), ...
72+
"Otlp gRPC exporter must be installed.");
73+
74+
tracername = "foo";
75+
spanname = "bar";
76+
77+
exp = opentelemetry.exporters.otlp.OtlpGrpcSpanExporter(...
78+
"HTTPHeaders", dictionary("new","header"));
79+
processor = opentelemetry.sdk.trace.SimpleSpanProcessor(exp);
80+
tp = opentelemetry.sdk.trace.TracerProvider(processor);
81+
tr = getTracer(tp, tracername);
82+
sp = startSpan(tr, spanname);
83+
pause(1);
84+
endSpan(sp);
85+
86+
% perform test comparisons
87+
results = readJsonResults(testCase);
88+
results = results{1};
89+
90+
% check span and tracer names
91+
verifyEqual(testCase, string(results.resourceSpans.scopeSpans.spans.name), spanname);
92+
verifyEqual(testCase, string(results.resourceSpans.scopeSpans.scope.name), tracername);
93+
end
94+
95+
function NondefaultMetricsHTTPHeaders(testCase)
96+
% testNondefaultMetricsHTTPHeaders: using an alternative HTTPHeaders
97+
testCase.assumeTrue(logical(exist("opentelemetry.exporters.otlp.OtlpHttpMetricExporter", "class")), ...
98+
"Otlp HTTP exporter must be installed.");
99+
100+
exp = opentelemetry.exporters.otlp.OtlpHttpMetricExporter(...
101+
"HTTPHeaders", dictionary("new","header"));
102+
reader = opentelemetry.sdk.metrics.PeriodicExportingMetricReader(...
103+
exp, "Interval", seconds(2), "Timeout", seconds(1));
104+
p = opentelemetry.sdk.metrics.MeterProvider(reader);
105+
mt = p.getMeter("foo");
106+
ct = mt.createCounter("bar");
107+
108+
val = 4;
109+
ct.add(val);
110+
pause(2.5);
111+
112+
% fetch result
113+
clear p;
114+
results = readJsonResults(testCase);
115+
116+
% verify counter value
117+
verifyEqual(testCase, results{end}.resourceMetrics.scopeMetrics.metrics.sum.dataPoints.asDouble, val);
118+
end
119+
120+
function NondefaultGrpcMetricsHTTPHeaders(testCase)
121+
% testNondefaultGrpcMetricsHTTPHeaders: using an alternative HTTPHeaders
122+
testCase.assumeTrue(logical(exist("opentelemetry.exporters.otlp.OtlpGrpcMetricExporter", "class")), ...
123+
"Otlp gRPC exporter must be installed.");
124+
125+
exp = opentelemetry.exporters.otlp.OtlpGrpcMetricExporter(...
126+
"HTTPHeaders", dictionary("new","header"));
127+
reader = opentelemetry.sdk.metrics.PeriodicExportingMetricReader(...
128+
exp, "Interval", seconds(2), "Timeout", seconds(1));
129+
p = opentelemetry.sdk.metrics.MeterProvider(reader);
130+
mt = p.getMeter("foo");
131+
ct = mt.createCounter("bar");
132+
133+
val = 8;
134+
ct.add(val);
135+
pause(2.5);
136+
137+
% fetch result
138+
clear p;
139+
results = readJsonResults(testCase);
140+
141+
% verify counter value
142+
verifyEqual(testCase, results{end}.resourceMetrics.scopeMetrics.metrics.sum.dataPoints.asDouble, val);
143+
end
144+
145+
end
146+
end

0 commit comments

Comments
 (0)