Skip to content

Commit ee2228d

Browse files
authored
Integration Testing Rum (#33)
## Summary **Jira:** [INPLAT-961](https://datadoghq.atlassian.net/browse/INPLAT-961) - Replace `inject-browser-sdk` git submodule with CMake `FetchContent`, consuming the upstream `CMakeLists.txt` from [PR #21](DataDog/inject-browser-sdk#21) which handles Corrosion, crate import, and cbindgen internally - Remove `cmake/deps/corrosion.cmake`, `deps/cbindgen.toml`, and the RUM build block from `deps/CMakeLists.txt` - Add integration test infrastructure with auto-build for RUM/no-RUM module variants - Add RUM integration tests for selective SDK injection per `<Location>` directive ## Test plan - [x] CI build passes (RUM disabled by default) - [ ] CI smoke and integration tests pass - [x] Manual: `cmake -B build -DHTTPD_DATADOG_ENABLE_RUM=ON` fetches inject-browser-sdk and builds successfully [INPLAT-961]: https://datadoghq.atlassian.net/browse/INPLAT-961?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
1 parent 6e0faa4 commit ee2228d

28 files changed

Lines changed: 873 additions & 80 deletions

.github/workflows/dev.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,11 @@ jobs:
6969
llvm-profdata merge -sparse /tmp/*.profraw -o /tmp/default.profdata
7070
llvm-cov export dist/lib/mod_datadog.so -format=lcov -instr-profile=/tmp/default.profdata -ignore-filename-regex=/httpd/ > coverage.lcov
7171
- name: Upload coverage reports to Codecov
72-
uses: codecov/codecov-action@v4.0.1
72+
uses: codecov/codecov-action@v5
7373
with:
7474
files: coverage.lcov
7575
name: github-actions
7676
token: ${{ secrets.CODECOV_TOKEN }}
7777
slug: DataDog/httpd-datadog
78-
os: alpine
7978
fail_ci_if_error: true
8079

.gitignore

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,16 @@ __pycache__/
4242
venv/
4343

4444
compile_commands.json
45+
build-rum/
46+
*.bak
47+
48+
# Integration tests
49+
test/integration-test/.venv/
50+
test/integration-test/uv.lock
51+
test/integration-test/.pytest_cache/
52+
test/integration-test/.coverage
53+
test/integration-test/htmlcov/
54+
test/integration-test/log-*/
55+
test/integration-test/logs/
56+
test/integration-test/*.conf.tmp
57+
test/integration-test/*.log

.gitlab-ci.yml

Lines changed: 63 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,34 @@ variables:
1010
stages:
1111
- ci-image
1212
- build
13+
- test
14+
15+
# Template jobs (hidden, reusable)
16+
.build-template:
17+
stage: build
18+
image: $CI_DOCKER_IMAGE_BASE/$ARCH:$DOCKERFILE_HASH
19+
script:
20+
- git config --global --add safe.directory $PWD
21+
- >
22+
cmake --preset=ci-release
23+
-DHTTPD_DATADOG_ENABLE_RUM=ON
24+
-DCMAKE_TOOLCHAIN_FILE=/sysroot/${TOOLCHAIN_ARCH}-none-linux-musl/Toolchain.cmake
25+
-B build .
26+
- cmake --build build -j --verbose
27+
- cmake --install build --prefix dist
28+
- mkdir -p artifacts/$ARCH
29+
- cp dist/lib/mod_datadog.so artifacts/$ARCH/
30+
- cp dist/lib/mod_datadog.so.debug artifacts/$ARCH/ || true
31+
artifacts:
32+
paths:
33+
- artifacts/$ARCH/mod_datadog.so
34+
- artifacts/$ARCH/mod_datadog.so.debug
35+
36+
.test-rum-template:
37+
stage: test
38+
image: $CI_DOCKER_IMAGE_BASE/$ARCH:$DOCKERFILE_HASH
39+
script:
40+
- cd $CI_PROJECT_DIR/test/integration-test && uv sync && uv run pytest scenarios --module-path $CI_PROJECT_DIR/artifacts/$ARCH/mod_datadog.so --bin-path /httpd/httpd-build/bin/apachectl --log-dir $CI_PROJECT_DIR/logs -m requires_rum -v
1341

1442
build-ci-image:
1543
stage: ci-image
@@ -43,30 +71,38 @@ build-ci-image:
4371
reports:
4472
dotenv: docker.env
4573

46-
build:
47-
stage: build
48-
needs: [build-ci-image]
49-
parallel:
50-
matrix:
51-
- ARCH: amd64
52-
TOOLCHAIN_ARCH: x86_64
53-
- ARCH: arm64
54-
TOOLCHAIN_ARCH: aarch64
55-
image: $CI_DOCKER_IMAGE_BASE/$ARCH:$DOCKERFILE_HASH
56-
tags: ["arch:$ARCH"]
57-
script:
58-
- git config --global --add safe.directory $PWD
59-
- >
60-
cmake --preset=ci-release
61-
-DHTTPD_DATADOG_ENABLE_RUM=ON
62-
-DCMAKE_TOOLCHAIN_FILE=/sysroot/${TOOLCHAIN_ARCH}-none-linux-musl/Toolchain.cmake
63-
-B build .
64-
- cmake --build build -j --verbose
65-
- cmake --install build --prefix dist
66-
- mkdir -p artifacts/$ARCH
67-
- cp dist/lib/mod_datadog.so artifacts/$ARCH/
68-
- cp dist/lib/mod_datadog.so.debug artifacts/$ARCH/ || true
69-
artifacts:
70-
paths:
71-
- artifacts/$ARCH/mod_datadog.so
72-
- artifacts/$ARCH/mod_datadog.so.debug
74+
build:amd64:
75+
extends: .build-template
76+
needs:
77+
- job: "build-ci-image: [amd64, x86_64]"
78+
variables:
79+
ARCH: amd64
80+
TOOLCHAIN_ARCH: x86_64
81+
tags: ["arch:amd64"]
82+
83+
build:arm64:
84+
extends: .build-template
85+
needs:
86+
- job: "build-ci-image: [arm64, aarch64]"
87+
variables:
88+
ARCH: arm64
89+
TOOLCHAIN_ARCH: aarch64
90+
tags: ["arch:arm64"]
91+
92+
test-rum:amd64:
93+
extends: .test-rum-template
94+
needs:
95+
- job: "build-ci-image: [amd64, x86_64]"
96+
- job: "build:amd64"
97+
variables:
98+
ARCH: amd64
99+
tags: ["arch:amd64"]
100+
101+
test-rum:arm64:
102+
extends: .test-rum-template
103+
needs:
104+
- job: "build-ci-image: [arm64, aarch64]"
105+
- job: "build:arm64"
106+
variables:
107+
ARCH: arm64
108+
tags: ["arch:arm64"]

.gitlab/Dockerfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
# - httpd 2.4 source code
66
# - Tools necessary to build httpd and mod_datadog
77
# - Rust toolchain for RUM (inject-browser-sdk requires Rust 1.73+)
8+
# - uv (fast Python package manager for tests)
89
#
910
# Toolchain files are sourced from deps/nginx-datadog/build_env/
1011
#
@@ -89,6 +90,9 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -yq --d
8990
RUN cargo install --locked cbindgen --version 0.26.0 \
9091
&& ln -s ~/.cargo/bin/cbindgen /usr/local/bin/cbindgen
9192

93+
# Install uv (fast Python package manager)
94+
COPY --from=ghcr.io/astral-sh/uv:0.9.28 /uv /usr/local/bin/uv
95+
9296
# Setup httpd 2.4 source
9397
COPY scripts/setup-httpd.py setup-httpd.py
9498
RUN python3 ./setup-httpd.py -o httpd 2.4.58 \

.gitmodules

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
[submodule "deps/dd-trace-cpp"]
22
path = deps/dd-trace-cpp
33
url = ../dd-trace-cpp.git
4-
[submodule "deps/inject-browser-sdk"]
5-
path = deps/inject-browser-sdk
6-
url = ../httpd-datadog.git
7-
branch = mirror-inject-browser-sdk
84
[submodule "deps/nginx-datadog"]
95
path = deps/nginx-datadog
106
url = ../httpd-datadog.git

CMakeLists.txt

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,18 @@ include(cmake/utils.cmake)
2626
include(cmake/deps/fmt.cmake)
2727

2828
if (HTTPD_DATADOG_ENABLE_RUM)
29-
include(cmake/deps/corrosion.cmake)
29+
include(FetchContent)
30+
31+
set(INJECT_BROWSER_SDK_GIT_REF "49245e1c6ed8275990bb910125187e0aaad09e3d" CACHE STRING
32+
"Git tag/branch for inject-browser-sdk")
33+
34+
FetchContent_Declare(
35+
InjectBrowserSDK
36+
GIT_REPOSITORY https://github.com/DataDog/inject-browser-sdk.git
37+
GIT_TAG ${INJECT_BROWSER_SDK_GIT_REF}
38+
)
39+
FetchContent_MakeAvailable(InjectBrowserSDK)
40+
3041
include(cmake/deps/rapidjson.cmake)
3142
endif ()
3243

@@ -50,3 +61,14 @@ endif (UNIX)
5061
add_subdirectory(deps)
5162
add_subdirectory(mod_datadog)
5263
add_subdirectory(test/unit-test)
64+
65+
# Integration tests
66+
enable_testing()
67+
add_test(
68+
NAME integration-tests
69+
COMMAND uv run pytest
70+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/test/integration-test
71+
)
72+
set_tests_properties(integration-tests PROPERTIES
73+
ENVIRONMENT "HTTPD_MODULE_PATH=${CMAKE_BINARY_DIR}/mod_datadog/mod_datadog.so"
74+
)

cmake/deps/corrosion.cmake

Lines changed: 0 additions & 10 deletions
This file was deleted.

deps/CMakeLists.txt

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1 @@
11
add_subdirectory(dd-trace-cpp)
2-
3-
if (HTTPD_DATADOG_ENABLE_RUM)
4-
corrosion_import_crate(
5-
MANIFEST_PATH inject-browser-sdk/Cargo.toml
6-
CRATES inject-browser-sdk-ffi
7-
CRATE_TYPES staticlib
8-
)
9-
10-
corrosion_experimental_cbindgen(
11-
TARGET inject_browser_sdk_ffi
12-
HEADER_NAME injectbrowsersdk.h
13-
FLAGS --config ${CMAKE_SOURCE_DIR}/deps/cbindgen.toml
14-
)
15-
endif ()

deps/cbindgen.toml

Lines changed: 0 additions & 4 deletions
This file was deleted.

deps/inject-browser-sdk

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)