Skip to content

[SVLS-7168] Create tests for GCP PubSub Push Subscriptions Plugin #6414

Merged
nina9753 merged 13 commits intonina.rei/SVLS-7168/gcp-pubsub-synthetic-spanfrom
nina.rei/SVLS-7168/gcp-push-pubsub-plugin-test
Dec 12, 2025
Merged

[SVLS-7168] Create tests for GCP PubSub Push Subscriptions Plugin #6414
nina9753 merged 13 commits intonina.rei/SVLS-7168/gcp-pubsub-synthetic-spanfrom
nina.rei/SVLS-7168/gcp-push-pubsub-plugin-test

Conversation

@nina9753
Copy link
Copy Markdown
Contributor

@nina9753 nina9753 commented Sep 10, 2025

What does this PR do?

Creates New Test File: pubsub-push-subscription.spec.js in relation to the changes and new push subscription plugin created in #6260 #6782 #6415
New Tests in pubsub-push-subscription.spec.js:

Should create BOTH pubsub.delivery span AND HTTP span in same trace

  • Verifies dual-span creation (HTTP + Pub/Sub delivery)
  • Validates parent-child relationship (HTTP span is parent)
  • Confirms active span in handler is pubsub.delivery (not HTTP)
  • Checks all required metadata on both spans

Should propagate distributed trace context from producer to push delivery

  • Tests Datadog trace context propagation via headers
  • Verifies span links for cross-trace correlation
  • Validates distributed tracing from producer to consumer

Should add batch metadata to delivery span

  • Tests batch size, index, and description tags
  • Validates batch request trace/span ID propagation
  • Confirms batch metrics are set correctly

Should set service name with -pubsub suffix

  • Verifies service name override (test → test-pubsub)
  • Validates _dd.base_service and _dd.serviceoverride.type tags

Should NOT create pubsub span for non-push-subscription requests

  • Confirms plugin only activates for Google User-Agent
  • Ensures normal HTTP requests are unaffected

Should NOT create pubsub span when missing required headers

  • Validates plugin requires x-goog-pubsub-message-id header
  • Ensures graceful degradation when headers are missing

Updated Test in index.spec.js :

  • Updated expectSpanWithDefaults helper to handle consumer spans correctly
  • Fixed resource name expectations for consumer spans (Message from topic-name)
  • Added flushMinSpans: 1 to ensure spans are exported immediately
  • Improved test stability and timing

Motivation

Plugin Checklist

Additional Notes

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Sep 10, 2025

Overall package size

Self size: 13.67 MB
Deduped: 113.87 MB
No deduping: 128.89 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.7.0 | 35.02 MB | 35.02 MB | | @datadog/native-appsec | 10.3.0 | 20.73 MB | 20.74 MB | | @datadog/pprof | 5.12.0 | 11.19 MB | 11.57 MB | | @datadog/native-iast-taint-tracking | 4.1.0 | 9.01 MB | 9.02 MB | | @opentelemetry/resources | 1.30.1 | 557.67 kB | 7.71 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.5.4 | 2.95 MB | 5.83 MB | | @datadog/wasm-js-rewriter | 5.0.1 | 2.82 MB | 3.53 MB | | @datadog/native-metrics | 3.1.1 | 1.02 MB | 1.43 MB | | @opentelemetry/api-logs | 0.208.0 | 199.48 kB | 1.42 MB | | @opentelemetry/api | 1.9.0 | 1.22 MB | 1.22 MB | | jsonpath-plus | 10.3.0 | 617.18 kB | 1.08 MB | | import-in-the-middle | 1.15.0 | 127.66 kB | 856.24 kB | | lru-cache | 10.4.3 | 804.3 kB | 804.3 kB | | @datadog/openfeature-node-server | 0.2.0 | 118.51 kB | 437.19 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | source-map | 0.7.6 | 185.63 kB | 185.63 kB | | pprof-format | 2.2.1 | 163.06 kB | 163.06 kB | | @datadog/sketches-js | 2.1.1 | 109.9 kB | 109.9 kB | | @isaacs/ttlcache | 2.1.3 | 90.79 kB | 90.79 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 7.0.5 | 63.38 kB | 63.38 kB | | istanbul-lib-coverage | 3.2.2 | 34.37 kB | 34.37 kB | | rfdc | 1.4.1 | 27.15 kB | 27.15 kB | | dc-polyfill | 0.1.10 | 26.73 kB | 26.73 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | shell-quote | 1.8.3 | 23.74 kB | 23.74 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | semifies | 1.0.0 | 15.84 kB | 15.84 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | ttl-set | 1.0.0 | 4.61 kB | 9.69 kB | | mutexify | 1.4.0 | 5.71 kB | 8.74 kB | | path-to-regexp | 0.1.12 | 6.6 kB | 6.6 kB | | module-details-from-path | 1.0.4 | 3.96 kB | 3.96 kB | | escape-string-regexp | 5.0.0 | 3.66 kB | 3.66 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

@datadog-datadog-prod-us1

This comment has been minimized.

@nina9753 nina9753 changed the base branch from master to nina.rei/SVLS-7168/gcp-push-pubsub-plugin September 10, 2025 16:18
@pr-commenter
Copy link
Copy Markdown

pr-commenter Bot commented Sep 10, 2025

Benchmarks

Benchmark execution time: 2025-12-11 14:02:16

Comparing candidate commit 7b95109 in PR branch nina.rei/SVLS-7168/gcp-push-pubsub-plugin-test with baseline commit bb3de36 in branch nina.rei/SVLS-7168/gcp-pubsub-synthetic-span.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 289 metrics, 31 unstable metrics.

@codecov
Copy link
Copy Markdown

codecov Bot commented Sep 10, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 84.02%. Comparing base (bb3de36) to head (7b95109).
⚠️ Report is 1 commits behind head on nina.rei/SVLS-7168/gcp-pubsub-synthetic-span.

Additional details and impacted files
@@                               Coverage Diff                                @@
##           nina.rei/SVLS-7168/gcp-pubsub-synthetic-span    #6414      +/-   ##
================================================================================
- Coverage                                         84.05%   84.02%   -0.04%     
================================================================================
  Files                                               517      517              
  Lines                                             22378    22378              
================================================================================
- Hits                                              18809    18802       -7     
- Misses                                             3569     3576       +7     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@nina9753 nina9753 changed the base branch from nina.rei/SVLS-7168/gcp-push-pubsub-plugin to nina.rei/SVLS-7168/gcp-pubsub-batch-plugin October 29, 2025 16:58
@nina9753 nina9753 changed the base branch from nina.rei/SVLS-7168/gcp-pubsub-batch-plugin to nina.rei/SVLS-7168/gcp-pubsub-synthetic-span October 29, 2025 16:58
@nina9753 nina9753 force-pushed the nina.rei/SVLS-7168/gcp-pubsub-synthetic-span branch 2 times, most recently from 128343d to ee0b34e Compare October 29, 2025 20:53
@nina9753 nina9753 force-pushed the nina.rei/SVLS-7168/gcp-push-pubsub-plugin-test branch from 63d6e01 to 29054ab Compare October 29, 2025 20:56
@nina9753 nina9753 force-pushed the nina.rei/SVLS-7168/gcp-pubsub-synthetic-span branch 2 times, most recently from 6ec410a to c8815fe Compare October 30, 2025 14:29
@nina9753 nina9753 force-pushed the nina.rei/SVLS-7168/gcp-push-pubsub-plugin-test branch from 29054ab to 3c237f0 Compare October 30, 2025 14:42
@nina9753 nina9753 force-pushed the nina.rei/SVLS-7168/gcp-pubsub-synthetic-span branch from c8815fe to 929f281 Compare November 4, 2025 23:07
- Collect span links from messages 2-N (first becomes parent)
- Extract parent context from first message trace context
- Create pubsub.request span with span links metadata
- Inject batch metadata into all messages (_dd.pubsub_request.*, _dd.batch.*)
- Add 128-bit trace ID support (_dd.p.tid)
- Add operation tag for batched vs single requests
- Add _reconstructPubSubContext to extract pubsub.request span ID from headers
- Add span link to original trace context if different from pubsub.request
- Supports same-trace parenting for better trace continuity
…acting from headers

- HTTP plugin now checks if a delivery span is active in storage
- If found, uses delivery span as parent for http.request
- Ensures proper span hierarchy for push subscriptions
- Extract pubsub.request span ID from message attributes
- Add span link correlation tags
- Calculate delivery duration from publish start time
- Add batch size and index tags for batched messages
@nina9753 nina9753 force-pushed the nina.rei/SVLS-7168/gcp-pubsub-synthetic-span branch 2 times, most recently from 1ad601a to 601a630 Compare November 18, 2025 22:49
@nina9753 nina9753 force-pushed the nina.rei/SVLS-7168/gcp-pubsub-synthetic-span branch from 601a630 to 0371fac Compare November 19, 2025 21:02
@nina9753 nina9753 force-pushed the nina.rei/SVLS-7168/gcp-push-pubsub-plugin-test branch from 3c237f0 to b3688c4 Compare November 30, 2025 20:43
@nina9753 nina9753 force-pushed the nina.rei/SVLS-7168/gcp-push-pubsub-plugin-test branch from 6daa412 to 573b4f7 Compare December 1, 2025 16:10
}
})

appListener = server.listen(0, 'localhost', () => {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do these tests pass locally on your machine? E.g.

node packages/datadog-plugin-google-cloud-pubsub/test/pubsub-push-subscription.spec.js

Sometimes on macOS it can fail binding on localhost and we'll need to use 127.0.0.1.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes these test passed locally with PLUGINS=google-cloud-pubsub SPEC=index yarn test:plugins

@nina9753 nina9753 requested a review from tlhunter December 9, 2025 17:31
@tlhunter tlhunter requested a review from rochdev December 10, 2025 21:47
@nina9753 nina9753 merged commit 805f38e into nina.rei/SVLS-7168/gcp-pubsub-synthetic-span Dec 12, 2025
780 of 785 checks passed
@nina9753 nina9753 deleted the nina.rei/SVLS-7168/gcp-push-pubsub-plugin-test branch December 12, 2025 06:08
nina9753 added a commit that referenced this pull request Dec 12, 2025
* feat: add producer-side batch message handling with span linking

- Collect span links from messages 2-N (first becomes parent)
- Extract parent context from first message trace context
- Create pubsub.request span with span links metadata
- Inject batch metadata into all messages (_dd.pubsub_request.*, _dd.batch.*)
- Add 128-bit trace ID support (_dd.p.tid)
- Add operation tag for batched vs single requests

* feat: add ack context map and producer improvements for batching

- Add ack context map to preserve trace context across batched acknowledges
- Update producer to use batchSpan._startTime for accurate publish time
- Add explicit parent span support in client plugin
- Wrap Message.ack() to store context before batched gRPC acknowledge
- Update Subscription.emit to properly handle storage context
- Sync auto-load improvements from Branch 1

* fix: resolve linting errors in google-cloud-pubsub.js

* fix: remove trailing whitespace in client.js

* fix comments

* feat: add span linking from delivery span to pubsub.request

- Add _reconstructPubSubContext to extract pubsub.request span ID from headers
- Add span link to original trace context if different from pubsub.request
- Supports same-trace parenting for better trace continuity

* feat: check for pubsub.delivery span in AsyncLocalStorage before extracting from headers

- HTTP plugin now checks if a delivery span is active in storage
- If found, uses delivery span as parent for http.request
- Ensures proper span hierarchy for push subscriptions

* feat: add span linking and batch metadata to pull-based consumer

- Extract pubsub.request span ID from message attributes
- Add span link correlation tags
- Calculate delivery duration from publish start time
- Add batch size and index tags for batched messages

* feat: add comprehensive span linking for consumer and push subscriptions

- Add _reconstructPubSubRequestContext in consumer for proper span reparenting
- Reparent first message in batch to pubsub.request span
- Add comprehensive batch metadata and correlation tags
- Improve resource naming and service separation
- Add delivery duration calculation
- Update push subscription logging to warn level with better messages
- Add missing headers warning for troubleshooting

* Remove comments

* run npm lint

* fix test

* fix test

* fix test

* fix index.js test

* fix index.js test

* fix context error

* fix lint

* fix lint

* fix lint

* fix index.js test

* fix plugin

* add ctx

* test the index

* update consumer subscription bindstart

* update addhook  subscription

* add debug logs

* Fix consumer span context loss with WeakMap and add comprehensive debug logging

* Fix double finish

* Fix consumer span type: explicitly set _type='worker' after startSpan

* Fix: use span.setTag('span.type', 'worker') instead of span._type

* Debug: Add type in startSpan options and via setTag, improve logging

* Fix: Use runStores for _dispense and publish for remove with improved logging

* add debug logs

* Fix: Guarantee test harness loads instrumentation before requiring @google-cloud/pubsub

* update subscription

* update subscription

* test fix for index.spec.js timeout

* fix test logic

* fix linter

* fix linter

* remove comments

* feat: add producer-side batch message handling with span linking

- Collect span links from messages 2-N (first becomes parent)
- Extract parent context from first message trace context
- Create pubsub.request span with span links metadata
- Inject batch metadata into all messages (_dd.pubsub_request.*, _dd.batch.*)
- Add 128-bit trace ID support (_dd.p.tid)
- Add operation tag for batched vs single requests

* feat: add ack context map and producer improvements for batching

- Add ack context map to preserve trace context across batched acknowledges
- Update producer to use batchSpan._startTime for accurate publish time
- Add explicit parent span support in client plugin
- Wrap Message.ack() to store context before batched gRPC acknowledge
- Update Subscription.emit to properly handle storage context
- Sync auto-load improvements from Branch 1

* fix: resolve linting errors in google-cloud-pubsub.js

* fix: remove trailing whitespace in client.js

* fix comments

* update from review

* addional cleanup

* [SVLS-7168] Create tests for GCP PubSub Push Subscriptions Plugin  (#6414)

* feat: add producer-side batch message handling with span linking

- Collect span links from messages 2-N (first becomes parent)
- Extract parent context from first message trace context
- Create pubsub.request span with span links metadata
- Inject batch metadata into all messages (_dd.pubsub_request.*, _dd.batch.*)
- Add 128-bit trace ID support (_dd.p.tid)
- Add operation tag for batched vs single requests

* feat: add span linking from delivery span to pubsub.request

- Add _reconstructPubSubContext to extract pubsub.request span ID from headers
- Add span link to original trace context if different from pubsub.request
- Supports same-trace parenting for better trace continuity

* feat: check for pubsub.delivery span in AsyncLocalStorage before extracting from headers

- HTTP plugin now checks if a delivery span is active in storage
- If found, uses delivery span as parent for http.request
- Ensures proper span hierarchy for push subscriptions

* feat: add span linking and batch metadata to pull-based consumer

- Extract pubsub.request span ID from message attributes
- Add span link correlation tags
- Calculate delivery duration from publish start time
- Add batch size and index tags for batched messages

* remove comments

* new test file

* Fix push subscription test module resolution for CI

* Implement full HTTP+Pub/Sub integration tests

* run linter

* test other frameworks

* Fix push subscription tests
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants