Skip to content

Build googletest at buildtime, relying on CMake #3267

Closed
@santiagorr

Description

@santiagorr

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

Metadata

Metadata

Assignees

Labels

triage/acceptedIndicates an issue or PR is ready to be actively worked on.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions