From fdac48b1b61bfd02a8a708cc036cbd52f8d549fd Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Wed, 29 Jan 2025 15:51:01 +0100 Subject: [PATCH 01/38] Add checks, spotless, and test_published_artifact --- .gitlab-ci.yml | 88 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 82 insertions(+), 6 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7a1378f12ca..f478b11b2cb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -29,9 +29,10 @@ default: .gradle_build: &gradle_build image: ghcr.io/datadog/dd-trace-java-docker-build:v24.10-base + stage: build variables: - GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx2560M -Xms2560M'" - GRADLE_ARGS: " -PskipTests --build-cache --stacktrace --no-daemon --parallel --max-workers=2" + GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx2560M -Xms2560M' -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'" + GRADLE_ARGS: " --build-cache --stacktrace --no-daemon --parallel --max-workers=2" KUBERNETES_CPU_REQUEST: 8 KUBERNETES_MEMORY_REQUEST: 6Gi cache: @@ -42,7 +43,7 @@ default: - .gradle/caches - .gradle/notifications policy: $DEPENDENCY_CACHE_POLICY - - key: $CI_PIPELINE_ID # Incremental build cache. Shared by all jobs in the pipeline + - key: $CI_PIPELINE_ID-$BUILD_CACHE_TYPE # Incremental build cache. Shared by all jobs in the pipeline of the same type paths: - .gradle/caches/$GRADLE_VERSION - .gradle/$GRADLE_VERSION/executionHistory @@ -61,12 +62,13 @@ default: build: extends: .gradle_build - stage: build variables: BUILD_CACHE_POLICY: push + BUILD_CACHE_TYPE: lib DEPENDENCY_CACHE_POLICY: pull script: - - ./gradlew clean :dd-java-agent:shadowJar :dd-trace-api:jar :dd-trace-ot:shadowJar $GRADLE_ARGS + - ./gradlew resolveAndLockAll --write-locks + - ./gradlew clean :dd-java-agent:shadowJar :dd-trace-api:jar :dd-trace-ot:shadowJar -PskipTests $GRADLE_ARGS - echo UPSTREAM_TRACER_VERSION=$(java -jar workspace/dd-java-agent/build/libs/*.jar) >> upstream.env - echo "BUILD_JOB_NAME=$CI_JOB_NAME" >> build.env - echo "BUILD_JOB_ID=$CI_JOB_ID" >> build.env @@ -79,6 +81,16 @@ build: reports: dotenv: build.env +build_tests: + extends: .gradle_build + variables: + BUILD_CACHE_POLICY: push + BUILD_CACHE_TYPE: test + DEPENDENCY_CACHE_POLICY: pull + script: + - ./gradlew resolveAndLockAll --write-locks + - ./gradlew clean :baseTest :instrumentationTest :instrumentationLatestDepTest :instrumentationTest :profilingTest -PskipTests $GRADLE_ARGS + build_and_populate_dep_cache: extends: build variables: @@ -90,6 +102,68 @@ build_and_populate_dep_cache: - when: manual allow_failure: true +spotless: + extends: .gradle_build + script: + - JAVA_HOME=$JAVA_11_HOME ./gradlew spotlessCheck $GRADLE_ARGS + +.check_job: + extends: .gradle_build + needs: [ "build_tests" ] + variables: + BUILD_CACHE_TYPE: test + script: + - ./gradlew $GRADLE_TARGET -PskipTests -PrunBuildSrcTests -PskipSpotless $GRADLE_ARGS + after_script: + - .circleci/collect_reports.sh --destination ./check_reports --move + artifacts: + paths: + - ./check_reports + +check_base: + extends: .check_job + variables: + GRADLE_TARGET: ":baseCheck" + +check_inst: + extends: .check_job + variables: + GRADLE_TARGET: ":instrumentationCheck" + +check_smoke: + extends: .check_job + variables: + GRADLE_TARGET: ":smokeCheck" + +check_profiling: + extends: .check_job + variables: + GRADLE_TARGET: ":profilingCheck" + +check_debugger: + extends: .check_job + variables: + GRADLE_TARGET: ":debuggerCheck" + +test_published_artifacts: + extends: .gradle_build + needs: [ build ] + variables: + BUILD_CACHE_TYPE: build + script: + - mvn_local_repo=$(./mvnw help:evaluate -Dexpression=settings.localRepository -q -DforceStdout) + - rm -rf "${mvn_local_repo}/com/datadoghq" + - export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx2G -Xms2G -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'" + - ./gradlew publishToMavenLocal $GRADLE_ARGS + - cd test-published-dependencies + - export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx512M -Xms512M -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'" + - ./gradlew check --info --max-workers=3 + after_script: + - .circleci/collect_reports.sh + artifacts: + paths: + - ./check_reports + deploy_to_profiling_backend: stage: publish needs: [ build ] @@ -165,6 +239,8 @@ deploy_to_sonatype: extends: .gradle_build stage: publish needs: [ build ] + variables: + BUILD_CACHE_TYPE: lib rules: - if: '$POPULATE_CACHE' when: never @@ -180,7 +256,7 @@ deploy_to_sonatype: - export SONATYPE_PASSWORD=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.sonatype_password --with-decryption --query "Parameter.Value" --out text) - export GPG_PRIVATE_KEY=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.signing.gpg_private_key --with-decryption --query "Parameter.Value" --out text) - export GPG_PASSWORD=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.signing.gpg_passphrase --with-decryption --query "Parameter.Value" --out text) - - ./gradlew -PbuildInfo.build.number=$CI_JOB_ID publishToSonatype closeSonatypeStagingRepository $GRADLE_ARGS + - ./gradlew -PbuildInfo.build.number=$CI_JOB_ID publishToSonatype closeSonatypeStagingRepository -PskipTests $GRADLE_ARGS artifacts: paths: - 'workspace/dd-java-agent/build/libs/*.jar' From 317d9faeb32583cd60ed9564e21b5a81d061e79b Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Wed, 29 Jan 2025 16:37:35 +0100 Subject: [PATCH 02/38] small fixes --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f478b11b2cb..dab4fbc335a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -31,7 +31,7 @@ default: image: ghcr.io/datadog/dd-trace-java-docker-build:v24.10-base stage: build variables: - GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx2560M -Xms2560M' -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'" + GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx2560M -Xms2560M' -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp" GRADLE_ARGS: " --build-cache --stacktrace --no-daemon --parallel --max-workers=2" KUBERNETES_CPU_REQUEST: 8 KUBERNETES_MEMORY_REQUEST: 6Gi @@ -149,7 +149,7 @@ test_published_artifacts: extends: .gradle_build needs: [ build ] variables: - BUILD_CACHE_TYPE: build + BUILD_CACHE_TYPE: lib script: - mvn_local_repo=$(./mvnw help:evaluate -Dexpression=settings.localRepository -q -DforceStdout) - rm -rf "${mvn_local_repo}/com/datadoghq" From c8524dd88de6a2bc9c57a0bedf62462655aa8098 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Wed, 5 Feb 2025 11:27:26 -0500 Subject: [PATCH 03/38] WIP --- .gitlab-ci.yml | 301 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 298 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index dab4fbc335a..75bd62ee41b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -17,12 +17,40 @@ stages: - ci-visibility-tests - generate-signing-key +#TODO display memory usage +#TODO test containers +#TODO paralization (muzzle) +#TODO publish tests to datadog +#TODO agent_integration_tests +#TODO no output timeout + variables: REGISTRY: 486234852809.dkr.ecr.us-east-1.amazonaws.com BUILD_JOB_NAME: "build" DEPENDENCY_CACHE_POLICY: pull BUILD_CACHE_POLICY: pull GRADLE_VERSION: "8.4" # must match gradle-wrapper.properties + PROFILE_TESTS: + description: "Enable profiling of tests" + value: "false" + SYSTEM_TESTS_COMMIT: + description: "Commit hash of system tests to use" + value: "c706e333ef06800b866ac300e4b6cdb7566cc5e5" + +.test_matrix: &test_matrix + testJvm: + - "8" + - "semeru11" + - "oracle8" + - "21" + - "ubuntu17" + - "zulu8" + - "semeru8" + - "ibm8" + - "zulu11" + - "11" + - "17" + - "semeru17" default: tags: [ "arch:amd64" ] @@ -31,7 +59,8 @@ default: image: ghcr.io/datadog/dd-trace-java-docker-build:v24.10-base stage: build variables: - GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx2560M -Xms2560M' -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp" + GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx2560M -Xms2560M -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'" + MAVEN_OPTS: "-Xms64M -Xmx512M" GRADLE_ARGS: " --build-cache --stacktrace --no-daemon --parallel --max-workers=2" KUBERNETES_CPU_REQUEST: 8 KUBERNETES_MEMORY_REQUEST: 6Gi @@ -105,11 +134,16 @@ build_and_populate_dep_cache: spotless: extends: .gradle_build script: - - JAVA_HOME=$JAVA_11_HOME ./gradlew spotlessCheck $GRADLE_ARGS + - export JAVA_HOME=$JAVA_11_HOME + - ./gradlew spotlessCheck $GRADLE_ARGS .check_job: extends: .gradle_build needs: [ "build_tests" ] + rules: + - if: '$POPULATE_CACHE' + when: never + - when: always variables: BUILD_CACHE_TYPE: test script: @@ -148,6 +182,10 @@ check_debugger: test_published_artifacts: extends: .gradle_build needs: [ build ] + rules: + - if: '$POPULATE_CACHE' + when: never + - when: always variables: BUILD_CACHE_TYPE: lib script: @@ -157,13 +195,270 @@ test_published_artifacts: - ./gradlew publishToMavenLocal $GRADLE_ARGS - cd test-published-dependencies - export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx512M -Xms512M -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'" - - ./gradlew check --info --max-workers=3 + - ./gradlew check --info $GRADLE_ARGS after_script: - .circleci/collect_reports.sh artifacts: paths: - ./check_reports +muzzle: + extends: .gradle_build + needs: [ build_tests ] + rules: + - if: '$POPULATE_CACHE' + when: never + - when: always + variables: + BUILD_CACHE_TYPE: test + script: + - export SKIP_BUILDSCAN="true" + - ./gradlew muzzle $GRADLE_ARGS + after_script: + - .circleci/collect_reports.sh + artifacts: + paths: + - ./reports + +muzzle-dep-report: + extends: .gradle_build + needs: [ build_tests ] + variables: + BUILD_CACHE_TYPE: test + script: + - export SKIP_BUILDSCAN="true" + - ./gradlew generateMuzzleReport muzzleInstrumentationReport $GRADLE_ARGS + after_script: + - .circleci/collect_muzzle_deps.sh + artifacts: + paths: + - ./reports + +.test_job: + extends: .gradle_build + needs: [ build_tests ] + rules: + - if: '$POPULATE_CACHE' + when: never + - when: always + variables: + BUILD_CACHE_TYPE: test + GRADLE_PARAMS: "" + CONTINUE_ON_FAILURE: "false" + script: + - > + if [ "$PROFILE_TESTS" == "true" ] && [ "$testJvm" != "ibm8" ] && [ "$testJvm" != "oracle8" ]; + then + export PROFILER_COMMAND="-XX:StartFlightRecording=settings=profile,filename=/tmp/${CI_JOB_NAME_SLUG}.jfr,dumponexit=true"; + fi + - export GRADLE_OPTS="GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xms2G -Xmx2G $PROFILER_COMMAND -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp' -Ddatadog.forkedMaxHeapSize=768M -Ddatadog.forkedMinHeapSize=128M" + - ./gradlew $GRADLE_TARGET $GRADLE_PARAMS -PtestJvm=$testJvm $GRADLE_ARGS --continue || $CONTINUE_ON_FAILURE + after_script: + - .circleci/collect_reports.sh + - if [ "$PROFILE_TESTS" == "true" ]; then .circleci/collect_profiles.sh; fi + - .circleci/collect_results.sh +# TODO upload test results +# TODO Get APM Test Agent Trace Check Results + artifacts: + paths: + - ./reports.tar + - ./profiles.tar + - ./results + +test_base: + extends: .test_job + variables: + GRADLE_TARGET: ":baseTest" + GRADLE_PARAMS: "-PskipFlakyTests" + parallel: + matrix: *test_matrix + script: + - if [ "$testJvm" == "8" ]; then export GRADLE_PARAMS="-PskipFlakyTests -PcheckCoverage"; fi + - !reference [.test_job, script] + +test_inst: + extends: .test_job + variables: + GRADLE_TARGET: ":instrumentationTest" + GRADLE_PARAMS: "-PskipFlakyTests" + parallel: + matrix: *test_matrix + +test_inst_latest: + extends: .test_job + variables: + GRADLE_TARGET: ":instrumentationLatestDepTest" + GRADLE_PARAMS: "-PskipFlakyTests" + parallel: + matrix: + testJvm: ["8", "17", "21" ] + +test_flaky: + extends: .test_job + variables: + GRADLE_PARAMS: "-PrunFlakyTests" + testJvm: "8" + CONTINUE_ON_FAILURE: "true" + parallel: + matrix: + - GRADLE_TARGET: [":baseTest", ":instrumentationTest", ":smokeTest", ":debuggerTest"] + +test_profiling: + extends: .test_job + variables: + GRADLE_TARGET: ":profilingTest" + GRADLE_PARAMS: "-PskipFlakyTests" + parallel: + matrix: *test_matrix + +test_debugger: + extends: .test_job + variables: + GRADLE_TARGET: ":debuggerTest" + GRADLE_PARAMS: "-PskipFlakyTests" + parallel: + matrix: *test_matrix + +test_smoke: + extends: .test_job + variables: + GRADLE_TARGET: "stageMainDist :smokeTest" + GRADLE_PARAMS: "-PskipFlakyTests" + parallel: + matrix: *test_matrix + +test_ssi_smoke: + extends: .test_job + variables: + GRADLE_TARGET: "stageMainDist :smokeTest" + GRADLE_PARAMS: "-PskipFlakyTests" + DD_INJECT_FORCE: "true" + DD_INJECTION_ENABLED: "tracer" + parallel: + matrix: *test_matrix + +test_smoke_graalvm: + extends: .test_job + variables: + GRADLE_TARGET: "stageMainDist :dd-smoke-test:spring-boot-3.0-native:test" + parallel: + matrix: + - testJvm: ["graalvm17", "graalvm21"] + +test_smoke_semeru8_debugger: + extends: .test_job + variables: + GRADLE_TARGET: "stageMainDist dd-smoke-tests:debugger-integration-tests:test" + GRADLE_PARAMS: "-PskipFlakyTests" + testJvm: "semeru8" + +.system-tests-job: + image: $SYSTEM_TESTS_IMAGE + tags: [ "runner:docker" ] + stage: test + needs: [ build ] + rules: + - if: '$POPULATE_CACHE' + when: never + - when: always + variables: + BUILD_CACHE_TYPE: lib + before_script: + - cd /system-tests + - git fetch origin $SYSTEM_TESTS_COMMIT + - git reset --hard FETCH_HEAD + - mkdir -p /system-tests/binaries/ + - cp workspace/dd-java-agent/build/libs/*.jar /system-tests/binaries/ + - cp workspace/dd-trace-api/build/libs/*.jar /system-tests/binaries/ + - cd /system-tests + - export SYSTEM_TESTS_IDM_AWS_ACCESS_KEY_ID="" #TODO fix variable fetch + - export SYSTEM_TESTS_IDM_AWS_SECRET_ACCESS_KEY="" + - export SYSTEM_TESTS_E2E_DD_API_KEY="" + - export SYSTEM_TESTS_E2E_DD_APP_KEY="" + - export SYSTEM_TESTS_DD_API_KEY="" + +system-tests: + extends: .system-tests-job + parallel: + matrix: + - WEBLOG_VARIANT: ['akka-http', 'jersey-grizzly2', 'play', 'resteasy-netty3', 'ratpack', 'spring-boot', 'spring-boot-jetty', 'spring-boot-openliberty', 'spring-boot-payara', 'spring-boot-undertow', 'spring-boot-wildfly', 'uds-spring-boot', 'vertx3', 'vertx4'] + SCENARIO: [ DEFAULT, APM_TRACING_E2E, APM_TRACING_E2E_SINGLE_SPAN, APPSEC_BLOCKING, APPSEC_REQUEST_BLOCKING, APPSEC_RASP, APPSEC_RUNTIME_ACTIVATION, REMOTE_CONFIG_MOCKED_BACKEND_ASM_DD ] + - WEBLOG_VARIANT: ['spring-boot-3-native'] + SCENARIO: [ DEFAULT, APM_TRACING_E2E, APM_TRACING_E2E_SINGLE_SPAN ] + script: + - ./build.sh java --weblog-variant $WEBLOG_VARIANT + - > + if [[ $SCENARIO =~ .*_E2E.* ]]; then + export DD_SITE=datadoghq.com; + export DD_API_KEY=$SYSTEM_TESTS_E2E_DD_API_KEY; + export DD_APPLICATION_KEY=$SYSTEM_TESTS_E2E_DD_APP_KEY; + else + export DD_API_KEY=$SYSTEM_TESTS_DD_API_KEY; + fi + - echo "Running scenario $SCENARIO" + - ./run.sh $SCENARIO + after_script: + - | + mkdir -p artifacts + cd /system-tests + shopt -s nullglob + for log_dir in logs*; do + tar -cvzf ../artifacts/${log_dir}_${WEBLOG_VARIANT}.tar.gz $log_dir + done + artifacts: + when: always + paths: + - artifacts + +integration-system-tests: + extends: .system-tests-job + script: + - ./build.sh --library java --weblog-variant spring-boot + - export AWS_ACCESS_KEY_ID="$SYSTEM_TESTS_IDM_AWS_ACCESS_KEY_ID" + - export AWS_SECRET_ACCESS_KEY="$SYSTEM_TESTS_IDM_AWS_SECRET_ACCESS_KEY" + - export AWS_REGION="us-east-1" + - export AWS_DEFAULT_REGION="us-east-1" # AWS services should use `AWS_REGION`, but some still use the older `AWS_DEFAULT_REGION` + - DD_SITE=datadoghq.com DD_API_KEY=$SYSTEM_TESTS_E2E_DD_API_KEY DD_APPLICATION_KEY=$SYSTEM_TESTS_E2E_DD_APP_KEY ./run.sh INTEGRATIONS + - DD_API_KEY=$SYSTEM_TESTS_DD_API_KEY ./run.sh CROSSED_TRACING_LIBRARIES + artifacts: + when: always + reports: + junit: /system-tests/logs_integrations/*.xml + paths: + - /system-tests/logs_integrations + +debugger-system-tests: + extends: .system-tests-job + script: + - ./build.sh --library java --weblog-variant spring-boot + - DD_API_KEY=$SYSTEM_TESTS_E2E_DD_API_KEY ./run.sh DEBUGGER_SCENARIOS + after_script: + - | + mkdir -p logs_debugger + for dir in /system-tests/logs*/; do + cp -r "$dir" logs_debugger + done + artifacts: + when: always + reports: + junit: logs_debugger/*.xml + paths: + - logs_debugger + +parametric-tests: + extends: .system-tests-job + script: + - ./build.sh -i runner + - timeout 20m ./run.sh PARAMETRIC --library java --durations=30 -vv + after_script: + - tar -cvzf logs_java_parametric_dev.tar.gz -C /system-tests logs_parametric + artifacts: + when: always + reports: + junit: /system-tests/logs_parametric/*.xml + paths: + - logs_java_parametric_dev.tar.gz + deploy_to_profiling_backend: stage: publish needs: [ build ] From 4a4ba1bf51e7f8f5f019419e5f9174664a04340a Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Thu, 6 Feb 2025 15:07:12 -0500 Subject: [PATCH 04/38] syntax errors --- .gitlab-ci.yml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 75bd62ee41b..f3c40f3e826 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -38,19 +38,19 @@ variables: value: "c706e333ef06800b866ac300e4b6cdb7566cc5e5" .test_matrix: &test_matrix - testJvm: - - "8" - - "semeru11" - - "oracle8" - - "21" - - "ubuntu17" - - "zulu8" - - "semeru8" - - "ibm8" - - "zulu11" - - "11" - - "17" - - "semeru17" + - testJvm: + - "8" + - "semeru11" + - "oracle8" + - "21" + - "ubuntu17" + - "zulu8" + - "semeru8" + - "ibm8" + - "zulu11" + - "11" + - "17" + - "semeru17" default: tags: [ "arch:amd64" ] @@ -291,7 +291,7 @@ test_inst_latest: GRADLE_PARAMS: "-PskipFlakyTests" parallel: matrix: - testJvm: ["8", "17", "21" ] + - testJvm: ["8", "17", "21" ] test_flaky: extends: .test_job @@ -355,7 +355,7 @@ test_smoke_semeru8_debugger: .system-tests-job: image: $SYSTEM_TESTS_IMAGE tags: [ "runner:docker" ] - stage: test + stage: tests needs: [ build ] rules: - if: '$POPULATE_CACHE' From b350dbf035003314f00dd1f2aa6094952057b10b Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Mon, 10 Feb 2025 18:15:03 -0500 Subject: [PATCH 05/38] add gradle daemon logs everywhere --- .gitlab-ci.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f3c40f3e826..b620c0bfde4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -107,6 +107,7 @@ build: - 'workspace/dd-trace-api/build/libs/*.jar' - 'workspace/dd-trace-ot/build/libs/*.jar' - 'upstream.env' + - '.gradle/daemon/*/*.out.log' reports: dotenv: build.env @@ -153,6 +154,7 @@ spotless: artifacts: paths: - ./check_reports + - '.gradle/daemon/*/*.out.log' check_base: extends: .check_job @@ -219,6 +221,7 @@ muzzle: artifacts: paths: - ./reports + - '.gradle/daemon/*/*.out.log' muzzle-dep-report: extends: .gradle_build @@ -233,6 +236,7 @@ muzzle-dep-report: artifacts: paths: - ./reports + - '.gradle/daemon/*/*.out.log' .test_job: extends: .gradle_build @@ -264,6 +268,7 @@ muzzle-dep-report: - ./reports.tar - ./profiles.tar - ./results + - '.gradle/daemon/*/*.out.log' test_base: extends: .test_job @@ -409,6 +414,7 @@ system-tests: when: always paths: - artifacts + - '.gradle/daemon/*/*.out.log' integration-system-tests: extends: .system-tests-job @@ -426,6 +432,7 @@ integration-system-tests: junit: /system-tests/logs_integrations/*.xml paths: - /system-tests/logs_integrations + - '.gradle/daemon/*/*.out.log' debugger-system-tests: extends: .system-tests-job @@ -444,6 +451,7 @@ debugger-system-tests: junit: logs_debugger/*.xml paths: - logs_debugger + - '.gradle/daemon/*/*.out.log' parametric-tests: extends: .system-tests-job @@ -458,6 +466,7 @@ parametric-tests: junit: /system-tests/logs_parametric/*.xml paths: - logs_java_parametric_dev.tar.gz + - '.gradle/daemon/*/*.out.log' deploy_to_profiling_backend: stage: publish From 57f4c7b47c58b564e3cd1d01be3b1204b57ffa92 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Mon, 10 Feb 2025 18:17:36 -0500 Subject: [PATCH 06/38] fix c/p error --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b620c0bfde4..a7cdb0784d0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -255,7 +255,7 @@ muzzle-dep-report: then export PROFILER_COMMAND="-XX:StartFlightRecording=settings=profile,filename=/tmp/${CI_JOB_NAME_SLUG}.jfr,dumponexit=true"; fi - - export GRADLE_OPTS="GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xms2G -Xmx2G $PROFILER_COMMAND -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp' -Ddatadog.forkedMaxHeapSize=768M -Ddatadog.forkedMinHeapSize=128M" + - export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xms2G -Xmx2G $PROFILER_COMMAND -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp' -Ddatadog.forkedMaxHeapSize=768M -Ddatadog.forkedMinHeapSize=128M" - ./gradlew $GRADLE_TARGET $GRADLE_PARAMS -PtestJvm=$testJvm $GRADLE_ARGS --continue || $CONTINUE_ON_FAILURE after_script: - .circleci/collect_reports.sh From 0145135dbe1df589720fe15a59a6f567d5f827fb Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Mon, 10 Feb 2025 18:25:35 -0500 Subject: [PATCH 07/38] fix system tests dir --- .gitlab-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4ad0d8f2f6b..7318198371f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -35,7 +35,7 @@ variables: value: "false" SYSTEM_TESTS_COMMIT: description: "Commit hash of system tests to use" - value: "c706e333ef06800b866ac300e4b6cdb7566cc5e5" + value: "8384a3947b9881d0fcdb5ac937b80aad9a70d4d4" .test_matrix: &test_matrix - testJvm: @@ -373,8 +373,8 @@ test_smoke_semeru8_debugger: - git fetch origin $SYSTEM_TESTS_COMMIT - git reset --hard FETCH_HEAD - mkdir -p /system-tests/binaries/ - - cp workspace/dd-java-agent/build/libs/*.jar /system-tests/binaries/ - - cp workspace/dd-trace-api/build/libs/*.jar /system-tests/binaries/ + - cp $CI_PROJECT_DIR/dd-java-agent/build/libs/*.jar /system-tests/binaries/ + - cp $CI_PROJECT_DIR/dd-trace-api/build/libs/*.jar /system-tests/binaries/ - cd /system-tests - export SYSTEM_TESTS_IDM_AWS_ACCESS_KEY_ID="" #TODO fix variable fetch - export SYSTEM_TESTS_IDM_AWS_SECRET_ACCESS_KEY="" From 9372118127bac8df03ce2ed55425efb54c2556e7 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 11 Feb 2025 09:50:59 -0500 Subject: [PATCH 08/38] add some ls --- .gitlab-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7318198371f..ddd8c1e131c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -373,6 +373,8 @@ test_smoke_semeru8_debugger: - git fetch origin $SYSTEM_TESTS_COMMIT - git reset --hard FETCH_HEAD - mkdir -p /system-tests/binaries/ + - ls $CI_PROJECT_DIR/ + - ls $CI_PROJECT_DIR/dd-java-agent/build/libs/ - cp $CI_PROJECT_DIR/dd-java-agent/build/libs/*.jar /system-tests/binaries/ - cp $CI_PROJECT_DIR/dd-trace-api/build/libs/*.jar /system-tests/binaries/ - cd /system-tests From d5f41d31810b04ca0febebabf4d08dbb2b5a6105 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 11 Feb 2025 10:04:39 -0500 Subject: [PATCH 09/38] always save artifacts --- .gitlab-ci.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ddd8c1e131c..e2ce151f020 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -102,6 +102,7 @@ build: - echo "BUILD_JOB_NAME=$CI_JOB_NAME" >> build.env - echo "BUILD_JOB_ID=$CI_JOB_ID" >> build.env artifacts: + when: always paths: - 'workspace/dd-java-agent/build/libs/*.jar' - 'workspace/dd-trace-api/build/libs/*.jar' @@ -152,6 +153,7 @@ spotless: after_script: - .circleci/collect_reports.sh --destination ./check_reports --move artifacts: + when: always paths: - ./check_reports - '.gradle/daemon/*/*.out.log' @@ -201,12 +203,13 @@ test_published_artifacts: after_script: - .circleci/collect_reports.sh artifacts: + when: always paths: - ./check_reports muzzle: extends: .gradle_build - needs: [ build_tests ] + needs: [ build ] rules: - if: '$POPULATE_CACHE' when: never @@ -219,13 +222,14 @@ muzzle: after_script: - .circleci/collect_reports.sh artifacts: + when: always paths: - ./reports - '.gradle/daemon/*/*.out.log' muzzle-dep-report: extends: .gradle_build - needs: [ build_tests ] + needs: [ build ] variables: BUILD_CACHE_TYPE: test script: @@ -234,6 +238,7 @@ muzzle-dep-report: after_script: - .circleci/collect_muzzle_deps.sh artifacts: + when: always paths: - ./reports - '.gradle/daemon/*/*.out.log' @@ -264,6 +269,7 @@ muzzle-dep-report: # TODO upload test results # TODO Get APM Test Agent Trace Check Results artifacts: + when: always paths: - ./reports.tar - ./profiles.tar From 5113dbde55e95277d3f3233c17df5468f81158e0 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 11 Feb 2025 14:31:50 -0500 Subject: [PATCH 10/38] fix workspace path for system tests --- .gitlab-ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e2ce151f020..d930a75e097 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -380,9 +380,10 @@ test_smoke_semeru8_debugger: - git reset --hard FETCH_HEAD - mkdir -p /system-tests/binaries/ - ls $CI_PROJECT_DIR/ + - ls $CI_PROJECT_DIR/workspace - ls $CI_PROJECT_DIR/dd-java-agent/build/libs/ - - cp $CI_PROJECT_DIR/dd-java-agent/build/libs/*.jar /system-tests/binaries/ - - cp $CI_PROJECT_DIR/dd-trace-api/build/libs/*.jar /system-tests/binaries/ + - cp $CI_PROJECT_DIR/workspace/dd-java-agent/build/libs/*.jar /system-tests/binaries/ + - cp $CI_PROJECT_DIR/workspace/dd-trace-api/build/libs/*.jar /system-tests/binaries/ - cd /system-tests - export SYSTEM_TESTS_IDM_AWS_ACCESS_KEY_ID="" #TODO fix variable fetch - export SYSTEM_TESTS_IDM_AWS_SECRET_ACCESS_KEY="" From acba4a92978e70d932cdf6975bf972baad467c7c Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 11 Feb 2025 14:33:26 -0500 Subject: [PATCH 11/38] move more jobs to the tests stage --- .gitlab-ci.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d930a75e097..184ad37e7f3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -135,6 +135,7 @@ build_and_populate_dep_cache: spotless: extends: .gradle_build + stage: tests script: - export JAVA_HOME=$JAVA_11_HOME - ./gradlew spotlessCheck $GRADLE_ARGS @@ -142,6 +143,7 @@ spotless: .check_job: extends: .gradle_build needs: [ "build_tests" ] + stage: tests rules: - if: '$POPULATE_CACHE' when: never @@ -210,6 +212,7 @@ test_published_artifacts: muzzle: extends: .gradle_build needs: [ build ] + stage: tests rules: - if: '$POPULATE_CACHE' when: never @@ -230,6 +233,7 @@ muzzle: muzzle-dep-report: extends: .gradle_build needs: [ build ] + stage: tests variables: BUILD_CACHE_TYPE: test script: @@ -246,6 +250,7 @@ muzzle-dep-report: .test_job: extends: .gradle_build needs: [ build_tests ] + stage: tests rules: - if: '$POPULATE_CACHE' when: never From 54b5391927a2ad319d83cd4f690391ff351f772a Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 11 Feb 2025 15:27:05 -0500 Subject: [PATCH 12/38] split muzzle into 6 jobs --- .gitlab-ci.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 184ad37e7f3..0def5bdbbda 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -61,7 +61,7 @@ default: variables: GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx2560M -Xms2560M -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'" MAVEN_OPTS: "-Xms64M -Xmx512M" - GRADLE_ARGS: " --build-cache --stacktrace --no-daemon --parallel --max-workers=2" + GRADLE_WORKERS: 2 KUBERNETES_CPU_REQUEST: 8 KUBERNETES_MEMORY_REQUEST: 6Gi cache: @@ -80,6 +80,7 @@ default: policy: $BUILD_CACHE_POLICY before_script: - export GRADLE_USER_HOME=`pwd`/.gradle + - export GRADLE_ARGS=" --build-cache --stacktrace --no-daemon --parallel --max-workers=$GRADLE_WORKERS" # for weird reasons, gradle will always "chmod 700" the .gradle folder # with Gitlab caching, .gradle is always owned by root and thus gradle's chmod invocation fails # This dance is a hack to have .gradle owned by the Gitlab runner user @@ -213,6 +214,7 @@ muzzle: extends: .gradle_build needs: [ build ] stage: tests + parallel: 6 rules: - if: '$POPULATE_CACHE' when: never @@ -221,7 +223,12 @@ muzzle: BUILD_CACHE_TYPE: test script: - export SKIP_BUILDSCAN="true" - - ./gradlew muzzle $GRADLE_ARGS + - echo CI_NODE_INDEX=$CI_NODE_INDEX + - echo CI_NODE_TOTAL=CI_NODE_TOTAL + - ./gradlew writeMuzzleTasksToFile $GRADLE_ARGS + - sort build/muzzleTasks > sortedMuzzleTasks + - split --number=l/$CI_NODE_TOTAL --suffix-length=1 --numeric-suffixes sortedMuzzleTasks muzzleSplit + - ./gradlew `cat muzzleSplit | xargs` $GRADLE_ARGS after_script: - .circleci/collect_reports.sh artifacts: From 1f25bce401d49c71e6d40480484f9fda9ad5e877 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 11 Feb 2025 15:27:23 -0500 Subject: [PATCH 13/38] remove system-tests debug output --- .gitlab-ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0def5bdbbda..2f9f5cc0197 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -391,9 +391,6 @@ test_smoke_semeru8_debugger: - git fetch origin $SYSTEM_TESTS_COMMIT - git reset --hard FETCH_HEAD - mkdir -p /system-tests/binaries/ - - ls $CI_PROJECT_DIR/ - - ls $CI_PROJECT_DIR/workspace - - ls $CI_PROJECT_DIR/dd-java-agent/build/libs/ - cp $CI_PROJECT_DIR/workspace/dd-java-agent/build/libs/*.jar /system-tests/binaries/ - cp $CI_PROJECT_DIR/workspace/dd-trace-api/build/libs/*.jar /system-tests/binaries/ - cd /system-tests From 29ac8e30ae5f80b0d7886a1e1765083b3a831e1c Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 11 Feb 2025 17:10:22 -0500 Subject: [PATCH 14/38] fix path and index for muzzle --- .gitlab-ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2f9f5cc0197..2818c9cc8bb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -226,9 +226,10 @@ muzzle: - echo CI_NODE_INDEX=$CI_NODE_INDEX - echo CI_NODE_TOTAL=CI_NODE_TOTAL - ./gradlew writeMuzzleTasksToFile $GRADLE_ARGS - - sort build/muzzleTasks > sortedMuzzleTasks + - sort workspace/build/muzzleTasks > sortedMuzzleTasks - split --number=l/$CI_NODE_TOTAL --suffix-length=1 --numeric-suffixes sortedMuzzleTasks muzzleSplit - - ./gradlew `cat muzzleSplit | xargs` $GRADLE_ARGS + - export NODE_ZERO_INDEX=$((CI_NODE_INDEX - 1)) + - ./gradlew `cat muzzleSplit${NODE_ZERO_INDEX} | xargs` $GRADLE_ARGS after_script: - .circleci/collect_reports.sh artifacts: From 507258c64917b2d43b177b0d10dd3801f9575c62 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 11 Feb 2025 18:51:59 -0500 Subject: [PATCH 15/38] add signing args --- .gitlab-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2818c9cc8bb..f533fd3f4ea 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -198,6 +198,8 @@ test_published_artifacts: script: - mvn_local_repo=$(./mvnw help:evaluate -Dexpression=settings.localRepository -q -DforceStdout) - rm -rf "${mvn_local_repo}/com/datadoghq" + - export GPG_PRIVATE_KEY=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.signing.gpg_private_key --with-decryption --query "Parameter.Value" --out text) + - export GPG_PASSWORD=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.signing.gpg_passphrase --with-decryption --query "Parameter.Value" --out text) - export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx2G -Xms2G -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'" - ./gradlew publishToMavenLocal $GRADLE_ARGS - cd test-published-dependencies From 2477dfa3e6928fca77e406c985bfc7297d38ea51 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 11 Feb 2025 18:52:08 -0500 Subject: [PATCH 16/38] 8 parallism --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f533fd3f4ea..23ba8e37e4e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -216,7 +216,7 @@ muzzle: extends: .gradle_build needs: [ build ] stage: tests - parallel: 6 + parallel: 8 rules: - if: '$POPULATE_CACHE' when: never From 89005dbc2fe1908b46fc2379d75b38449bed92ef Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 11 Feb 2025 18:52:20 -0500 Subject: [PATCH 17/38] no needs for spotless --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 23ba8e37e4e..6e6841f4e44 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -137,6 +137,7 @@ build_and_populate_dep_cache: spotless: extends: .gradle_build stage: tests + needs: [] script: - export JAVA_HOME=$JAVA_11_HOME - ./gradlew spotlessCheck $GRADLE_ARGS From b0d0b76affd775f30588edf9416b506357f03f1d Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 11 Feb 2025 19:43:58 -0500 Subject: [PATCH 18/38] java 7 for test published artifacts --- .gitlab-ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6e6841f4e44..4e1b244837d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -30,6 +30,7 @@ variables: DEPENDENCY_CACHE_POLICY: pull BUILD_CACHE_POLICY: pull GRADLE_VERSION: "8.4" # must match gradle-wrapper.properties + JAVA_BUILD_IMAGE_VERSION: "v25.01" PROFILE_TESTS: description: "Enable profiling of tests" value: "false" @@ -56,7 +57,7 @@ default: tags: [ "arch:amd64" ] .gradle_build: &gradle_build - image: ghcr.io/datadog/dd-trace-java-docker-build:v25.01-base + image: ghcr.io/datadog/dd-trace-java-docker-build:${JAVA_BUILD_IMAGE_VERSION}-base stage: build variables: GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx2560M -Xms2560M -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'" @@ -189,6 +190,8 @@ check_debugger: test_published_artifacts: extends: .gradle_build + image: ghcr.io/datadog/dd-trace-java-docker-build:${JAVA_BUILD_IMAGE_VERSION}-7 # Needs Java7 for some tests + stage: tests needs: [ build ] rules: - if: '$POPULATE_CACHE' From 38b4fae96820aa53af8c4b57aab28ef780273461 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Wed, 12 Feb 2025 14:59:12 -0500 Subject: [PATCH 19/38] use the image for the test jvm --- .gitlab-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4e1b244837d..1dab8b91fcb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -23,6 +23,7 @@ stages: #TODO publish tests to datadog #TODO agent_integration_tests #TODO no output timeout +#TODO xlarge_tests variables: REGISTRY: 486234852809.dkr.ecr.us-east-1.amazonaws.com @@ -263,6 +264,7 @@ muzzle-dep-report: .test_job: extends: .gradle_build + image: ghcr.io/datadog/dd-trace-java-docker-build:$testJvm needs: [ build_tests ] stage: tests rules: From 70d8a2737f3fa49f15e20b63b5b03489c93fb65f Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Thu, 13 Feb 2025 12:04:14 -0500 Subject: [PATCH 20/38] upload ci_app results --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1dab8b91fcb..637d60c97cd 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -287,7 +287,7 @@ muzzle-dep-report: - .circleci/collect_reports.sh - if [ "$PROFILE_TESTS" == "true" ]; then .circleci/collect_profiles.sh; fi - .circleci/collect_results.sh -# TODO upload test results + - .circleci/upload_ciapp.sh tests $testJvm # TODO Get APM Test Agent Trace Check Results artifacts: when: always From 528e725df3327df86a5baa55bc0c928be7669a2b Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Thu, 13 Feb 2025 12:04:29 -0500 Subject: [PATCH 21/38] when always -> on_success --- .gitlab-ci.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 637d60c97cd..7b5d8c521aa 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -151,7 +151,7 @@ spotless: rules: - if: '$POPULATE_CACHE' when: never - - when: always + - when: always # TODO change to on_success once build_tests is stable variables: BUILD_CACHE_TYPE: test script: @@ -197,7 +197,7 @@ test_published_artifacts: rules: - if: '$POPULATE_CACHE' when: never - - when: always + - when: on_success variables: BUILD_CACHE_TYPE: lib script: @@ -225,7 +225,7 @@ muzzle: rules: - if: '$POPULATE_CACHE' when: never - - when: always + - when: on_success variables: BUILD_CACHE_TYPE: test script: @@ -270,7 +270,7 @@ muzzle-dep-report: rules: - if: '$POPULATE_CACHE' when: never - - when: always + - when: always # TODO change to on_success once build_tests is stable variables: BUILD_CACHE_TYPE: test GRADLE_PARAMS: "" @@ -392,7 +392,7 @@ test_smoke_semeru8_debugger: rules: - if: '$POPULATE_CACHE' when: never - - when: always + - when: on_success variables: BUILD_CACHE_TYPE: lib before_script: From a043cdb2317b21414ed252197803c7e0fd2346d1 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Thu, 13 Feb 2025 18:12:33 -0500 Subject: [PATCH 22/38] Cleanup TraceAgentTests to always run --- .../groovy/AbstractTraceAgentTest.groovy | 46 ++++++++++++ .../groovy/DDApiIntegrationTest.groovy | 74 ++----------------- .../groovy/DataStreamsIntegrationTest.groovy | 13 +--- .../groovy/MetricsIntegrationTest.groovy | 13 +--- .../groovy/TraceMapperRealAgentTest.groovy | 40 +++++----- 5 files changed, 80 insertions(+), 106 deletions(-) create mode 100644 dd-trace-core/src/traceAgentTest/groovy/AbstractTraceAgentTest.groovy diff --git a/dd-trace-core/src/traceAgentTest/groovy/AbstractTraceAgentTest.groovy b/dd-trace-core/src/traceAgentTest/groovy/AbstractTraceAgentTest.groovy new file mode 100644 index 00000000000..22a45e61b53 --- /dev/null +++ b/dd-trace-core/src/traceAgentTest/groovy/AbstractTraceAgentTest.groovy @@ -0,0 +1,46 @@ +import datadog.trace.api.ConfigDefaults +import datadog.trace.api.config.TracerConfig +import datadog.trace.test.util.DDSpecification +import org.testcontainers.containers.GenericContainer +import org.testcontainers.containers.startupcheck.MinimumDurationRunningStartupCheckStrategy +import spock.lang.Shared + +import java.time.Duration + +abstract class AbstractTraceAgentTest extends DDSpecification { + @Shared + def agentContainer + + def setupSpec() { + /* + CI will provide us with agent container running along side our build. + When building locally, however, we need to take matters into our own hands + and we use 'testcontainers' for this. + */ + if ("true" != System.getenv("CI")) { + agentContainer = new GenericContainer("datadog/agent:7.34.0") + .withEnv(["DD_APM_ENABLED": "true", + "DD_BIND_HOST" : "0.0.0.0", + "DD_API_KEY" : "invalid_key_but_this_is_fine", + "DD_LOGS_STDOUT": "yes"]) + .withExposedPorts(datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_AGENT_PORT) + .withStartupTimeout(Duration.ofSeconds(120)) + // Apparently we need to sleep for a bit so agent's response `{"service:,env:":1}` in rate_by_service. + // This is clearly a race-condition and maybe we should avoid verifying complete response + .withStartupCheckStrategy(new MinimumDurationRunningStartupCheckStrategy(Duration.ofSeconds(10))) + agentContainer.start() + } else { + } + } + + def setup() { + if (agentContainer) { + injectSysConfig(TracerConfig.AGENT_HOST, (String) agentContainer.getHost()) + injectSysConfig(TracerConfig.TRACE_AGENT_PORT, (String) agentContainer.getMappedPort(ConfigDefaults.DEFAULT_TRACE_AGENT_PORT)) + } + } + + def cleanupSpec() { + agentContainer?.stop() + } +} diff --git a/dd-trace-core/src/traceAgentTest/groovy/DDApiIntegrationTest.groovy b/dd-trace-core/src/traceAgentTest/groovy/DDApiIntegrationTest.groovy index 079bbd7a23f..e43ba4cc979 100644 --- a/dd-trace-core/src/traceAgentTest/groovy/DDApiIntegrationTest.groovy +++ b/dd-trace-core/src/traceAgentTest/groovy/DDApiIntegrationTest.groovy @@ -3,6 +3,7 @@ import datadog.communication.http.OkHttpUtils import datadog.communication.serialization.ByteBufferConsumer import datadog.communication.serialization.FlushingBuffer import datadog.communication.serialization.msgpack.MsgPackWriter +import datadog.trace.api.Config import datadog.trace.api.StatsDClient import datadog.trace.common.writer.ListWriter import datadog.trace.common.writer.Payload @@ -15,44 +16,21 @@ import datadog.trace.common.writer.ddagent.TraceMapperV0_5 import datadog.trace.core.CoreTracer import datadog.trace.core.DDSpan import datadog.trace.core.monitor.MonitoringImpl -import datadog.trace.test.util.DDSpecification import okhttp3.HttpUrl import okhttp3.OkHttpClient -import org.testcontainers.containers.GenericContainer -import org.testcontainers.containers.startupcheck.MinimumDurationRunningStartupCheckStrategy -import spock.lang.Requires -import spock.lang.Shared import java.nio.ByteBuffer -import java.time.Duration import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicReference -// It is fine to run on CI because CI provides agent externally, not through testcontainers -@Requires({ "true" == System.getenv("CI") }) -class DDApiIntegrationTest extends DDSpecification { - def tracer = CoreTracer.builder().writer(new ListWriter()).build() +class DDApiIntegrationTest extends AbstractTraceAgentTest { + def tracer DDSpan span // Looks like okHttp needs to resolve this, even for connection over socket static final SOMEHOST = "datadoghq.com" static final SOMEPORT = 123 - /* - Note: type here has to stay undefined, otherwise tests will fail in CI in Java 7 because - 'testcontainers' are built for Java 8 and Java 7 cannot load this class. - */ - @Shared - def agentContainer - @Shared - def agentContainerHost = "localhost" - @Shared - def agentContainerPort = 8126 - @Shared - Process process - @Shared - File socketPath - def discovery def udsDiscovery def api @@ -68,39 +46,8 @@ class DDApiIntegrationTest extends DDSpecification { agentResponse.set(responseJson) } - def setupSpec() { - /* - CI will provide us with agent container running along side our build. - When building locally, however, we need to take matters into our own hands - and we use 'testcontainers' for this. - */ - if ("true" != System.getenv("CI")) { - agentContainer = new GenericContainer("datadog/agent:7.22.0") - .withEnv(["DD_APM_ENABLED": "true", - "DD_BIND_HOST" : "0.0.0.0", - "DD_API_KEY" : "invalid_key_but_this_is_fine", - "DD_LOGS_STDOUT": "yes"]) - .withExposedPorts(datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_AGENT_PORT) - .withStartupTimeout(Duration.ofSeconds(120)) - // Apparently we need to sleep for a bit so agent's response `{"service:,env:":1}` in rate_by_service. - // This is clearly a race-condition and maybe we should avoid verifying complete response - .withStartupCheckStrategy(new MinimumDurationRunningStartupCheckStrategy(Duration.ofSeconds(10))) - // .withLogConsumer { output -> - // print output.utf8String - // } - agentContainer.start() - agentContainerHost = agentContainer.getHost() - agentContainerPort = agentContainer.getMappedPort(datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_AGENT_PORT) - } - - File tmpDir = File.createTempDir() - tmpDir.deleteOnExit() - socketPath = new File(tmpDir, "socket") - println "!!!socat UNIX-LISEN:${socketPath},reuseaddr,fork TCP-CONNECT:${agentContainerHost}:${agentContainerPort}" - process = Runtime.getRuntime().exec("socat UNIX-LISTEN:${socketPath},reuseaddr,fork TCP-CONNECT:${agentContainerHost}:${agentContainerPort}") - } - def setup() { + tracer = CoreTracer.builder().writer(new ListWriter()).build() span = tracer.buildSpan("fakeOperation").start() Thread.sleep(1) span.finish() @@ -110,16 +57,9 @@ class DDApiIntegrationTest extends DDSpecification { tracer?.close() } - def cleanupSpec() { - if (agentContainer) { - agentContainer.stop() - } - process.destroy() - } - def beforeTest(boolean enableV05) { MonitoringImpl monitoring = new MonitoringImpl(StatsDClient.NO_OP, 1, TimeUnit.SECONDS) - HttpUrl agentUrl = HttpUrl.get(String.format("http://%s:%d", agentContainerHost, agentContainerPort)) + HttpUrl agentUrl = HttpUrl.get(Config.get().getAgentUrl()) OkHttpClient httpClient = OkHttpUtils.buildHttpClient(agentUrl, 5000) discovery = new DDAgentFeaturesDiscovery(httpClient, monitoring, agentUrl, enableV05, true) api = new DDAgentApi(httpClient, agentUrl, discovery, monitoring, false) @@ -143,7 +83,7 @@ class DDApiIntegrationTest extends DDSpecification { assert 200 == response.status() assert response.success() assert discovery.getTraceEndpoint() == "${version}/traces" - assert endpoint.get() == "http://${agentContainerHost}:${agentContainerPort}/${version}/traces" + assert endpoint.get() == "${Config.get().getAgentUrl()}/${version}/traces" assert agentResponse.get()["rate_by_service"] instanceof Map where: @@ -166,7 +106,7 @@ class DDApiIntegrationTest extends DDSpecification { assert 200 == response.status() assert response.success() assert discovery.getTraceEndpoint() == "${version}/traces" - assert endpoint.get() == "http://${agentContainerHost}:${agentContainerPort}/${version}/traces" + assert endpoint.get() == "${Config.get().getAgentUrl()}/${version}/traces" assert agentResponse.get()["rate_by_service"] instanceof Map where: diff --git a/dd-trace-core/src/traceAgentTest/groovy/DataStreamsIntegrationTest.groovy b/dd-trace-core/src/traceAgentTest/groovy/DataStreamsIntegrationTest.groovy index 8b5fe50e019..dce73722ee8 100644 --- a/dd-trace-core/src/traceAgentTest/groovy/DataStreamsIntegrationTest.groovy +++ b/dd-trace-core/src/traceAgentTest/groovy/DataStreamsIntegrationTest.groovy @@ -8,21 +8,16 @@ import datadog.trace.bootstrap.instrumentation.api.StatsPoint import datadog.trace.common.metrics.EventListener import datadog.trace.common.metrics.OkHttpSink import datadog.trace.core.datastreams.DefaultDataStreamsMonitoring -import datadog.trace.test.util.DDSpecification import okhttp3.HttpUrl import spock.lang.Ignore -import spock.lang.Requires import spock.util.concurrent.PollingConditions import java.util.concurrent.CopyOnWriteArrayList import static datadog.trace.common.metrics.EventListener.EventType.OK -@Requires({ - "true" == System.getenv("CI") -}) @Ignore("The agent in CI doesn't have a valid API key. Unlike metrics and traces, data streams fails in this case") -class DataStreamsIntegrationTest extends DDSpecification { +class DataStreamsIntegrationTest extends AbstractTraceAgentTest { def "Sending stats bucket to agent should notify with OK event"() { given: @@ -49,10 +44,10 @@ class DataStreamsIntegrationTest extends DDSpecification { } when: - def dataStreams = new DefaultDataStreamsMonitoring(sink, sharedCommunicationObjects.featuresDiscovery, timeSource, { traceConfig }, Config.get()) + def dataStreams = new DefaultDataStreamsMonitoring(sink, sharedCommunicationObjects.featuresDiscovery(Config.get()), timeSource, { traceConfig }, Config.get()) dataStreams.start() - dataStreams.accept(new StatsPoint("testType", "testGroup", "testTopic", 1, 2, timeSource.currentTimeNanos, 0, 0, null)) - timeSource.advance(DEFAULT_BUCKET_DURATION_NANOS) + dataStreams.add(new StatsPoint(["type:testType", "group:testGroup", "topic:testTopic"], 1, 2, 5, timeSource.currentTimeNanos, 0, 0, 0, null)) + timeSource.advance(Config.get().getDataStreamsBucketDurationNanoseconds()) dataStreams.report() then: diff --git a/dd-trace-core/src/traceAgentTest/groovy/MetricsIntegrationTest.groovy b/dd-trace-core/src/traceAgentTest/groovy/MetricsIntegrationTest.groovy index bc921bfe54e..fa96bd90218 100644 --- a/dd-trace-core/src/traceAgentTest/groovy/MetricsIntegrationTest.groovy +++ b/dd-trace-core/src/traceAgentTest/groovy/MetricsIntegrationTest.groovy @@ -1,14 +1,13 @@ - import datadog.communication.ddagent.DDAgentFeaturesDiscovery import datadog.communication.http.OkHttpUtils +import datadog.trace.api.Config import datadog.trace.api.WellKnownTags import datadog.trace.common.metrics.AggregateMetric import datadog.trace.common.metrics.EventListener import datadog.trace.common.metrics.MetricKey import datadog.trace.common.metrics.OkHttpSink import datadog.trace.common.metrics.SerializingMetricWriter -import datadog.trace.test.util.DDSpecification -import spock.lang.Requires +import okhttp3.HttpUrl import java.util.concurrent.CopyOnWriteArrayList import java.util.concurrent.CountDownLatch @@ -16,19 +15,15 @@ import java.util.concurrent.atomic.AtomicLongArray import static datadog.trace.common.metrics.EventListener.EventType.OK import static java.util.concurrent.TimeUnit.SECONDS -import okhttp3.HttpUrl -@Requires({ - "true" == System.getenv("CI") -}) -class MetricsIntegrationTest extends DDSpecification { +class MetricsIntegrationTest extends AbstractTraceAgentTest { def "send metrics to trace agent should notify with OK event"() { setup: def latch = new CountDownLatch(1) def listener = new BlockingListener(latch) - def agentUrl = "http://localhost:8126" + def agentUrl = Config.get().getAgentUrl() OkHttpSink sink = new OkHttpSink(OkHttpUtils.buildHttpClient(HttpUrl.parse(agentUrl), 5000L), agentUrl, DDAgentFeaturesDiscovery.V6_METRICS_ENDPOINT, true, false, [:]) sink.register(listener) diff --git a/dd-trace-core/src/traceAgentTest/groovy/TraceMapperRealAgentTest.groovy b/dd-trace-core/src/traceAgentTest/groovy/TraceMapperRealAgentTest.groovy index 66f3244013e..b82e1f4a9d1 100644 --- a/dd-trace-core/src/traceAgentTest/groovy/TraceMapperRealAgentTest.groovy +++ b/dd-trace-core/src/traceAgentTest/groovy/TraceMapperRealAgentTest.groovy @@ -1,5 +1,6 @@ import datadog.communication.ddagent.DDAgentFeaturesDiscovery import datadog.communication.http.OkHttpUtils +import datadog.trace.api.Config import datadog.trace.api.StatsDClient import datadog.trace.common.writer.PayloadDispatcherImpl import datadog.trace.common.writer.ddagent.DDAgentApi @@ -7,36 +8,33 @@ import datadog.trace.common.writer.ddagent.DDAgentMapperDiscovery import datadog.trace.core.CoreSpan import datadog.trace.core.monitor.HealthMetrics import datadog.trace.core.monitor.MonitoringImpl -import datadog.trace.test.util.DDSpecification import okhttp3.HttpUrl import okhttp3.OkHttpClient -import spock.lang.Requires -import spock.lang.Shared import java.util.concurrent.TimeUnit import static TraceGenerator.generateRandomTraces -@Requires({ - "true" == System.getenv("CI") -}) -class TraceMapperRealAgentTest extends DDSpecification { +class TraceMapperRealAgentTest extends AbstractTraceAgentTest { - @Shared - HttpUrl agentUrl = HttpUrl.get("http://localhost:8126") - @Shared - OkHttpClient client = OkHttpUtils.buildHttpClient(agentUrl, 30_000) + OkHttpClient client + MonitoringImpl monitoring + DDAgentFeaturesDiscovery v05Discovery + DDAgentFeaturesDiscovery v04Discovery + DDAgentApi v05Api + DDAgentApi v04Api - @Shared - MonitoringImpl monitoring = new MonitoringImpl(StatsDClient.NO_OP, 1, TimeUnit.SECONDS) - @Shared - DDAgentFeaturesDiscovery v05Discovery = new DDAgentFeaturesDiscovery(client, monitoring, agentUrl, true, true) - @Shared - DDAgentFeaturesDiscovery v04Discovery = new DDAgentFeaturesDiscovery(client, monitoring, agentUrl, false, true) - @Shared - DDAgentApi v05Api = new DDAgentApi(client, agentUrl, v05Discovery, monitoring, false) - @Shared - DDAgentApi v04Api = new DDAgentApi(client, agentUrl, v04Discovery, monitoring, false) + def setup() { + def agentUrl = HttpUrl.parse(Config.get().getAgentUrl()) + + client = OkHttpUtils.buildHttpClient(agentUrl, 30_000) + monitoring = new MonitoringImpl(StatsDClient.NO_OP, 1, TimeUnit.SECONDS) + + v05Discovery = new DDAgentFeaturesDiscovery(client, monitoring, agentUrl, true, true) + v04Discovery = new DDAgentFeaturesDiscovery(client, monitoring, agentUrl, false, true) + v05Api = new DDAgentApi(client, agentUrl, v05Discovery, monitoring, false) + v04Api = new DDAgentApi(client, agentUrl, v04Discovery, monitoring, false) + } def "send random traces"() { setup: From 8c8f20eb908367ee33d1e8742a58463ce35cd416 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 18 Feb 2025 10:50:04 -0500 Subject: [PATCH 23/38] try agent integration test --- .gitlab-ci.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7b5d8c521aa..821e56cdb0e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -384,6 +384,19 @@ test_smoke_semeru8_debugger: GRADLE_PARAMS: "-PskipFlakyTests" testJvm: "semeru8" +agent_integration_tests: + extends: .test_job + variables: + testJvm: "8" + DD_AGENT_HOST: "local-agent" + services: + - name: datadog/agent:7.34.0 + alias: local-agent + variables: + DD_APM_ENABLED: "true" + DD_BIND_HOST: "0.0.0.0" + DD_API_KEY: "invalid_key_but_this_is_fine" + .system-tests-job: image: $SYSTEM_TESTS_IMAGE tags: [ "runner:docker" ] From 847cd9f67c8a8692e98d1f4ccdd6cdcdb7e1c5ac Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 18 Feb 2025 11:41:34 -0500 Subject: [PATCH 24/38] add the actual target --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 821e56cdb0e..ddec563824e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -389,6 +389,7 @@ agent_integration_tests: variables: testJvm: "8" DD_AGENT_HOST: "local-agent" + GRADLE_TARGET: "traceAgentTest" services: - name: datadog/agent:7.34.0 alias: local-agent From a31d1bfd2be623299209b6464c7e2fe6bb580601 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 18 Feb 2025 13:53:08 -0500 Subject: [PATCH 25/38] clean up branch --- .gitlab-ci.yml | 358 +------------------------------------------------ 1 file changed, 3 insertions(+), 355 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ddec563824e..04dded989ab 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -35,24 +35,6 @@ variables: PROFILE_TESTS: description: "Enable profiling of tests" value: "false" - SYSTEM_TESTS_COMMIT: - description: "Commit hash of system tests to use" - value: "8384a3947b9881d0fcdb5ac937b80aad9a70d4d4" - -.test_matrix: &test_matrix - - testJvm: - - "8" - - "semeru11" - - "oracle8" - - "21" - - "ubuntu17" - - "zulu8" - - "semeru8" - - "ibm8" - - "zulu11" - - "11" - - "17" - - "semeru17" default: tags: [ "arch:amd64" ] @@ -115,16 +97,6 @@ build: reports: dotenv: build.env -build_tests: - extends: .gradle_build - variables: - BUILD_CACHE_POLICY: push - BUILD_CACHE_TYPE: test - DEPENDENCY_CACHE_POLICY: pull - script: - - ./gradlew resolveAndLockAll --write-locks - - ./gradlew clean :baseTest :instrumentationTest :instrumentationLatestDepTest :instrumentationTest :profilingTest -PskipTests $GRADLE_ARGS - build_and_populate_dep_cache: extends: build variables: @@ -136,143 +108,17 @@ build_and_populate_dep_cache: - when: manual allow_failure: true -spotless: - extends: .gradle_build - stage: tests - needs: [] - script: - - export JAVA_HOME=$JAVA_11_HOME - - ./gradlew spotlessCheck $GRADLE_ARGS - -.check_job: - extends: .gradle_build - needs: [ "build_tests" ] - stage: tests - rules: - - if: '$POPULATE_CACHE' - when: never - - when: always # TODO change to on_success once build_tests is stable - variables: - BUILD_CACHE_TYPE: test - script: - - ./gradlew $GRADLE_TARGET -PskipTests -PrunBuildSrcTests -PskipSpotless $GRADLE_ARGS - after_script: - - .circleci/collect_reports.sh --destination ./check_reports --move - artifacts: - when: always - paths: - - ./check_reports - - '.gradle/daemon/*/*.out.log' - -check_base: - extends: .check_job - variables: - GRADLE_TARGET: ":baseCheck" - -check_inst: - extends: .check_job - variables: - GRADLE_TARGET: ":instrumentationCheck" - -check_smoke: - extends: .check_job - variables: - GRADLE_TARGET: ":smokeCheck" - -check_profiling: - extends: .check_job - variables: - GRADLE_TARGET: ":profilingCheck" - -check_debugger: - extends: .check_job - variables: - GRADLE_TARGET: ":debuggerCheck" - -test_published_artifacts: - extends: .gradle_build - image: ghcr.io/datadog/dd-trace-java-docker-build:${JAVA_BUILD_IMAGE_VERSION}-7 # Needs Java7 for some tests - stage: tests - needs: [ build ] - rules: - - if: '$POPULATE_CACHE' - when: never - - when: on_success - variables: - BUILD_CACHE_TYPE: lib - script: - - mvn_local_repo=$(./mvnw help:evaluate -Dexpression=settings.localRepository -q -DforceStdout) - - rm -rf "${mvn_local_repo}/com/datadoghq" - - export GPG_PRIVATE_KEY=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.signing.gpg_private_key --with-decryption --query "Parameter.Value" --out text) - - export GPG_PASSWORD=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.signing.gpg_passphrase --with-decryption --query "Parameter.Value" --out text) - - export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx2G -Xms2G -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'" - - ./gradlew publishToMavenLocal $GRADLE_ARGS - - cd test-published-dependencies - - export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx512M -Xms512M -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'" - - ./gradlew check --info $GRADLE_ARGS - after_script: - - .circleci/collect_reports.sh - artifacts: - when: always - paths: - - ./check_reports - -muzzle: - extends: .gradle_build - needs: [ build ] - stage: tests - parallel: 8 - rules: - - if: '$POPULATE_CACHE' - when: never - - when: on_success - variables: - BUILD_CACHE_TYPE: test - script: - - export SKIP_BUILDSCAN="true" - - echo CI_NODE_INDEX=$CI_NODE_INDEX - - echo CI_NODE_TOTAL=CI_NODE_TOTAL - - ./gradlew writeMuzzleTasksToFile $GRADLE_ARGS - - sort workspace/build/muzzleTasks > sortedMuzzleTasks - - split --number=l/$CI_NODE_TOTAL --suffix-length=1 --numeric-suffixes sortedMuzzleTasks muzzleSplit - - export NODE_ZERO_INDEX=$((CI_NODE_INDEX - 1)) - - ./gradlew `cat muzzleSplit${NODE_ZERO_INDEX} | xargs` $GRADLE_ARGS - after_script: - - .circleci/collect_reports.sh - artifacts: - when: always - paths: - - ./reports - - '.gradle/daemon/*/*.out.log' - -muzzle-dep-report: - extends: .gradle_build - needs: [ build ] - stage: tests - variables: - BUILD_CACHE_TYPE: test - script: - - export SKIP_BUILDSCAN="true" - - ./gradlew generateMuzzleReport muzzleInstrumentationReport $GRADLE_ARGS - after_script: - - .circleci/collect_muzzle_deps.sh - artifacts: - when: always - paths: - - ./reports - - '.gradle/daemon/*/*.out.log' - .test_job: extends: .gradle_build image: ghcr.io/datadog/dd-trace-java-docker-build:$testJvm - needs: [ build_tests ] + needs: [ build ] stage: tests rules: - if: '$POPULATE_CACHE' when: never - - when: always # TODO change to on_success once build_tests is stable + - when: on_success variables: - BUILD_CACHE_TYPE: test + BUILD_CACHE_TYPE: lib GRADLE_PARAMS: "" CONTINUE_ON_FAILURE: "false" script: @@ -297,93 +143,6 @@ muzzle-dep-report: - ./results - '.gradle/daemon/*/*.out.log' -test_base: - extends: .test_job - variables: - GRADLE_TARGET: ":baseTest" - GRADLE_PARAMS: "-PskipFlakyTests" - parallel: - matrix: *test_matrix - script: - - if [ "$testJvm" == "8" ]; then export GRADLE_PARAMS="-PskipFlakyTests -PcheckCoverage"; fi - - !reference [.test_job, script] - -test_inst: - extends: .test_job - variables: - GRADLE_TARGET: ":instrumentationTest" - GRADLE_PARAMS: "-PskipFlakyTests" - parallel: - matrix: *test_matrix - -test_inst_latest: - extends: .test_job - variables: - GRADLE_TARGET: ":instrumentationLatestDepTest" - GRADLE_PARAMS: "-PskipFlakyTests" - parallel: - matrix: - - testJvm: ["8", "17", "21" ] - -test_flaky: - extends: .test_job - variables: - GRADLE_PARAMS: "-PrunFlakyTests" - testJvm: "8" - CONTINUE_ON_FAILURE: "true" - parallel: - matrix: - - GRADLE_TARGET: [":baseTest", ":instrumentationTest", ":smokeTest", ":debuggerTest"] - -test_profiling: - extends: .test_job - variables: - GRADLE_TARGET: ":profilingTest" - GRADLE_PARAMS: "-PskipFlakyTests" - parallel: - matrix: *test_matrix - -test_debugger: - extends: .test_job - variables: - GRADLE_TARGET: ":debuggerTest" - GRADLE_PARAMS: "-PskipFlakyTests" - parallel: - matrix: *test_matrix - -test_smoke: - extends: .test_job - variables: - GRADLE_TARGET: "stageMainDist :smokeTest" - GRADLE_PARAMS: "-PskipFlakyTests" - parallel: - matrix: *test_matrix - -test_ssi_smoke: - extends: .test_job - variables: - GRADLE_TARGET: "stageMainDist :smokeTest" - GRADLE_PARAMS: "-PskipFlakyTests" - DD_INJECT_FORCE: "true" - DD_INJECTION_ENABLED: "tracer" - parallel: - matrix: *test_matrix - -test_smoke_graalvm: - extends: .test_job - variables: - GRADLE_TARGET: "stageMainDist :dd-smoke-test:spring-boot-3.0-native:test" - parallel: - matrix: - - testJvm: ["graalvm17", "graalvm21"] - -test_smoke_semeru8_debugger: - extends: .test_job - variables: - GRADLE_TARGET: "stageMainDist dd-smoke-tests:debugger-integration-tests:test" - GRADLE_PARAMS: "-PskipFlakyTests" - testJvm: "semeru8" - agent_integration_tests: extends: .test_job variables: @@ -398,117 +157,6 @@ agent_integration_tests: DD_BIND_HOST: "0.0.0.0" DD_API_KEY: "invalid_key_but_this_is_fine" -.system-tests-job: - image: $SYSTEM_TESTS_IMAGE - tags: [ "runner:docker" ] - stage: tests - needs: [ build ] - rules: - - if: '$POPULATE_CACHE' - when: never - - when: on_success - variables: - BUILD_CACHE_TYPE: lib - before_script: - - cd /system-tests - - git fetch origin $SYSTEM_TESTS_COMMIT - - git reset --hard FETCH_HEAD - - mkdir -p /system-tests/binaries/ - - cp $CI_PROJECT_DIR/workspace/dd-java-agent/build/libs/*.jar /system-tests/binaries/ - - cp $CI_PROJECT_DIR/workspace/dd-trace-api/build/libs/*.jar /system-tests/binaries/ - - cd /system-tests - - export SYSTEM_TESTS_IDM_AWS_ACCESS_KEY_ID="" #TODO fix variable fetch - - export SYSTEM_TESTS_IDM_AWS_SECRET_ACCESS_KEY="" - - export SYSTEM_TESTS_E2E_DD_API_KEY="" - - export SYSTEM_TESTS_E2E_DD_APP_KEY="" - - export SYSTEM_TESTS_DD_API_KEY="" - -system-tests: - extends: .system-tests-job - parallel: - matrix: - - WEBLOG_VARIANT: ['akka-http', 'jersey-grizzly2', 'play', 'resteasy-netty3', 'ratpack', 'spring-boot', 'spring-boot-jetty', 'spring-boot-openliberty', 'spring-boot-payara', 'spring-boot-undertow', 'spring-boot-wildfly', 'uds-spring-boot', 'vertx3', 'vertx4'] - SCENARIO: [ DEFAULT, APM_TRACING_E2E, APM_TRACING_E2E_SINGLE_SPAN, APPSEC_BLOCKING, APPSEC_REQUEST_BLOCKING, APPSEC_RASP, APPSEC_RUNTIME_ACTIVATION, REMOTE_CONFIG_MOCKED_BACKEND_ASM_DD ] - - WEBLOG_VARIANT: ['spring-boot-3-native'] - SCENARIO: [ DEFAULT, APM_TRACING_E2E, APM_TRACING_E2E_SINGLE_SPAN ] - script: - - ./build.sh java --weblog-variant $WEBLOG_VARIANT - - > - if [[ $SCENARIO =~ .*_E2E.* ]]; then - export DD_SITE=datadoghq.com; - export DD_API_KEY=$SYSTEM_TESTS_E2E_DD_API_KEY; - export DD_APPLICATION_KEY=$SYSTEM_TESTS_E2E_DD_APP_KEY; - else - export DD_API_KEY=$SYSTEM_TESTS_DD_API_KEY; - fi - - echo "Running scenario $SCENARIO" - - ./run.sh $SCENARIO - after_script: - - | - mkdir -p artifacts - cd /system-tests - shopt -s nullglob - for log_dir in logs*; do - tar -cvzf ../artifacts/${log_dir}_${WEBLOG_VARIANT}.tar.gz $log_dir - done - artifacts: - when: always - paths: - - artifacts - - '.gradle/daemon/*/*.out.log' - -integration-system-tests: - extends: .system-tests-job - script: - - ./build.sh --library java --weblog-variant spring-boot - - export AWS_ACCESS_KEY_ID="$SYSTEM_TESTS_IDM_AWS_ACCESS_KEY_ID" - - export AWS_SECRET_ACCESS_KEY="$SYSTEM_TESTS_IDM_AWS_SECRET_ACCESS_KEY" - - export AWS_REGION="us-east-1" - - export AWS_DEFAULT_REGION="us-east-1" # AWS services should use `AWS_REGION`, but some still use the older `AWS_DEFAULT_REGION` - - DD_SITE=datadoghq.com DD_API_KEY=$SYSTEM_TESTS_E2E_DD_API_KEY DD_APPLICATION_KEY=$SYSTEM_TESTS_E2E_DD_APP_KEY ./run.sh INTEGRATIONS - - DD_API_KEY=$SYSTEM_TESTS_DD_API_KEY ./run.sh CROSSED_TRACING_LIBRARIES - artifacts: - when: always - reports: - junit: /system-tests/logs_integrations/*.xml - paths: - - /system-tests/logs_integrations - - '.gradle/daemon/*/*.out.log' - -debugger-system-tests: - extends: .system-tests-job - script: - - ./build.sh --library java --weblog-variant spring-boot - - DD_API_KEY=$SYSTEM_TESTS_E2E_DD_API_KEY ./run.sh DEBUGGER_SCENARIOS - after_script: - - | - mkdir -p logs_debugger - for dir in /system-tests/logs*/; do - cp -r "$dir" logs_debugger - done - artifacts: - when: always - reports: - junit: logs_debugger/*.xml - paths: - - logs_debugger - - '.gradle/daemon/*/*.out.log' - -parametric-tests: - extends: .system-tests-job - script: - - ./build.sh -i runner - - timeout 20m ./run.sh PARAMETRIC --library java --durations=30 -vv - after_script: - - tar -cvzf logs_java_parametric_dev.tar.gz -C /system-tests logs_parametric - artifacts: - when: always - reports: - junit: /system-tests/logs_parametric/*.xml - paths: - - logs_java_parametric_dev.tar.gz - - '.gradle/daemon/*/*.out.log' - deploy_to_profiling_backend: stage: publish needs: [ build ] From 53d9a04eb1707a59a9f96ea156ca47436c19fa18 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Wed, 19 Feb 2025 15:51:52 -0500 Subject: [PATCH 26/38] set keys and use explicit agent value in test --- .gitlab-ci.yml | 4 +++- .../src/traceAgentTest/groovy/AbstractTraceAgentTest.groovy | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 04dded989ab..0b6ea15a11f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -122,6 +122,8 @@ build_and_populate_dep_cache: GRADLE_PARAMS: "" CONTINUE_ON_FAILURE: "false" script: + - export DATADOG_API_KEY_PROD=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.DATADOG_API_KEY_PROD --with-decryption --query "Parameter.Value" --out text) + - export DATADOG_API_KEY_DDSTAGING=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.dd_api_key --with-decryption --query "Parameter.Value" --out text) - > if [ "$PROFILE_TESTS" == "true" ] && [ "$testJvm" != "ibm8" ] && [ "$testJvm" != "oracle8" ]; then @@ -147,7 +149,7 @@ agent_integration_tests: extends: .test_job variables: testJvm: "8" - DD_AGENT_HOST: "local-agent" + CI_AGENT_HOST: local-agent GRADLE_TARGET: "traceAgentTest" services: - name: datadog/agent:7.34.0 diff --git a/dd-trace-core/src/traceAgentTest/groovy/AbstractTraceAgentTest.groovy b/dd-trace-core/src/traceAgentTest/groovy/AbstractTraceAgentTest.groovy index 22a45e61b53..64ebb9ac9ed 100644 --- a/dd-trace-core/src/traceAgentTest/groovy/AbstractTraceAgentTest.groovy +++ b/dd-trace-core/src/traceAgentTest/groovy/AbstractTraceAgentTest.groovy @@ -37,6 +37,8 @@ abstract class AbstractTraceAgentTest extends DDSpecification { if (agentContainer) { injectSysConfig(TracerConfig.AGENT_HOST, (String) agentContainer.getHost()) injectSysConfig(TracerConfig.TRACE_AGENT_PORT, (String) agentContainer.getMappedPort(ConfigDefaults.DEFAULT_TRACE_AGENT_PORT)) + } else { + injectSysConfig(TracerConfig.AGENT_HOST, System.getenv("CI_AGENT_HOST")) } } From 42c24dff814b1cf18034057ea7e538eef27c91e5 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 25 Feb 2025 14:23:17 -0500 Subject: [PATCH 27/38] remove DD_* variables from environment before tests --- .gitlab-ci.yml | 2 ++ .gitlab/prepare-test-environment.sh | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100755 .gitlab/prepare-test-environment.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0b6ea15a11f..27d67b05004 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -129,9 +129,11 @@ build_and_populate_dep_cache: then export PROFILER_COMMAND="-XX:StartFlightRecording=settings=profile,filename=/tmp/${CI_JOB_NAME_SLUG}.jfr,dumponexit=true"; fi + - .gitlab/prepare-test-environment.sh save - export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xms2G -Xmx2G $PROFILER_COMMAND -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp' -Ddatadog.forkedMaxHeapSize=768M -Ddatadog.forkedMinHeapSize=128M" - ./gradlew $GRADLE_TARGET $GRADLE_PARAMS -PtestJvm=$testJvm $GRADLE_ARGS --continue || $CONTINUE_ON_FAILURE after_script: + - .gitlab/prepare-test-environment.sh restore - .circleci/collect_reports.sh - if [ "$PROFILE_TESTS" == "true" ]; then .circleci/collect_profiles.sh; fi - .circleci/collect_results.sh diff --git a/.gitlab/prepare-test-environment.sh b/.gitlab/prepare-test-environment.sh new file mode 100755 index 00000000000..81599a33929 --- /dev/null +++ b/.gitlab/prepare-test-environment.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# In Gitlab, DD_* variables are set because the build runner is instrumented with Datadog telemetry +# To have a pristine environment for the tests, these variables are saved before the test run and restored afterwards + +gitlabVariables=("DD_SERVICE" "DD_ENTITY_ID" "DD_SITE" "DD_ENV" "DD_DATACENTER" "DD_PARTITION" "DD_CLOUDPROVIDER") + +function save_and_clean() { + for VARIABLE in "${gitlabVariables[@]}" + do + echo "export $VARIABLE=${!VARIABLE}" >> pretest.env + unset "$VARIABLE" + done +} + +function restore() { + source pretest.env +} + +if [ "$1" == "save" ] ; then + save_and_clean +elif [ "$1" == "restore" ]; then + restore +else + echo "Unknown argument $1" +fi From 4390c7381d3cd5d3aa84e5da8a37fb94ebc121c8 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 25 Feb 2025 15:16:40 -0500 Subject: [PATCH 28/38] save/restore must be toplevel --- .gitlab-ci.yml | 19 +++++++++++++++++-- .gitlab/prepare-test-environment.sh | 26 -------------------------- 2 files changed, 17 insertions(+), 28 deletions(-) delete mode 100755 .gitlab/prepare-test-environment.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 27d67b05004..6fd62e7388a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -108,6 +108,21 @@ build_and_populate_dep_cache: - when: manual allow_failure: true +# In Gitlab, DD_* variables are set because the build runner is instrumented with Datadog telemetry +# To have a pristine environment for the tests, these variables are saved before the test run and restored afterwards +.prepare_test_env: &prepare_test_env + - export gitlabVariables=("DD_SERVICE" "DD_ENTITY_ID" "DD_SITE" "DD_ENV" "DD_DATACENTER" "DD_PARTITION" "DD_CLOUDPROVIDER") + - [ ! -e pretest.env ] || rm pretest.env + - | + for VARIABLE in "${gitlabVariables[@]}" + do + echo "export $VARIABLE=${!VARIABLE}" >> pretest.env + unset "$VARIABLE" + done + +.restore_pretest_env: &restore_pretest_env + - source pretest.env + .test_job: extends: .gradle_build image: ghcr.io/datadog/dd-trace-java-docker-build:$testJvm @@ -129,11 +144,11 @@ build_and_populate_dep_cache: then export PROFILER_COMMAND="-XX:StartFlightRecording=settings=profile,filename=/tmp/${CI_JOB_NAME_SLUG}.jfr,dumponexit=true"; fi - - .gitlab/prepare-test-environment.sh save + - *prepare_test_env - export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xms2G -Xmx2G $PROFILER_COMMAND -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp' -Ddatadog.forkedMaxHeapSize=768M -Ddatadog.forkedMinHeapSize=128M" - ./gradlew $GRADLE_TARGET $GRADLE_PARAMS -PtestJvm=$testJvm $GRADLE_ARGS --continue || $CONTINUE_ON_FAILURE after_script: - - .gitlab/prepare-test-environment.sh restore + - *restore_pretest_env - .circleci/collect_reports.sh - if [ "$PROFILE_TESTS" == "true" ]; then .circleci/collect_profiles.sh; fi - .circleci/collect_results.sh diff --git a/.gitlab/prepare-test-environment.sh b/.gitlab/prepare-test-environment.sh deleted file mode 100755 index 81599a33929..00000000000 --- a/.gitlab/prepare-test-environment.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -# In Gitlab, DD_* variables are set because the build runner is instrumented with Datadog telemetry -# To have a pristine environment for the tests, these variables are saved before the test run and restored afterwards - -gitlabVariables=("DD_SERVICE" "DD_ENTITY_ID" "DD_SITE" "DD_ENV" "DD_DATACENTER" "DD_PARTITION" "DD_CLOUDPROVIDER") - -function save_and_clean() { - for VARIABLE in "${gitlabVariables[@]}" - do - echo "export $VARIABLE=${!VARIABLE}" >> pretest.env - unset "$VARIABLE" - done -} - -function restore() { - source pretest.env -} - -if [ "$1" == "save" ] ; then - save_and_clean -elif [ "$1" == "restore" ]; then - restore -else - echo "Unknown argument $1" -fi From fc66b894eca2d1eeb5a276a2c4ffe58c31becd5d Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 25 Feb 2025 15:19:03 -0500 Subject: [PATCH 29/38] some debug logic for keys --- .circleci/upload_ciapp.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.circleci/upload_ciapp.sh b/.circleci/upload_ciapp.sh index 8f4bf0027a4..12a9a2bb1f8 100755 --- a/.circleci/upload_ciapp.sh +++ b/.circleci/upload_ciapp.sh @@ -36,6 +36,9 @@ junit_upload() { # Make sure we do not use DATADOG_API_KEY from the environment unset DATADOG_API_KEY +echo "PROD SIZE=${#DATADOG_API_KEY_PROD}" +echo "STAGING_SIZE=${#DATADOG_API_KEY_DDSTAGING}" + # Upload test results to production environment like all other CI jobs junit_upload "$DATADOG_API_KEY_PROD" # And also upload to staging environment to benefit from the new features not yet released From 926e618d8502bb0cea28368a11a20b0912a6ef1a Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 25 Feb 2025 15:33:23 -0500 Subject: [PATCH 30/38] yaml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6fd62e7388a..160f986b1e9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -112,7 +112,7 @@ build_and_populate_dep_cache: # To have a pristine environment for the tests, these variables are saved before the test run and restored afterwards .prepare_test_env: &prepare_test_env - export gitlabVariables=("DD_SERVICE" "DD_ENTITY_ID" "DD_SITE" "DD_ENV" "DD_DATACENTER" "DD_PARTITION" "DD_CLOUDPROVIDER") - - [ ! -e pretest.env ] || rm pretest.env + - '[ ! -e pretest.env ] || rm pretest.env' - | for VARIABLE in "${gitlabVariables[@]}" do From facd78ff7a9f95933e0dda2139b05fefa7362575 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 25 Feb 2025 17:54:14 -0500 Subject: [PATCH 31/38] set api keys in after_script --- .gitlab-ci.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 160f986b1e9..b639a8466dc 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -123,6 +123,10 @@ build_and_populate_dep_cache: .restore_pretest_env: &restore_pretest_env - source pretest.env +.set_datadog_api_keys: &set_datadog_api_keys + - export DATADOG_API_KEY_PROD=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.DATADOG_API_KEY_PROD --with-decryption --query "Parameter.Value" --out text) + - export DATADOG_API_KEY_DDSTAGING=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.dd_api_key --with-decryption --query "Parameter.Value" --out text) + .test_job: extends: .gradle_build image: ghcr.io/datadog/dd-trace-java-docker-build:$testJvm @@ -137,8 +141,6 @@ build_and_populate_dep_cache: GRADLE_PARAMS: "" CONTINUE_ON_FAILURE: "false" script: - - export DATADOG_API_KEY_PROD=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.DATADOG_API_KEY_PROD --with-decryption --query "Parameter.Value" --out text) - - export DATADOG_API_KEY_DDSTAGING=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.dd_api_key --with-decryption --query "Parameter.Value" --out text) - > if [ "$PROFILE_TESTS" == "true" ] && [ "$testJvm" != "ibm8" ] && [ "$testJvm" != "oracle8" ]; then @@ -149,6 +151,7 @@ build_and_populate_dep_cache: - ./gradlew $GRADLE_TARGET $GRADLE_PARAMS -PtestJvm=$testJvm $GRADLE_ARGS --continue || $CONTINUE_ON_FAILURE after_script: - *restore_pretest_env + - *set_datadog_api_keys - .circleci/collect_reports.sh - if [ "$PROFILE_TESTS" == "true" ]; then .circleci/collect_profiles.sh; fi - .circleci/collect_results.sh From 6200c3cafb4abc10ad7773a218d602784cc57513 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 25 Feb 2025 18:13:05 -0500 Subject: [PATCH 32/38] fix DDApiIntegrationTest --- .../groovy/AbstractTraceAgentTest.groovy | 19 +++++++++++++++---- .../groovy/DDApiIntegrationTest.groovy | 18 ++++++++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/dd-trace-core/src/traceAgentTest/groovy/AbstractTraceAgentTest.groovy b/dd-trace-core/src/traceAgentTest/groovy/AbstractTraceAgentTest.groovy index 64ebb9ac9ed..5d817b00862 100644 --- a/dd-trace-core/src/traceAgentTest/groovy/AbstractTraceAgentTest.groovy +++ b/dd-trace-core/src/traceAgentTest/groovy/AbstractTraceAgentTest.groovy @@ -29,16 +29,27 @@ abstract class AbstractTraceAgentTest extends DDSpecification { // This is clearly a race-condition and maybe we should avoid verifying complete response .withStartupCheckStrategy(new MinimumDurationRunningStartupCheckStrategy(Duration.ofSeconds(10))) agentContainer.start() - } else { } } def setup() { + injectSysConfig(TracerConfig.AGENT_HOST, getAgentContainerHost()) + injectSysConfig(TracerConfig.TRACE_AGENT_PORT, getAgentContainerPort()) + } + + String getAgentContainerHost() { + if (agentContainer) { + return (String) agentContainer.getHost() + } else { + return System.getenv("CI_AGENT_HOST") + } + } + + String getAgentContainerPort() { if (agentContainer) { - injectSysConfig(TracerConfig.AGENT_HOST, (String) agentContainer.getHost()) - injectSysConfig(TracerConfig.TRACE_AGENT_PORT, (String) agentContainer.getMappedPort(ConfigDefaults.DEFAULT_TRACE_AGENT_PORT)) + return (String) agentContainer.getMappedPort(ConfigDefaults.DEFAULT_TRACE_AGENT_PORT) } else { - injectSysConfig(TracerConfig.AGENT_HOST, System.getenv("CI_AGENT_HOST")) + return ConfigDefaults.DEFAULT_TRACE_AGENT_PORT } } diff --git a/dd-trace-core/src/traceAgentTest/groovy/DDApiIntegrationTest.groovy b/dd-trace-core/src/traceAgentTest/groovy/DDApiIntegrationTest.groovy index e43ba4cc979..5aa3c5437e8 100644 --- a/dd-trace-core/src/traceAgentTest/groovy/DDApiIntegrationTest.groovy +++ b/dd-trace-core/src/traceAgentTest/groovy/DDApiIntegrationTest.groovy @@ -18,6 +18,7 @@ import datadog.trace.core.DDSpan import datadog.trace.core.monitor.MonitoringImpl import okhttp3.HttpUrl import okhttp3.OkHttpClient +import spock.lang.Shared import java.nio.ByteBuffer import java.util.concurrent.TimeUnit @@ -31,6 +32,11 @@ class DDApiIntegrationTest extends AbstractTraceAgentTest { static final SOMEHOST = "datadoghq.com" static final SOMEPORT = 123 + @Shared + Process process + @Shared + File socketPath + def discovery def udsDiscovery def api @@ -46,6 +52,14 @@ class DDApiIntegrationTest extends AbstractTraceAgentTest { agentResponse.set(responseJson) } + def setupSpec() { + File tmpDir = File.createTempDir() + tmpDir.deleteOnExit() + socketPath = new File(tmpDir, "socket") + println "!!!socat UNIX-LISEN:${socketPath},reuseaddr,fork TCP-CONNECT:${agentContainerHost}:${agentContainerPort}" + process = Runtime.getRuntime().exec("socat UNIX-LISTEN:${socketPath},reuseaddr,fork TCP-CONNECT:${agentContainerHost}:${agentContainerPort}") + } + def setup() { tracer = CoreTracer.builder().writer(new ListWriter()).build() span = tracer.buildSpan("fakeOperation").start() @@ -57,6 +71,10 @@ class DDApiIntegrationTest extends AbstractTraceAgentTest { tracer?.close() } + def cleanupSpec() { + process?.destroy() + } + def beforeTest(boolean enableV05) { MonitoringImpl monitoring = new MonitoringImpl(StatsDClient.NO_OP, 1, TimeUnit.SECONDS) HttpUrl agentUrl = HttpUrl.get(Config.get().getAgentUrl()) From 90602a217bf7f994515d387ce4c573c6adb6998c Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 25 Feb 2025 18:15:29 -0500 Subject: [PATCH 33/38] remove agent integration tests from circleci --- .circleci/config.continue.yml.j2 | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/.circleci/config.continue.yml.j2 b/.circleci/config.continue.yml.j2 index b36da51f940..f0574e73f6d 100644 --- a/.circleci/config.continue.yml.j2 +++ b/.circleci/config.continue.yml.j2 @@ -30,7 +30,6 @@ system_test_matrix: &system_test_matrix parameters: weblog-variant: ['akka-http', 'jersey-grizzly2', 'play', 'resteasy-netty3', 'ratpack', 'spring-boot', 'spring-boot-jetty', 'spring-boot-openliberty', 'spring-boot-payara', 'spring-boot-undertow', 'spring-boot-wildfly', 'spring-boot-3-native', 'uds-spring-boot', 'vertx3', 'vertx4'] -agent_integration_tests_modules: &agent_integration_tests_modules "dd-trace-core|communication|internal-api|utils" core_modules: &core_modules "dd-java-agent|dd-trace-core|communication|internal-api|telemetry|utils|dd-java-agent/agent-bootstrap|dd-java-agent/agent-installer|dd-java-agent/agent-tooling|dd-java-agent/agent-builder|dd-java-agent/appsec|dd-java-agent/agent-crashtracking|dd-trace-api|dd-trace-ot" instrumentation_modules: &instrumentation_modules "dd-java-agent/instrumentation|dd-java-agent/agent-tooling|dd-java-agent/agent-iast|dd-java-agent/agent-installer|dd-java-agent/agent-builder|dd-java-agent/agent-bootstrap|dd-java-agent/appsec|dd-java-agent/testing|dd-trace-core|dd-trace-api|internal-api|communication" debugger_modules: &debugger_modules "dd-java-agent/agent-debugger|dd-java-agent/agent-bootstrap|dd-java-agent/agent-builder|internal-api|communication|dd-trace-core" @@ -692,19 +691,6 @@ jobs: name: Completed stage << parameters.stage >> on << parameters.testJvm >> passed! command: echo '<< parameters.stage >> completed!' - agent_integration_tests: - <<: *tests - - resource_class: medium - - docker: - - image: << pipeline.parameters.docker_image >>:{{ docker_image_prefix }}8 - - image: datadog/agent:7.34.0 - environment: - - DD_APM_ENABLED=true - - DD_BIND_HOST=0.0.0.0 - - DD_API_KEY=invalid_key_but_this_is_fine - test_published_artifacts: <<: *defaults resource_class: medium @@ -1416,14 +1402,6 @@ build_test_jobs: &build_test_jobs name: test_inst_latest stage: tracing - - agent_integration_tests: - requires: - - ok_to_test - triggeredBy: *agent_integration_tests_modules - gradleTarget: traceAgentTest - cacheType: base - testJvm: "8" - - test_published_artifacts: requires: - ok_to_test @@ -1484,7 +1462,6 @@ build_test_jobs: &build_test_jobs requires: - check - test_published_artifacts - - agent_integration_tests {% for jdk in all_jdks %} - "test_{{ jdk }}" {% endfor %} From d69f2b4b28fd156b0291bb5d239bb971d75aca13 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 25 Feb 2025 18:48:37 -0500 Subject: [PATCH 34/38] cleanup merge issues --- .circleci/upload_ciapp.sh | 3 --- .gitlab-ci.yml | 17 +++++------------ 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/.circleci/upload_ciapp.sh b/.circleci/upload_ciapp.sh index 12a9a2bb1f8..8f4bf0027a4 100755 --- a/.circleci/upload_ciapp.sh +++ b/.circleci/upload_ciapp.sh @@ -36,9 +36,6 @@ junit_upload() { # Make sure we do not use DATADOG_API_KEY from the environment unset DATADOG_API_KEY -echo "PROD SIZE=${#DATADOG_API_KEY_PROD}" -echo "STAGING_SIZE=${#DATADOG_API_KEY_DDSTAGING}" - # Upload test results to production environment like all other CI jobs junit_upload "$DATADOG_API_KEY_PROD" # And also upload to staging environment to benefit from the new features not yet released diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 036f4535619..6a438e7fbfa 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -17,14 +17,6 @@ stages: - ci-visibility-tests - generate-signing-key -#TODO display memory usage -#TODO test containers -#TODO paralization (muzzle) -#TODO publish tests to datadog -#TODO agent_integration_tests -#TODO no output timeout -#TODO xlarge_tests - variables: REGISTRY: 486234852809.dkr.ecr.us-east-1.amazonaws.com BUILD_JOB_NAME: "build" @@ -46,6 +38,10 @@ default: script: - echo "done" +.set_datadog_api_keys: &set_datadog_api_keys + - export DATADOG_API_KEY_PROD=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.DATADOG_API_KEY_PROD --with-decryption --query "Parameter.Value" --out text) + - export DATADOG_API_KEY_DDSTAGING=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.dd_api_key --with-decryption --query "Parameter.Value" --out text) + .gradle_build: &gradle_build image: ghcr.io/datadog/dd-trace-java-docker-build:${JAVA_BUILD_IMAGE_VERSION}-base stage: build @@ -211,10 +207,6 @@ muzzle-dep-report: .restore_pretest_env: &restore_pretest_env - source pretest.env -.set_datadog_api_keys: &set_datadog_api_keys - - export DATADOG_API_KEY_PROD=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.DATADOG_API_KEY_PROD --with-decryption --query "Parameter.Value" --out text) - - export DATADOG_API_KEY_DDSTAGING=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.dd_api_key --with-decryption --query "Parameter.Value" --out text) - .test_job: extends: .gradle_build image: ghcr.io/datadog/dd-trace-java-docker-build:$testJvm @@ -273,6 +265,7 @@ required: - spotless - muzzle - test_published_artifacts + - agent_integration_tests deploy_to_profiling_backend: stage: publish From e64f4ba0f0328660dab289e9628e7106b8f015df Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 25 Feb 2025 19:04:00 -0500 Subject: [PATCH 35/38] Revert "remove agent integration tests from circleci" This reverts commit 90602a217bf7f994515d387ce4c573c6adb6998c. --- .circleci/config.continue.yml.j2 | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/.circleci/config.continue.yml.j2 b/.circleci/config.continue.yml.j2 index eb985bb7a7f..5c1729ddcac 100644 --- a/.circleci/config.continue.yml.j2 +++ b/.circleci/config.continue.yml.j2 @@ -30,6 +30,7 @@ system_test_matrix: &system_test_matrix parameters: weblog-variant: ['akka-http', 'jersey-grizzly2', 'play', 'resteasy-netty3', 'ratpack', 'spring-boot', 'spring-boot-jetty', 'spring-boot-openliberty', 'spring-boot-payara', 'spring-boot-undertow', 'spring-boot-wildfly', 'spring-boot-3-native', 'uds-spring-boot', 'vertx3', 'vertx4'] +agent_integration_tests_modules: &agent_integration_tests_modules "dd-trace-core|communication|internal-api|utils" core_modules: &core_modules "dd-java-agent|dd-trace-core|communication|internal-api|telemetry|utils|dd-java-agent/agent-bootstrap|dd-java-agent/agent-installer|dd-java-agent/agent-tooling|dd-java-agent/agent-builder|dd-java-agent/appsec|dd-java-agent/agent-crashtracking|dd-trace-api|dd-trace-ot" instrumentation_modules: &instrumentation_modules "dd-java-agent/instrumentation|dd-java-agent/agent-tooling|dd-java-agent/agent-iast|dd-java-agent/agent-installer|dd-java-agent/agent-builder|dd-java-agent/agent-bootstrap|dd-java-agent/appsec|dd-java-agent/testing|dd-trace-core|dd-trace-api|internal-api|communication" debugger_modules: &debugger_modules "dd-java-agent/agent-debugger|dd-java-agent/agent-bootstrap|dd-java-agent/agent-builder|internal-api|communication|dd-trace-core" @@ -691,6 +692,19 @@ jobs: name: Completed stage << parameters.stage >> on << parameters.testJvm >> passed! command: echo '<< parameters.stage >> completed!' + agent_integration_tests: + <<: *tests + + resource_class: medium + + docker: + - image: << pipeline.parameters.docker_image >>:{{ docker_image_prefix }}8 + - image: datadog/agent:7.34.0 + environment: + - DD_APM_ENABLED=true + - DD_BIND_HOST=0.0.0.0 + - DD_API_KEY=invalid_key_but_this_is_fine + test_published_artifacts: <<: *defaults resource_class: medium @@ -1408,6 +1422,14 @@ build_test_jobs: &build_test_jobs name: test_inst_latest stage: tracing + - agent_integration_tests: + requires: + - ok_to_test + triggeredBy: *agent_integration_tests_modules + gradleTarget: traceAgentTest + cacheType: base + testJvm: "8" + - test_published_artifacts: requires: - ok_to_test @@ -1468,6 +1490,7 @@ build_test_jobs: &build_test_jobs requires: - check - test_published_artifacts + - agent_integration_tests {% for jdk in all_jdks %} - "test_{{ jdk }}" {% endfor %} From ed827ff64c56d995990d760b1cda32da7e6834ad Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 25 Feb 2025 21:50:24 -0500 Subject: [PATCH 36/38] assign CI_AGENT_HOST to localhost --- .circleci/config.continue.yml.j2 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.circleci/config.continue.yml.j2 b/.circleci/config.continue.yml.j2 index 5c1729ddcac..f3587b96bd6 100644 --- a/.circleci/config.continue.yml.j2 +++ b/.circleci/config.continue.yml.j2 @@ -696,6 +696,8 @@ jobs: <<: *tests resource_class: medium + environment: + - CI_AGENT_HOST=localhost docker: - image: << pipeline.parameters.docker_image >>:{{ docker_image_prefix }}8 From ac582ed16ae913c2ba8a38417a7775785a2ed24a Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Tue, 25 Feb 2025 21:53:28 -0500 Subject: [PATCH 37/38] don't skip tests when populating cache --- .gitlab-ci.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6a438e7fbfa..65949acc591 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -212,10 +212,6 @@ muzzle-dep-report: image: ghcr.io/datadog/dd-trace-java-docker-build:$testJvm needs: [ build ] stage: tests - rules: - - if: '$POPULATE_CACHE' - when: never - - when: on_success variables: BUILD_CACHE_TYPE: lib GRADLE_PARAMS: "" From ee55e639a921286ffaa9b6ca9c555344aed53f30 Mon Sep 17 00:00:00 2001 From: Laplie Anderson Date: Wed, 26 Feb 2025 02:08:08 -0500 Subject: [PATCH 38/38] codenarc --- .../traceAgentTest/groovy/AbstractTraceAgentTest.groovy | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dd-trace-core/src/traceAgentTest/groovy/AbstractTraceAgentTest.groovy b/dd-trace-core/src/traceAgentTest/groovy/AbstractTraceAgentTest.groovy index 5d817b00862..7d0fc3cfd0d 100644 --- a/dd-trace-core/src/traceAgentTest/groovy/AbstractTraceAgentTest.groovy +++ b/dd-trace-core/src/traceAgentTest/groovy/AbstractTraceAgentTest.groovy @@ -40,17 +40,17 @@ abstract class AbstractTraceAgentTest extends DDSpecification { String getAgentContainerHost() { if (agentContainer) { return (String) agentContainer.getHost() - } else { - return System.getenv("CI_AGENT_HOST") } + + return System.getenv("CI_AGENT_HOST") } String getAgentContainerPort() { if (agentContainer) { return (String) agentContainer.getMappedPort(ConfigDefaults.DEFAULT_TRACE_AGENT_PORT) - } else { - return ConfigDefaults.DEFAULT_TRACE_AGENT_PORT } + + return ConfigDefaults.DEFAULT_TRACE_AGENT_PORT } def cleanupSpec() {