opentelemetry-cpp icon indicating copy to clipboard operation
opentelemetry-cpp copied to clipboard

Build googletest at buildtime, relying on CMake

Open santiagorr opened this issue 8 months ago • 7 comments

I believe it would be great to better integrate googletest into the opentelemetry-cpp's build process, so when distro/system-wide googletest source code is available, it can be built along with opentelemetry-cpp.

As googletest upstream recommends, gtest and gmock should be compiled with the same flags than the tested code (http://groups.google.com/group/googletestframework/browse_thread/thread/668eff1cebf5309d). Upstream doesn't recommend to rely on precompiled libraries.

I found a related issue while packaging opentelemetry-cpp to debian, getting tests that end up with FATAL, even if they should pass. E.g.:

test 515
        Start 515: exporter.otlp.OtlpHttpExporterTest.Shutdown

515: Test command: /home/santiago/cpp/opentelemetry-cpp-1.19.0/obj-x86_64-linux-gnu/exporters/otlp/otlp_http_exporter_test "--gtest_filter=OtlpHttpExporterTest.Shutdown"
515: Working Directory: /home/santiago/cpp/opentelemetry-cpp-1.19.0/obj-x86_64-linux-gnu/exporters/otlp
515: Test timeout computed to be: 1500
515: Running main() from ./googletest/src/gtest_main.cc
515: Note: Google Test filter = OtlpHttpExporterTest.Shutdown
515: [==========] Running 1 test from 1 test suite.
515: [----------] Global test environment set-up.
515: [----------] 1 test from OtlpHttpExporterTest
515: [ RUN      ] OtlpHttpExporterTest.Shutdown
515: [Error] File: ./exporters/otlp/src/otlp_http_exporter.cc:150 [OTLP TRACE HTTP Exporter] ERROR: Export 0 trace span(s) failed, exporter is shutdown
515: [       OK ] OtlpHttpExporterTest.Shutdown (0 ms)
515: [----------] 1 test from OtlpHttpExporterTest (0 ms total)
515: 
515: [----------] Global test environment tear-down
515: [==========] 1 test from 1 test suite ran. (0 ms total)
515: [  PASSED  ] 1 test.
515: 
515: [ FATAL ] ./googletest/include/gtest/internal/gtest-port.h:1811:: pthread_key_delete(key_)failed with error 22
515/609 Test #515: exporter.otlp.OtlpHttpExporterTest.Shutdown ..........................................................Subprocess aborted***Exception:   0.01 sec
Running main() from ./googletest/src/gtest_main.cc
Note: Google Test filter = OtlpHttpExporterTest.Shutdown
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from OtlpHttpExporterTest
[ RUN      ] OtlpHttpExporterTest.Shutdown
[Error] File: ./exporters/otlp/src/otlp_http_exporter.cc:150 [OTLP TRACE HTTP Exporter] ERROR: Export 0 trace span(s) failed, exporter is shutdown
[       OK ] OtlpHttpExporterTest.Shutdown (0 ms)
[----------] 1 test from OtlpHttpExporterTest (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (0 ms total)
[  PASSED  ] 1 test.

[ FATAL ] ./googletest/include/gtest/internal/gtest-port.h:1811:: pthread_key_delete(key_)failed with error 22

I understand that for opentelemetry-cpp's CI, googletest is setup with ./ci/setup_googletest.sh, but it is suboptimal from a distro packaging PoV.

I'd propose to rely on CMake's very features (ExternalProject / FindGTest) to build and find the googletest libraries. I belive

santiagorr avatar Feb 11 '25 14:02 santiagorr