Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PoC] Run integration tests locally #1140

Draft
wants to merge 16 commits into
base: main
Choose a base branch
from

Conversation

MrAlias
Copy link
Contributor

@MrAlias MrAlias commented Sep 30, 2024

Test runner

Adds a runner utility to run testing target applications with auto-instrumentation setup. This removes the need to have a kubernetes cluster, or even docker containers, to run our integration tests.

Example

$ sudo ./runner -bin ../e2e/autosdk/autosdk -log-level=info -out=test.json
{"time":"2024-09-30T07:47:10.620513125-07:00","level":"INFO","source":{"function":"go.opentelemetry.io/auto/internal/pkg/process.remoteAllocate.func1","file":"/home/tyler/go/src/go.opentelemetry.io/auto/internal/pkg/process/allocate.go","line":70},"msg":"Detaching from process","pid":1698111}
{"time":"2024-09-30T07:47:10.620603764-07:00","level":"INFO","source":{"function":"go.opentelemetry.io/auto.NewInstrumentation","file":"/home/tyler/go/src/go.opentelemetry.io/auto/instrumentation.go","line":113},"msg":"target process analysis completed","pid":1698111,"go_version":"1.23.1","dependencies":{"github.com/gogo/protobuf":"1.3.2","github.com/json-iterator/go":"1.1.12","github.com/modern-go/concurrent":"0.0.0-20180306012644-bacd9c7ef1dd","github.com/modern-go/reflect2":"1.0.2","go.opentelemetry.io/auto/sdk":"0.0.0-00010101000000-000000000000","go.opentelemetry.io/collector/pdata":"1.16.0","go.opentelemetry.io/otel":"1.30.0","go.opentelemetry.io/otel/trace":"1.30.0","go.uber.org/multierr":"1.11.0","golang.org/x/net":"0.26.0","golang.org/x/sys":"0.25.0","golang.org/x/text":"0.16.0","google.golang.org/genproto/googleapis/rpc":"0.0.0-20240604185151-ef581f913117","google.golang.org/grpc":"1.66.2","google.golang.org/protobuf":"1.34.2","std":"1.23.1"},"total_functions_found":8}
{"time":"2024-09-30T07:47:10.620923226-07:00","level":"INFO","source":{"function":"go.opentelemetry.io/auto/internal/pkg/instrumentation.(*Manager).load","file":"/home/tyler/go/src/go.opentelemetry.io/auto/internal/pkg/instrumentation/manager.go","line":324},"msg":"loading probe","name":{"SpanKind":3,"InstrumentedPkg":"google.golang.org/grpc"}}
{"time":"2024-09-30T07:47:10.94166247-07:00","level":"INFO","source":{"function":"go.opentelemetry.io/auto/internal/pkg/instrumentation.(*Manager).load","file":"/home/tyler/go/src/go.opentelemetry.io/auto/internal/pkg/instrumentation/manager.go","line":324},"msg":"loading probe","name":{"SpanKind":2,"InstrumentedPkg":"google.golang.org/grpc"}}
{"time":"2024-09-30T07:47:10.970407948-07:00","level":"INFO","source":{"function":"go.opentelemetry.io/auto/internal/pkg/instrumentation.(*Manager).load","file":"/home/tyler/go/src/go.opentelemetry.io/auto/internal/pkg/instrumentation/manager.go","line":324},"msg":"loading probe","name":{"SpanKind":3,"InstrumentedPkg":"go.opentelemetry.io/auto"}}
{"time":"2024-09-30T07:47:10.97756692-07:00","level":"INFO","source":{"function":"go.opentelemetry.io/auto/internal/pkg/instrumentation.(*Manager).ConfigLoop","file":"/home/tyler/go/src/go.opentelemetry.io/auto/internal/pkg/instrumentation/manager.go","line":238},"msg":"Configuration provider closed, configuration updates will no longer be received"}

$ sudo cat test.json
{"resourceSpans":[{"resource":{"attributes":[{"key":"process.runtime.description","value":{"stringValue":"go version 1.23.1 linux/amd64"}},{"key":"process.runtime.name","value":{"stringValue":"go"}},{"key":"process.runtime.version","value":{"stringValue":"1.23.1"}},{"key":"service.name","value":{"stringValue":"testing"}},{"key":"telemetry.distro.name","value":{"stringValue":"opentelemetry-go-instrumentation"}},{"key":"telemetry.distro.version","value":{"stringValue":"v0.14.0-alpha"}},{"key":"telemetry.sdk.language","value":{"stringValue":"go"}}]},"scopeSpans":[{"scope":{"name":"go.opentelemetry.io/auto/internal/test/e2e/autosdk","version":"v1.23.42"},"spans":[{"traceId":"cdf1e88da751aaa9491577ec7b09638a","spanId":"a2a171ba79099060","parentSpanId":"5e4f77143b8584ae","name":"Run","kind":3,"startTimeUnixNano":"946684800000500000","endTimeUnixNano":"946684801000000000","status":{}},{"traceId":"cdf1e88da751aaa9491577ec7b09638a","spanId":"5e4f77143b8584ae","parentSpanId":"","name":"main","kind":3,"startTimeUnixNano":"946684800000000000","endTimeUnixNano":"946684805000000000","status":{}}]}],"schemaUrl":"https://opentelemetry.io/schemas/1.26.0"}]}

Docker compose

To run this without needing sudo, the e2e tests have been restructured to support being run in docker-compose. This is all orchestrated with the Makefile.

Example

$ make e2e-autosdk e2e-databasesql e2e-gin e2e-grpc e2e-kafka-go e2e-nethttp e2e-nethttp-custom e2e-otelglobal

@pellared
Copy link
Member

pellared commented Oct 2, 2024

I guess it makes also debugging easier.

@RonFed
Copy link
Contributor

RonFed commented Oct 3, 2024

looks great.
To run this on non-Linux machines we'll need to run it inside a container, right?

@MrAlias
Copy link
Contributor Author

MrAlias commented Oct 3, 2024

looks great. To run this on non-Linux machines we'll need to run it inside a container, right?

I'm guessing, based on what @damemi said in the SIG meeting, it'll need to be run in a VM given the kernel still needs to support eBPF outside of the container.

That said, we'll probably still want to run this in a container on Linux to get sandbox the permissions issues and not have to run this with sudo.

@MrAlias MrAlias force-pushed the local-e2e branch 10 times, most recently from c0daf92 to 2799f0b Compare December 7, 2024 00:31
@MrAlias MrAlias mentioned this pull request Dec 9, 2024
@MrAlias MrAlias force-pushed the local-e2e branch 2 times, most recently from 5103924 to 2bf52d7 Compare December 20, 2024 18:06
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.

3 participants