dd-trace 5.52.0 → 5.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-3rdparty.csv +2 -1
- package/README.md +5 -0
- package/index.d.ts +87 -22
- package/initialize.mjs +3 -4
- package/package.json +36 -34
- package/packages/datadog-core/src/utils/src/get.js +1 -1
- package/packages/datadog-core/src/utils/src/has.js +1 -1
- package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
- package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
- package/packages/datadog-core/src/utils/src/pick.js +2 -2
- package/packages/datadog-core/src/utils/src/set.js +1 -1
- package/packages/datadog-core/src/utils/src/uniq.js +1 -1
- package/packages/datadog-instrumentations/src/amqp10.js +19 -17
- package/packages/datadog-instrumentations/src/amqplib.js +57 -37
- package/packages/datadog-instrumentations/src/apollo.js +2 -2
- package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -4
- package/packages/datadog-instrumentations/src/child_process.js +3 -3
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +92 -62
- package/packages/datadog-instrumentations/src/couchbase.js +5 -4
- package/packages/datadog-instrumentations/src/cucumber.js +126 -84
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +1 -1
- package/packages/datadog-instrumentations/src/express.js +2 -6
- package/packages/datadog-instrumentations/src/fs.js +7 -6
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +28 -34
- package/packages/datadog-instrumentations/src/graphql.js +7 -10
- package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
- package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
- package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
- package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
- package/packages/datadog-instrumentations/src/helpers/register.js +21 -18
- package/packages/datadog-instrumentations/src/http/client.js +16 -21
- package/packages/datadog-instrumentations/src/iovalkey.js +51 -0
- package/packages/datadog-instrumentations/src/jest.js +184 -87
- package/packages/datadog-instrumentations/src/kafkajs.js +65 -44
- package/packages/datadog-instrumentations/src/knex.js +4 -4
- package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
- package/packages/datadog-instrumentations/src/mariadb.js +38 -61
- package/packages/datadog-instrumentations/src/mocha/main.js +85 -59
- package/packages/datadog-instrumentations/src/mocha/utils.js +103 -82
- package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +20 -36
- package/packages/datadog-instrumentations/src/mysql2.js +55 -47
- package/packages/datadog-instrumentations/src/net.js +4 -2
- package/packages/datadog-instrumentations/src/next.js +7 -14
- package/packages/datadog-instrumentations/src/nyc.js +1 -1
- package/packages/datadog-instrumentations/src/openai.js +21 -23
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/pg.js +6 -13
- package/packages/datadog-instrumentations/src/playwright.js +170 -136
- package/packages/datadog-instrumentations/src/redis.js +3 -3
- package/packages/datadog-instrumentations/src/restify.js +2 -2
- package/packages/datadog-instrumentations/src/rhea.js +42 -54
- package/packages/datadog-instrumentations/src/router.js +22 -25
- package/packages/datadog-instrumentations/src/tedious.js +1 -1
- package/packages/datadog-instrumentations/src/url.js +9 -17
- package/packages/datadog-instrumentations/src/vitest.js +126 -97
- package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/client.js +6 -2
- package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/util.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
- package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
- package/packages/datadog-plugin-aws-sdk/src/base.js +3 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +24 -31
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +4 -5
- package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
- package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
- package/packages/datadog-plugin-child_process/src/index.js +4 -4
- package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
- package/packages/datadog-plugin-cucumber/src/index.js +86 -20
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +97 -27
- package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
- package/packages/datadog-plugin-cypress/src/support.js +24 -5
- package/packages/datadog-plugin-express/src/code_origin.js +30 -0
- package/packages/datadog-plugin-express/src/index.js +10 -12
- package/packages/datadog-plugin-express/src/tracing.js +19 -0
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
- package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +26 -9
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +7 -6
- package/packages/datadog-plugin-graphql/src/resolve.js +2 -2
- package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
- package/packages/datadog-plugin-grpc/src/client.js +2 -2
- package/packages/datadog-plugin-grpc/src/util.js +2 -2
- package/packages/datadog-plugin-http/src/client.js +18 -7
- package/packages/datadog-plugin-http2/src/client.js +20 -20
- package/packages/datadog-plugin-iovalkey/src/index.js +18 -0
- package/packages/datadog-plugin-jest/src/index.js +36 -28
- package/packages/datadog-plugin-jest/src/util.js +8 -8
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
- package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
- package/packages/datadog-plugin-kafkajs/src/producer.js +15 -7
- package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
- package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
- package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
- package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
- package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
- package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
- package/packages/datadog-plugin-mariadb/src/index.js +3 -9
- package/packages/datadog-plugin-mocha/src/index.js +88 -48
- package/packages/datadog-plugin-mongodb-core/src/index.js +1 -1
- package/packages/datadog-plugin-mysql/src/index.js +11 -9
- package/packages/datadog-plugin-mysql2/src/index.js +16 -0
- package/packages/datadog-plugin-net/src/tcp.js +1 -1
- package/packages/datadog-plugin-next/src/index.js +6 -5
- package/packages/datadog-plugin-openai/src/services.js +6 -10
- package/packages/datadog-plugin-openai/src/tracing.js +10 -14
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +48 -22
- package/packages/datadog-plugin-redis/src/index.js +9 -4
- package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
- package/packages/datadog-plugin-rhea/src/producer.js +5 -2
- package/packages/datadog-plugin-router/src/index.js +1 -1
- package/packages/datadog-plugin-selenium/src/index.js +1 -6
- package/packages/datadog-plugin-vitest/src/index.js +99 -72
- package/packages/datadog-shimmer/src/shimmer.js +163 -36
- package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
- package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
- package/packages/dd-trace/src/appsec/blocking.js +6 -20
- package/packages/dd-trace/src/appsec/graphql.js +2 -2
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +4 -6
- package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +4 -6
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
- package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/index.js +1 -0
- package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
- package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +6 -13
- package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
- package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -7
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +5 -7
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +6 -6
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -24
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
- package/packages/dd-trace/src/appsec/index.js +15 -12
- package/packages/dd-trace/src/appsec/rasp/index.js +19 -17
- package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
- package/packages/dd-trace/src/appsec/rasp/utils.js +11 -6
- package/packages/dd-trace/src/appsec/reporter.js +233 -40
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
- package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/index.js +1 -2
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -14
- package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
- package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -8
- package/packages/dd-trace/src/azure_metadata.js +2 -7
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +1 -1
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +1 -1
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +1 -1
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +8 -5
- package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +1 -1
- package/packages/dd-trace/src/config.js +82 -51
- package/packages/dd-trace/src/config_stable.js +3 -3
- package/packages/dd-trace/src/datastreams/encoding.js +9 -9
- package/packages/dd-trace/src/datastreams/fnv.js +1 -1
- package/packages/dd-trace/src/datastreams/pathway.js +4 -4
- package/packages/dd-trace/src/datastreams/processor.js +5 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +1 -1
- package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
- package/packages/dd-trace/src/datastreams/size.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +131 -72
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +6 -8
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +17 -27
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- package/packages/dd-trace/src/debugger/devtools_client/send.js +8 -7
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +16 -8
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +8 -10
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +3 -3
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
- package/packages/dd-trace/src/debugger/devtools_client/state.js +31 -4
- package/packages/dd-trace/src/dogstatsd.js +7 -4
- package/packages/dd-trace/src/encode/0.4.js +9 -9
- package/packages/dd-trace/src/encode/0.5.js +1 -1
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +3 -3
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/encode/tags-processors.js +1 -1
- package/packages/dd-trace/src/exporter.js +6 -6
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
- package/packages/dd-trace/src/exporters/common/docker.js +1 -1
- package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +1 -1
- package/packages/dd-trace/src/exporters/common/util.js +1 -1
- package/packages/dd-trace/src/external-logger/src/index.js +5 -5
- package/packages/dd-trace/src/flare/file.js +1 -5
- package/packages/dd-trace/src/format.js +1 -1
- package/packages/dd-trace/src/git_properties.js +1 -1
- package/packages/dd-trace/src/id.js +12 -6
- package/packages/dd-trace/src/iitm.js +10 -22
- package/packages/dd-trace/src/lambda/handler.js +6 -6
- package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
- package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -1
- package/packages/dd-trace/src/llmobs/sdk.js +2 -2
- package/packages/dd-trace/src/llmobs/tagger.js +113 -99
- package/packages/dd-trace/src/llmobs/util.js +9 -9
- package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
- package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
- package/packages/dd-trace/src/log/index.js +4 -4
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +2 -2
- package/packages/dd-trace/src/msgpack/chunk.js +3 -3
- package/packages/dd-trace/src/msgpack/encoder.js +28 -28
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
- package/packages/dd-trace/src/noop/span.js +3 -5
- package/packages/dd-trace/src/noop/tracer.js +1 -2
- package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +6 -5
- package/packages/dd-trace/src/opentracing/propagation/log.js +6 -8
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +27 -23
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
- package/packages/dd-trace/src/opentracing/span.js +9 -14
- package/packages/dd-trace/src/opentracing/tracer.js +9 -6
- package/packages/dd-trace/src/payload-tagging/index.js +1 -1
- package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
- package/packages/dd-trace/src/pkg.js +1 -1
- package/packages/dd-trace/src/plugins/ci_plugin.js +62 -10
- package/packages/dd-trace/src/plugins/consumer.js +2 -2
- package/packages/dd-trace/src/plugins/inbound.js +5 -1
- package/packages/dd-trace/src/plugins/index.js +1 -1
- package/packages/dd-trace/src/plugins/outbound.js +4 -5
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/producer.js +2 -2
- package/packages/dd-trace/src/plugins/storage.js +2 -2
- package/packages/dd-trace/src/plugins/util/ci.js +23 -15
- package/packages/dd-trace/src/plugins/util/git.js +165 -11
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
- package/packages/dd-trace/src/plugins/util/llm.js +27 -10
- package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
- package/packages/dd-trace/src/plugins/util/test.js +311 -48
- package/packages/dd-trace/src/plugins/util/url.js +1 -1
- package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +12 -3
- package/packages/dd-trace/src/plugins/util/web.js +5 -4
- package/packages/dd-trace/src/priority_sampler.js +22 -22
- package/packages/dd-trace/src/profiling/config.js +44 -8
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +5 -5
- package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +37 -2
- package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
- package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
- package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
- package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
- package/packages/dd-trace/src/profiling/tagger.js +3 -5
- package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
- package/packages/dd-trace/src/proxy.js +7 -13
- package/packages/dd-trace/src/random_sampler.js +40 -0
- package/packages/dd-trace/src/rate_limiter.js +4 -4
- package/packages/dd-trace/src/remote_config/index.js +3 -7
- package/packages/dd-trace/src/remote_config/manager.js +25 -13
- package/packages/dd-trace/src/require-package-json.js +1 -1
- package/packages/dd-trace/src/ritm.js +4 -4
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
- package/packages/dd-trace/src/sampler.js +33 -4
- package/packages/dd-trace/src/sampling_rule.js +12 -3
- package/packages/dd-trace/src/scope.js +1 -1
- package/packages/dd-trace/src/serverless.js +0 -48
- package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +8 -0
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
- package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +4 -0
- package/packages/dd-trace/src/span_processor.js +3 -3
- package/packages/dd-trace/src/span_sampler.js +4 -1
- package/packages/dd-trace/src/standalone/tracesource.js +1 -1
- package/packages/dd-trace/src/startup-log.js +2 -2
- package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
- package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
- package/packages/dd-trace/src/telemetry/metrics.js +10 -5
- package/packages/dd-trace/src/telemetry/send-data.js +1 -1
- package/packages/dd-trace/src/telemetry/telemetry.js +23 -24
- package/packages/dd-trace/src/util.js +1 -1
- package/version.js +1 -0
- package/packages/datadog-instrumentations/src/paperplane.js +0 -77
- package/packages/datadog-plugin-paperplane/src/index.js +0 -25
- package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
- package/packages/datadog-plugin-paperplane/src/server.js +0 -24
|
@@ -8,6 +8,7 @@ const {
|
|
|
8
8
|
PLAYWRIGHT_WORKER_TRACE_PAYLOAD_CODE
|
|
9
9
|
} = require('../../dd-trace/src/plugins/util/test')
|
|
10
10
|
const log = require('../../dd-trace/src/log')
|
|
11
|
+
const { DD_MAJOR } = require('../../../version')
|
|
11
12
|
|
|
12
13
|
const testStartCh = channel('ci:playwright:test:start')
|
|
13
14
|
const testFinishCh = channel('ci:playwright:test:finish')
|
|
@@ -18,6 +19,8 @@ const testSessionFinishCh = channel('ci:playwright:session:finish')
|
|
|
18
19
|
const libraryConfigurationCh = channel('ci:playwright:library-configuration')
|
|
19
20
|
const knownTestsCh = channel('ci:playwright:known-tests')
|
|
20
21
|
const testManagementTestsCh = channel('ci:playwright:test-management-tests')
|
|
22
|
+
const impactedTestsCh = channel('ci:playwright:modified-tests')
|
|
23
|
+
const isModifiedCh = channel('ci:playwright:test:is-modified')
|
|
21
24
|
|
|
22
25
|
const testSuiteStartCh = channel('ci:playwright:test-suite:start')
|
|
23
26
|
const testSuiteFinishCh = channel('ci:playwright:test-suite:finish')
|
|
@@ -25,8 +28,8 @@ const testSuiteFinishCh = channel('ci:playwright:test-suite:finish')
|
|
|
25
28
|
const workerReportCh = channel('ci:playwright:worker:report')
|
|
26
29
|
const testPageGotoCh = channel('ci:playwright:test:page-goto')
|
|
27
30
|
|
|
28
|
-
const
|
|
29
|
-
const
|
|
31
|
+
const testToCtx = new WeakMap()
|
|
32
|
+
const testSuiteToCtx = new Map()
|
|
30
33
|
const testSuiteToTestStatuses = new Map()
|
|
31
34
|
const testSuiteToErrors = new Map()
|
|
32
35
|
const testsToTestStatuses = new Map()
|
|
@@ -53,9 +56,11 @@ let knownTests = {}
|
|
|
53
56
|
let isTestManagementTestsEnabled = false
|
|
54
57
|
let testManagementAttemptToFixRetries = 0
|
|
55
58
|
let testManagementTests = {}
|
|
59
|
+
let isImpactedTestsEnabled = false
|
|
60
|
+
let modifiedTests = {}
|
|
56
61
|
const quarantinedOrDisabledTestsAttemptToFix = []
|
|
57
62
|
let rootDir = ''
|
|
58
|
-
const MINIMUM_SUPPORTED_VERSION_RANGE_EFD = '>=1.38.0'
|
|
63
|
+
const MINIMUM_SUPPORTED_VERSION_RANGE_EFD = '>=1.38.0' // TODO: remove this once we drop support for v5
|
|
59
64
|
|
|
60
65
|
function getTestProperties (test) {
|
|
61
66
|
const testName = getTestFullname(test)
|
|
@@ -104,11 +109,7 @@ function deepCloneSuite (suite, filterTest, tags = []) {
|
|
|
104
109
|
|
|
105
110
|
function getTestsBySuiteFromTestGroups (testGroups) {
|
|
106
111
|
return testGroups.reduce((acc, { requireFile, tests }) => {
|
|
107
|
-
|
|
108
|
-
acc[requireFile] = acc[requireFile].concat(tests)
|
|
109
|
-
} else {
|
|
110
|
-
acc[requireFile] = tests
|
|
111
|
-
}
|
|
112
|
+
acc[requireFile] = acc[requireFile] ? acc[requireFile].concat(tests) : tests
|
|
112
113
|
return acc
|
|
113
114
|
}, {})
|
|
114
115
|
}
|
|
@@ -132,10 +133,10 @@ function getTestsBySuiteFromTestsById (testsById) {
|
|
|
132
133
|
function getPlaywrightConfig (playwrightRunner) {
|
|
133
134
|
try {
|
|
134
135
|
return playwrightRunner._configLoader.fullConfig()
|
|
135
|
-
} catch
|
|
136
|
+
} catch {
|
|
136
137
|
try {
|
|
137
138
|
return playwrightRunner._loader.fullConfig()
|
|
138
|
-
} catch
|
|
139
|
+
} catch {
|
|
139
140
|
return playwrightRunner._config || {}
|
|
140
141
|
}
|
|
141
142
|
}
|
|
@@ -235,14 +236,14 @@ function getTestByTestId (dispatcher, testId) {
|
|
|
235
236
|
}
|
|
236
237
|
}
|
|
237
238
|
|
|
238
|
-
function getChannelPromise (channelToPublishTo) {
|
|
239
|
+
function getChannelPromise (channelToPublishTo, params) {
|
|
239
240
|
return new Promise(resolve => {
|
|
240
241
|
testSessionAsyncResource.runInAsyncScope(() => {
|
|
241
|
-
channelToPublishTo.publish({ onDone: resolve })
|
|
242
|
+
channelToPublishTo.publish({ onDone: resolve, ...params })
|
|
242
243
|
})
|
|
243
244
|
})
|
|
244
245
|
}
|
|
245
|
-
|
|
246
|
+
|
|
246
247
|
// Inspired by https://github.com/microsoft/playwright/blob/2b77ed4d7aafa85a600caa0b0d101b72c8437eeb/packages/playwright/src/reporters/base.ts#L293
|
|
247
248
|
// We can't use test.outcome() directly because it's set on follow up handlers:
|
|
248
249
|
// our `testEndHandler` is called before the outcome is set.
|
|
@@ -279,11 +280,9 @@ function testBeginHandler (test, browserName, isMainProcess) {
|
|
|
279
280
|
|
|
280
281
|
if (isNewTestSuite) {
|
|
281
282
|
startedSuites.push(testSuiteAbsolutePath)
|
|
282
|
-
const
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
testSuiteStartCh.publish(testSuiteAbsolutePath)
|
|
286
|
-
})
|
|
283
|
+
const testSuiteCtx = { testSuiteAbsolutePath }
|
|
284
|
+
testSuiteToCtx.set(testSuiteAbsolutePath, testSuiteCtx)
|
|
285
|
+
testSuiteStartCh.runStores(testSuiteCtx, () => {})
|
|
287
286
|
}
|
|
288
287
|
|
|
289
288
|
// We disable retries by default if attemptToFix is true
|
|
@@ -293,19 +292,17 @@ function testBeginHandler (test, browserName, isMainProcess) {
|
|
|
293
292
|
|
|
294
293
|
// this handles tests that do not go through the worker process (because they're skipped)
|
|
295
294
|
if (isMainProcess) {
|
|
296
|
-
const testAsyncResource = new AsyncResource('bound-anonymous-fn')
|
|
297
|
-
testToAr.set(test, testAsyncResource)
|
|
298
295
|
const testName = getTestFullname(test)
|
|
296
|
+
const testCtx = {
|
|
297
|
+
testName,
|
|
298
|
+
testSuiteAbsolutePath,
|
|
299
|
+
testSourceLine,
|
|
300
|
+
browserName,
|
|
301
|
+
isDisabled: test._ddIsDisabled
|
|
302
|
+
}
|
|
303
|
+
testToCtx.set(test, testCtx)
|
|
299
304
|
|
|
300
|
-
|
|
301
|
-
testStartCh.publish({
|
|
302
|
-
testName,
|
|
303
|
-
testSuiteAbsolutePath,
|
|
304
|
-
testSourceLine,
|
|
305
|
-
browserName,
|
|
306
|
-
isDisabled: test._ddIsDisabled
|
|
307
|
-
})
|
|
308
|
-
})
|
|
305
|
+
testStartCh.runStores(testCtx, () => {})
|
|
309
306
|
}
|
|
310
307
|
}
|
|
311
308
|
|
|
@@ -337,7 +334,7 @@ function testEndHandler (test, annotations, testStatus, error, isTimeout, isMain
|
|
|
337
334
|
}
|
|
338
335
|
|
|
339
336
|
if (testStatuses.length === testManagementAttemptToFixRetries + 1) {
|
|
340
|
-
if (testStatuses.
|
|
337
|
+
if (testStatuses.includes('fail')) {
|
|
341
338
|
test._ddHasFailedAttemptToFixRetries = true
|
|
342
339
|
}
|
|
343
340
|
if (testStatuses.every(status => status === 'fail')) {
|
|
@@ -349,29 +346,29 @@ function testEndHandler (test, annotations, testStatus, error, isTimeout, isMain
|
|
|
349
346
|
|
|
350
347
|
// this handles tests that do not go through the worker process (because they're skipped)
|
|
351
348
|
if (isMainProcess) {
|
|
352
|
-
const testResult = results
|
|
353
|
-
const
|
|
349
|
+
const testResult = results.at(-1)
|
|
350
|
+
const testCtx = testToCtx.get(test)
|
|
354
351
|
const isAtrRetry = testResult?.retry > 0 &&
|
|
355
352
|
isFlakyTestRetriesEnabled &&
|
|
356
353
|
!test._ddIsAttemptToFix &&
|
|
357
354
|
!test._ddIsEfdRetry
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
355
|
+
testFinishCh.publish({
|
|
356
|
+
testStatus,
|
|
357
|
+
steps: testResult?.steps || [],
|
|
358
|
+
isRetry: testResult?.retry > 0,
|
|
359
|
+
error,
|
|
360
|
+
extraTags: annotationTags,
|
|
361
|
+
isNew: test._ddIsNew,
|
|
362
|
+
isAttemptToFix: test._ddIsAttemptToFix,
|
|
363
|
+
isAttemptToFixRetry: test._ddIsAttemptToFixRetry,
|
|
364
|
+
isQuarantined: test._ddIsQuarantined,
|
|
365
|
+
isEfdRetry: test._ddIsEfdRetry,
|
|
366
|
+
hasFailedAllRetries: test._ddHasFailedAllRetries,
|
|
367
|
+
hasPassedAttemptToFixRetries: test._ddHasPassedAttemptToFixRetries,
|
|
368
|
+
hasFailedAttemptToFixRetries: test._ddHasFailedAttemptToFixRetries,
|
|
369
|
+
isAtrRetry,
|
|
370
|
+
isModified: test._ddIsModified,
|
|
371
|
+
...testCtx.currentStore
|
|
375
372
|
})
|
|
376
373
|
}
|
|
377
374
|
|
|
@@ -394,17 +391,15 @@ function testEndHandler (test, annotations, testStatus, error, isTimeout, isMain
|
|
|
394
391
|
if (!remainingTestsByFile[testSuiteAbsolutePath].length) {
|
|
395
392
|
const testStatuses = testSuiteToTestStatuses.get(testSuiteAbsolutePath)
|
|
396
393
|
let testSuiteStatus = 'pass'
|
|
397
|
-
if (testStatuses.
|
|
394
|
+
if (testStatuses.includes('fail')) {
|
|
398
395
|
testSuiteStatus = 'fail'
|
|
399
396
|
} else if (testStatuses.every(status => status === 'skip')) {
|
|
400
397
|
testSuiteStatus = 'skip'
|
|
401
398
|
}
|
|
402
399
|
|
|
403
400
|
const suiteError = getTestSuiteError(testSuiteAbsolutePath)
|
|
404
|
-
const
|
|
405
|
-
|
|
406
|
-
testSuiteFinishCh.publish({ status: testSuiteStatus, error: suiteError })
|
|
407
|
-
})
|
|
401
|
+
const testSuiteCtx = testSuiteToCtx.get(testSuiteAbsolutePath)
|
|
402
|
+
testSuiteFinishCh.publish({ status: testSuiteStatus, error: suiteError, ...testSuiteCtx.currentStore })
|
|
408
403
|
}
|
|
409
404
|
}
|
|
410
405
|
|
|
@@ -420,7 +415,7 @@ function dispatcherRunWrapperNew (run) {
|
|
|
420
415
|
if (!this._allTests) {
|
|
421
416
|
// Removed in https://github.com/microsoft/playwright/commit/1e52c37b254a441cccf332520f60225a5acc14c7
|
|
422
417
|
// Not available from >=1.44.0
|
|
423
|
-
this._ddAllTests = testGroups.
|
|
418
|
+
this._ddAllTests = testGroups.flatMap(g => g.tests)
|
|
424
419
|
}
|
|
425
420
|
remainingTestsByFile = getTestsBySuiteFromTestGroups(arguments[0])
|
|
426
421
|
return run.apply(this, arguments)
|
|
@@ -442,7 +437,7 @@ function dispatcherHook (dispatcherExport) {
|
|
|
442
437
|
const { test } = dispatcher._testById.get(params.testId)
|
|
443
438
|
|
|
444
439
|
const { results } = test
|
|
445
|
-
const testResult = results
|
|
440
|
+
const testResult = results.at(-1)
|
|
446
441
|
|
|
447
442
|
const isTimeout = testResult.status === 'timedOut'
|
|
448
443
|
testEndHandler(
|
|
@@ -478,7 +473,7 @@ function dispatcherHookNew (dispatcherExport, runWrapper) {
|
|
|
478
473
|
|
|
479
474
|
const isTimeout = status === 'timedOut'
|
|
480
475
|
testEndHandler(test, annotations, STATUS_TO_TEST_STATUS[status], errors && errors[0], isTimeout, false)
|
|
481
|
-
const testResult = test.results
|
|
476
|
+
const testResult = test.results.at(-1)
|
|
482
477
|
const isAtrRetry = testResult?.retry > 0 &&
|
|
483
478
|
isFlakyTestRetriesEnabled &&
|
|
484
479
|
!test._ddIsAttemptToFix &&
|
|
@@ -497,7 +492,8 @@ function dispatcherHookNew (dispatcherExport, runWrapper) {
|
|
|
497
492
|
_ddHasFailedAllRetries: test._ddHasFailedAllRetries,
|
|
498
493
|
_ddHasPassedAttemptToFixRetries: test._ddHasPassedAttemptToFixRetries,
|
|
499
494
|
_ddHasFailedAttemptToFixRetries: test._ddHasFailedAttemptToFixRetries,
|
|
500
|
-
_ddIsAtrRetry: isAtrRetry
|
|
495
|
+
_ddIsAtrRetry: isAtrRetry,
|
|
496
|
+
_ddIsModified: test._ddIsModified
|
|
501
497
|
}
|
|
502
498
|
})
|
|
503
499
|
})
|
|
@@ -529,22 +525,24 @@ function runnerHook (runnerExport, playwrightVersion) {
|
|
|
529
525
|
flakyTestRetriesCount = libraryConfig.flakyTestRetriesCount
|
|
530
526
|
isTestManagementTestsEnabled = libraryConfig.isTestManagementEnabled
|
|
531
527
|
testManagementAttemptToFixRetries = libraryConfig.testManagementAttemptToFixRetries
|
|
528
|
+
isImpactedTestsEnabled = libraryConfig.isImpactedTestsEnabled
|
|
532
529
|
}
|
|
533
530
|
} catch (e) {
|
|
534
531
|
isEarlyFlakeDetectionEnabled = false
|
|
535
532
|
isKnownTestsEnabled = false
|
|
536
533
|
isTestManagementTestsEnabled = false
|
|
534
|
+
isImpactedTestsEnabled = false
|
|
537
535
|
log.error('Playwright session start error', e)
|
|
538
536
|
}
|
|
539
537
|
|
|
540
538
|
if (isKnownTestsEnabled && satisfies(playwrightVersion, MINIMUM_SUPPORTED_VERSION_RANGE_EFD)) {
|
|
541
539
|
try {
|
|
542
540
|
const { err, knownTests: receivedKnownTests } = await getChannelPromise(knownTestsCh)
|
|
543
|
-
if (
|
|
544
|
-
knownTests = receivedKnownTests
|
|
545
|
-
} else {
|
|
541
|
+
if (err) {
|
|
546
542
|
isEarlyFlakeDetectionEnabled = false
|
|
547
543
|
isKnownTestsEnabled = false
|
|
544
|
+
} else {
|
|
545
|
+
knownTests = receivedKnownTests
|
|
548
546
|
}
|
|
549
547
|
} catch (err) {
|
|
550
548
|
isEarlyFlakeDetectionEnabled = false
|
|
@@ -556,10 +554,10 @@ function runnerHook (runnerExport, playwrightVersion) {
|
|
|
556
554
|
if (isTestManagementTestsEnabled && satisfies(playwrightVersion, MINIMUM_SUPPORTED_VERSION_RANGE_EFD)) {
|
|
557
555
|
try {
|
|
558
556
|
const { err, testManagementTests: receivedTestManagementTests } = await getChannelPromise(testManagementTestsCh)
|
|
559
|
-
if (
|
|
560
|
-
testManagementTests = receivedTestManagementTests
|
|
561
|
-
} else {
|
|
557
|
+
if (err) {
|
|
562
558
|
isTestManagementTestsEnabled = false
|
|
559
|
+
} else {
|
|
560
|
+
testManagementTests = receivedTestManagementTests
|
|
563
561
|
}
|
|
564
562
|
} catch (err) {
|
|
565
563
|
isTestManagementTestsEnabled = false
|
|
@@ -567,6 +565,20 @@ function runnerHook (runnerExport, playwrightVersion) {
|
|
|
567
565
|
}
|
|
568
566
|
}
|
|
569
567
|
|
|
568
|
+
if (isImpactedTestsEnabled && satisfies(playwrightVersion, MINIMUM_SUPPORTED_VERSION_RANGE_EFD)) {
|
|
569
|
+
try {
|
|
570
|
+
const { err, modifiedTests: receivedModifiedTests } = await getChannelPromise(impactedTestsCh)
|
|
571
|
+
if (err) {
|
|
572
|
+
isImpactedTestsEnabled = false
|
|
573
|
+
} else {
|
|
574
|
+
modifiedTests = receivedModifiedTests
|
|
575
|
+
}
|
|
576
|
+
} catch (err) {
|
|
577
|
+
isImpactedTestsEnabled = false
|
|
578
|
+
log.error('Playwright impacted tests error', err)
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
|
|
570
582
|
const projects = getProjectsFromRunner(this)
|
|
571
583
|
|
|
572
584
|
const shouldSetRetries = isFlakyTestRetriesEnabled &&
|
|
@@ -610,7 +622,7 @@ function runnerHook (runnerExport, playwrightVersion) {
|
|
|
610
622
|
totalAttemptToFixFailedTestCount += testStatuses.filter(status => status === 'fail').length
|
|
611
623
|
}
|
|
612
624
|
|
|
613
|
-
if (totalFailedTestCount === totalAttemptToFixFailedTestCount) {
|
|
625
|
+
if (totalFailedTestCount > 0 && totalFailedTestCount === totalAttemptToFixFailedTestCount) {
|
|
614
626
|
runAllTestsReturn = 'passed'
|
|
615
627
|
}
|
|
616
628
|
}
|
|
@@ -639,37 +651,38 @@ function runnerHook (runnerExport, playwrightVersion) {
|
|
|
639
651
|
return runnerExport
|
|
640
652
|
}
|
|
641
653
|
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
654
|
+
if (DD_MAJOR < 6) { // <1.38.0 is only supported up to version 5
|
|
655
|
+
addHook({
|
|
656
|
+
name: '@playwright/test',
|
|
657
|
+
file: 'lib/runner.js',
|
|
658
|
+
versions: ['>=1.18.0 <=1.30.0']
|
|
659
|
+
}, runnerHook)
|
|
660
|
+
|
|
661
|
+
addHook({
|
|
662
|
+
name: '@playwright/test',
|
|
663
|
+
file: 'lib/dispatcher.js',
|
|
664
|
+
versions: ['>=1.18.0 <1.30.0']
|
|
665
|
+
}, dispatcherHook)
|
|
666
|
+
|
|
667
|
+
addHook({
|
|
668
|
+
name: '@playwright/test',
|
|
669
|
+
file: 'lib/dispatcher.js',
|
|
670
|
+
versions: ['>=1.30.0 <1.31.0']
|
|
671
|
+
}, (dispatcher) => dispatcherHookNew(dispatcher, dispatcherRunWrapper))
|
|
672
|
+
|
|
673
|
+
addHook({
|
|
674
|
+
name: '@playwright/test',
|
|
675
|
+
file: 'lib/runner/dispatcher.js',
|
|
676
|
+
versions: ['>=1.31.0 <1.38.0']
|
|
677
|
+
}, (dispatcher) => dispatcherHookNew(dispatcher, dispatcherRunWrapperNew))
|
|
678
|
+
|
|
679
|
+
addHook({
|
|
680
|
+
name: '@playwright/test',
|
|
681
|
+
file: 'lib/runner/runner.js',
|
|
682
|
+
versions: ['>=1.31.0 <1.38.0']
|
|
683
|
+
}, runnerHook)
|
|
684
|
+
}
|
|
671
685
|
|
|
672
|
-
// From >=1.38.0
|
|
673
686
|
addHook({
|
|
674
687
|
name: 'playwright',
|
|
675
688
|
file: 'lib/runner/runner.js',
|
|
@@ -682,11 +695,10 @@ addHook({
|
|
|
682
695
|
versions: ['>=1.38.0']
|
|
683
696
|
}, (dispatcher) => dispatcherHookNew(dispatcher, dispatcherRunWrapperNew))
|
|
684
697
|
|
|
685
|
-
// Hook used for early flake detection. EFD only works from >=1.38.0
|
|
686
698
|
addHook({
|
|
687
699
|
name: 'playwright',
|
|
688
700
|
file: 'lib/common/suiteUtils.js',
|
|
689
|
-
versions: [
|
|
701
|
+
versions: ['>=1.38.0']
|
|
690
702
|
}, suiteUtilsPackage => {
|
|
691
703
|
// We grab `applyRepeatEachIndex` to use it later
|
|
692
704
|
// `applyRepeatEachIndex` needs to be applied to a cloned suite
|
|
@@ -694,16 +706,15 @@ addHook({
|
|
|
694
706
|
return suiteUtilsPackage
|
|
695
707
|
})
|
|
696
708
|
|
|
697
|
-
// Hook used for early flake detection. EFD only works from >=1.38.0
|
|
698
709
|
addHook({
|
|
699
710
|
name: 'playwright',
|
|
700
711
|
file: 'lib/runner/loadUtils.js',
|
|
701
|
-
versions: [
|
|
712
|
+
versions: ['>=1.38.0']
|
|
702
713
|
}, (loadUtilsPackage) => {
|
|
703
714
|
const oldCreateRootSuite = loadUtilsPackage.createRootSuite
|
|
704
715
|
|
|
705
716
|
async function newCreateRootSuite () {
|
|
706
|
-
if (!isKnownTestsEnabled && !isTestManagementTestsEnabled) {
|
|
717
|
+
if (!isKnownTestsEnabled && !isTestManagementTestsEnabled && !isImpactedTestsEnabled) {
|
|
707
718
|
return oldCreateRootSuite.apply(this, arguments)
|
|
708
719
|
}
|
|
709
720
|
const rootSuite = await oldCreateRootSuite.apply(this, arguments)
|
|
@@ -742,13 +753,41 @@ addHook({
|
|
|
742
753
|
}
|
|
743
754
|
}
|
|
744
755
|
|
|
756
|
+
if (isImpactedTestsEnabled) {
|
|
757
|
+
for (const test of allTests) {
|
|
758
|
+
const isNew = isKnownTestsEnabled && isNewTest(test)
|
|
759
|
+
const { isModified } = await getChannelPromise(isModifiedCh, {
|
|
760
|
+
filePath: test._requireFile,
|
|
761
|
+
modifiedTests
|
|
762
|
+
})
|
|
763
|
+
if (isModified) {
|
|
764
|
+
test._ddIsModified = true
|
|
765
|
+
}
|
|
766
|
+
if (isEarlyFlakeDetectionEnabled && test.expectedStatus !== 'skipped') {
|
|
767
|
+
const fileSuite = getSuiteType(test, 'file')
|
|
768
|
+
const projectSuite = getSuiteType(test, 'project')
|
|
769
|
+
// If something change in the file, all tests in the file are impacted
|
|
770
|
+
const isModifiedTest = () => isModified
|
|
771
|
+
for (let repeatEachIndex = 1; repeatEachIndex <= earlyFlakeDetectionNumRetries; repeatEachIndex++) {
|
|
772
|
+
const copyFileSuite = deepCloneSuite(fileSuite, isModifiedTest, [
|
|
773
|
+
isNew && '_ddIsNew',
|
|
774
|
+
'_ddIsModified',
|
|
775
|
+
'_ddIsEfdRetry'
|
|
776
|
+
])
|
|
777
|
+
applyRepeatEachIndex(projectSuite._fullProject, copyFileSuite, repeatEachIndex + 1)
|
|
778
|
+
projectSuite._addSuite(copyFileSuite)
|
|
779
|
+
}
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
|
|
745
784
|
if (isKnownTestsEnabled) {
|
|
746
785
|
const newTests = allTests.filter(isNewTest)
|
|
747
786
|
|
|
748
787
|
for (const newTest of newTests) {
|
|
749
788
|
// No need to filter out attempt to fix tests here because attempt to fix tests are never new
|
|
750
789
|
newTest._ddIsNew = true
|
|
751
|
-
if (isEarlyFlakeDetectionEnabled && newTest.expectedStatus !== 'skipped') {
|
|
790
|
+
if (isEarlyFlakeDetectionEnabled && newTest.expectedStatus !== 'skipped' && !newTest._ddIsModified) {
|
|
752
791
|
const fileSuite = getSuiteType(newTest, 'file')
|
|
753
792
|
const projectSuite = getSuiteType(newTest, 'project')
|
|
754
793
|
for (let repeatEachIndex = 1; repeatEachIndex <= earlyFlakeDetectionNumRetries; repeatEachIndex++) {
|
|
@@ -821,11 +860,7 @@ addHook({
|
|
|
821
860
|
try {
|
|
822
861
|
if (page) {
|
|
823
862
|
const isRumActive = await page.evaluate(() => {
|
|
824
|
-
|
|
825
|
-
return !!window.DD_RUM.getInternalContext()
|
|
826
|
-
} else {
|
|
827
|
-
return false
|
|
828
|
-
}
|
|
863
|
+
return window.DD_RUM && window.DD_RUM.getInternalContext ? !!window.DD_RUM.getInternalContext() : false
|
|
829
864
|
})
|
|
830
865
|
|
|
831
866
|
if (isRumActive) {
|
|
@@ -835,7 +870,7 @@ addHook({
|
|
|
835
870
|
})
|
|
836
871
|
}
|
|
837
872
|
}
|
|
838
|
-
} catch
|
|
873
|
+
} catch {
|
|
839
874
|
// ignore errors such as redirects, context destroyed, etc
|
|
840
875
|
}
|
|
841
876
|
|
|
@@ -873,17 +908,16 @@ addHook({
|
|
|
873
908
|
// If test events are created in the worker process I need to stop creating it in the main process
|
|
874
909
|
// Probably yet another test worker exporter is needed in addition to the ones for mocha, jest and cucumber
|
|
875
910
|
// it's probably hard to tell that's a playwright worker though, as I don't think there is a specific env variable
|
|
876
|
-
const
|
|
911
|
+
const testCtx = {
|
|
912
|
+
testName,
|
|
913
|
+
testSuiteAbsolutePath,
|
|
914
|
+
testSourceLine,
|
|
915
|
+
browserName
|
|
916
|
+
}
|
|
917
|
+
testToCtx.set(test, testCtx)
|
|
877
918
|
// TODO - In the future we may need to implement a mechanism to send test properties
|
|
878
919
|
// to the worker process before _runTest is called
|
|
879
|
-
|
|
880
|
-
testStartCh.publish({
|
|
881
|
-
testName,
|
|
882
|
-
testSuiteAbsolutePath,
|
|
883
|
-
testSourceLine,
|
|
884
|
-
browserName
|
|
885
|
-
})
|
|
886
|
-
|
|
920
|
+
testStartCh.runStores(testCtx, () => {
|
|
887
921
|
let existAfterEachHook = false
|
|
888
922
|
|
|
889
923
|
// We try to find an existing afterEach hook with _ddHook to avoid adding a new one
|
|
@@ -924,7 +958,7 @@ addHook({
|
|
|
924
958
|
}
|
|
925
959
|
}
|
|
926
960
|
}
|
|
927
|
-
} catch
|
|
961
|
+
} catch {
|
|
928
962
|
// ignore errors
|
|
929
963
|
}
|
|
930
964
|
},
|
|
@@ -976,25 +1010,25 @@ addHook({
|
|
|
976
1010
|
// Wait for the properties to be received
|
|
977
1011
|
await ddPropertiesPromise
|
|
978
1012
|
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
1013
|
+
testFinishCh.publish({
|
|
1014
|
+
testStatus: STATUS_TO_TEST_STATUS[status],
|
|
1015
|
+
steps: steps.filter(step => step.testId === testId),
|
|
1016
|
+
error,
|
|
1017
|
+
extraTags: annotationTags,
|
|
1018
|
+
isNew: test._ddIsNew,
|
|
1019
|
+
isRetry: retry > 0,
|
|
1020
|
+
isEfdRetry: test._ddIsEfdRetry,
|
|
1021
|
+
isAttemptToFix: test._ddIsAttemptToFix,
|
|
1022
|
+
isDisabled: test._ddIsDisabled,
|
|
1023
|
+
isQuarantined: test._ddIsQuarantined,
|
|
1024
|
+
isAttemptToFixRetry: test._ddIsAttemptToFixRetry,
|
|
1025
|
+
hasFailedAllRetries: test._ddHasFailedAllRetries,
|
|
1026
|
+
hasPassedAttemptToFixRetries: test._ddHasPassedAttemptToFixRetries,
|
|
1027
|
+
hasFailedAttemptToFixRetries: test._ddHasFailedAttemptToFixRetries,
|
|
1028
|
+
isAtrRetry: test._ddIsAtrRetry,
|
|
1029
|
+
isModified: test._ddIsModified,
|
|
1030
|
+
onDone,
|
|
1031
|
+
...testCtx.currentStore
|
|
998
1032
|
})
|
|
999
1033
|
|
|
1000
1034
|
await flushPromise
|
|
@@ -47,7 +47,7 @@ function wrapCommandQueueClass (cls) {
|
|
|
47
47
|
if (parsed) {
|
|
48
48
|
this._url = { host: parsed.hostname, port: +parsed.port || 6379 }
|
|
49
49
|
}
|
|
50
|
-
} catch
|
|
50
|
+
} catch {
|
|
51
51
|
// ignore
|
|
52
52
|
}
|
|
53
53
|
}
|
|
@@ -130,8 +130,8 @@ addHook({ name: 'redis', versions: ['>=0.12 <2.6'] }, redis => {
|
|
|
130
130
|
if (typeof callback === 'function') {
|
|
131
131
|
const cb = callbackResource.bind(callback)
|
|
132
132
|
arguments[2] = asyncResource.bind(wrapCallback(finishCh, errorCh, cb))
|
|
133
|
-
} else if (Array.isArray(args) && typeof args
|
|
134
|
-
const cb = callbackResource.bind(args
|
|
133
|
+
} else if (Array.isArray(args) && typeof args.at(-1) === 'function') {
|
|
134
|
+
const cb = callbackResource.bind(args.at(-1))
|
|
135
135
|
args[args.length - 1] = asyncResource.bind(wrapCallback(finishCh, errorCh, cb))
|
|
136
136
|
} else {
|
|
137
137
|
arguments[2] = asyncResource.bind(wrapCallback(finishCh, errorCh))
|
|
@@ -20,8 +20,8 @@ function wrapSetupRequest (setupRequest) {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
function wrapMethod (method) {
|
|
23
|
-
return function (path) {
|
|
24
|
-
const middleware = wrapMiddleware(
|
|
23
|
+
return function (path, ...rest) {
|
|
24
|
+
const middleware = wrapMiddleware(rest)
|
|
25
25
|
|
|
26
26
|
return method.apply(this, [path].concat(middleware))
|
|
27
27
|
}
|