3939using namespace opentelemetry ::sdk::trace;
4040using namespace opentelemetry ::sdk::resource;
4141
42+ OPENTELEMETRY_BEGIN_NAMESPACE
43+ namespace sdk
44+ {
45+ namespace trace
46+ {
47+ class MultiSpanProcessorTestPeer
48+ {
49+ public:
50+ static
51+ std::vector<SpanProcessor*> GetProcessors (MultiSpanProcessor * multi_span_processor)
52+ {
53+ std::vector<SpanProcessor*> res;
54+
55+ MultiSpanProcessor::ProcessorNode *node = multi_span_processor->head_ ;
56+ while (node != nullptr )
57+ {
58+ auto processor = node->value_ .get ();
59+ res.emplace_back (processor);
60+ node = node->next_ ;
61+ }
62+
63+ return res;
64+ }
65+ };
66+ }
67+ }
68+ OPENTELEMETRY_END_NAMESPACE
69+
4270TEST (TracerProvider, GetTracer)
4371{
4472 std::unique_ptr<SpanProcessor> processor (new SimpleSpanProcessor (nullptr ));
@@ -342,8 +370,13 @@ TEST(TracerProvider, GetProcessor)
342370// get a MultiSpanProcessor back that wraps both processors
343371TEST (TracerProvider, GetProcessorsTwo)
344372{
345- std::unique_ptr<SpanProcessor> processor1 (new SimpleSpanProcessor (nullptr ));
346- std::unique_ptr<SpanProcessor> processor2 (new SimpleSpanProcessor (nullptr ));
373+ std::vector<SpanProcessor*> processors_raw (2 );
374+ processors_raw[0 ] = new SimpleSpanProcessor (nullptr ); // deleted via unique_ptr
375+ processors_raw[1 ] = new SimpleSpanProcessor (nullptr ); // deleted via unique_ptr
376+
377+ std::unique_ptr<SpanProcessor> processor1 (processors_raw[0 ]);
378+ std::unique_ptr<SpanProcessor> processor2 (processors_raw[1 ]);
379+
347380 std::vector<std::unique_ptr<SpanProcessor>> processors;
348381 processors.push_back (std::move (processor1));
349382 processors.push_back (std::move (processor2));
@@ -359,14 +392,22 @@ TEST(TracerProvider, GetProcessorsTwo)
359392 auto processor_typeed = static_cast <MultiSpanProcessor *>(&span_processor);
360393#endif
361394 ASSERT_NE (nullptr , processor_typeed);
395+
396+ std::vector<SpanProcessor*> contained_processors = MultiSpanProcessorTestPeer::GetProcessors (processor_typeed);
397+ EXPECT_EQ (processors_raw, contained_processors);
362398}
363399
364400// get a MultiSpanProcessor back that wraps all three processors
365401TEST (TracerProvider, GetProcessorsThree)
366402{
367- std::unique_ptr<SpanProcessor> processor1 (new SimpleSpanProcessor (nullptr ));
368- std::unique_ptr<SpanProcessor> processor2 (new SimpleSpanProcessor (nullptr ));
369- std::unique_ptr<SpanProcessor> processor3 (new SimpleSpanProcessor (nullptr ));
403+ std::vector<SpanProcessor*> processors_raw (3 );
404+ processors_raw[0 ] = new SimpleSpanProcessor (nullptr ); // deleted via unique_ptr
405+ processors_raw[1 ] = new SimpleSpanProcessor (nullptr ); // deleted via unique_ptr
406+ processors_raw[2 ] = new SimpleSpanProcessor (nullptr ); // deleted via unique_ptr
407+
408+ std::unique_ptr<SpanProcessor> processor1 (processors_raw[0 ]);
409+ std::unique_ptr<SpanProcessor> processor2 (processors_raw[1 ]);
410+ std::unique_ptr<SpanProcessor> processor3 (processors_raw[2 ]);
370411 std::vector<std::unique_ptr<SpanProcessor>> processors;
371412 processors.push_back (std::move (processor1));
372413 processors.push_back (std::move (processor2));
@@ -383,6 +424,9 @@ TEST(TracerProvider, GetProcessorsThree)
383424 auto processor_typeed = static_cast <MultiSpanProcessor *>(&span_processor);
384425#endif
385426 ASSERT_NE (nullptr , processor_typeed);
427+
428+ std::vector<SpanProcessor*> contained_processors = MultiSpanProcessorTestPeer::GetProcessors (processor_typeed);
429+ EXPECT_EQ (processors_raw, contained_processors);
386430}
387431
388432TEST (TracerProvider, Shutdown)
0 commit comments