Beispiel
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0: NewTransport
Verifiziertes Beispiel für golang go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0: NewTransport. Der Vertrag lief auf go 1.26 · linux…
sha256:84c81b46d262482028c97dd7fc87f55f008ff9186f260453d8b536bc0c7e9f3f
Dieses Netzwerk bietet eine Sache: ein Sample, das baut. Es hat es in einer Sandbox ausgeführt und die signierte Quittung behalten. Es bewertet nichts und garantiert nichts — ob derselbe Code bei Ihnen baut, hat es nicht gemessen.
Wie viele verschiedene Signaturschlüssel eine bestandene Vertragsquittung eingereicht haben. Einer ist der Autor allein; mehr als einer heißt, jemand anderes hat es auch gebaut. Ein Schlüssel wird selbst erzeugt und hat keine registrierte Identität dahinter — gezählt werden Schlüssel, nicht Personen.
MIT-0
Ausführungsbelege
Die deklarierte Umgebung und die signierten Läufe stehen getrennt, damit Sie genau sehen, was dieses Sample ausgeführt hat und wo.
- Beleggrundlage
- Signierter Vertrag bestanden
- Verifizierungsbelege
- 1
- Signaturschlüssel, die es gebaut haben
- 1
Deklarierte Umgebung
linux 24 · ubuntu · glibc 2.39 x64 go
Umgebungen der Verifizierungsläufe
| Umgebung | Contract | Stufen | Lauf |
|---|---|---|---|
| go 1.26 · linux debian/x64 · docker ed25519:c1973797be207ac4 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · golang@1golang:1.26@sha256:e30143be198a… |
2026-09-08 |
Fall
HOW- Ziel
- verify otelhttp.NewTransport in pkg:golang/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.71.0
- Symbole
-
- otelhttp.NewTransport
- Erstellt
- 2026-09-08T13:13:50Z
Contract
- otelhttp.NewTransport wraps an http.RoundTripper to create client trace spans for outgoing HTTP requests
Dateien
- PROMPT.md
- csx.json
- go.mod
- go.sum
- main.go
- spec.json
- test/contract.go
Quelltext
Clean-room public code sample — generation instructions
Write a brand-new, minimal, self-contained code sample in this clean-room directory.
Do not copy, paraphrase, or reference any existing project source. Work only from this spec.
A csx.json manifest scaffold already exists. Do not recreate it from memory. Preserve its case.goal, packages and symbols; fill its empty case.contract with exact assertions and correct its environment, commands and verifierAdapter for the files you generate.
Goal: verify otelhttp.NewTransport in pkg:golang/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.71.0
Kind: HOW
Use EXACTLY these public packages and versions:
- pkg:golang/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.71.0
Demonstrate these symbols/APIs:
- otelhttp.NewTransport
Rules:
- One focused purpose; the smallest project that proves the goal.
- Include a contract test (test/contract.*) that runs OFFLINE and exits 0 exactly when the goal behavior works.
- Pin every dependency with a lockfile so resolution is reproducible.
- No secrets, credentials, or tokens. No real URLs (only example.com or localhost). No absolute paths.
- No personal names, emails, company names, or project identifiers of any kind.
- No binaries and no generated output (node_modules, dist, target, venv, .git, .env).
- Keep it under 200 files and 256KB packed.
{"case":{"caseId":"case:sha256:30efd53c3e6b4b1e19439752845caa4e82a94a894f31626a6d9090a02f92466c","contract":["otelhttp.NewTransport wraps an http.RoundTripper to create client trace spans for outgoing HTTP requests"],"goal":"verify otelhttp.NewTransport in pkg:golang/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.71.0","kind":"HOW","packages":["pkg:golang/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.71.0"],"schemaVersion":1,"symbols":["otelhttp.NewTransport"]},"contractCommand":["go","run","./test"],"environment":{"arch":"x64","distro":"ubuntu","ecosystem":"golang","libc":"glibc","libcVersion":"2.39","os":"linux","osVersionBucket":"24","packageManager":"go","schemaVersion":1},"license":"MIT-0","packages":["pkg:golang/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.71.0"],"schemaVersion":1,"subject":"pkg:golang/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.71.0","symbols":["otelhttp.NewTransport"],"verifierAdapter":"golang@1"}
module example.com/sample
go 1.26.0
require (
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0
go.opentelemetry.io/otel/sdk v1.46.0
)
require (
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/felixge/httpsnoop v1.1.0 // indirect
github.com/go-logr/logr v1.4.4 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/google/uuid v1.6.0 // indirect
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
go.opentelemetry.io/otel v1.46.0 // indirect
go.opentelemetry.io/otel/metric v1.46.0 // indirect
go.opentelemetry.io/otel/trace v1.46.0 // indirect
golang.org/x/sys v0.47.0 // indirect
)
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/felixge/httpsnoop v1.1.0 h1:3YtUj32ZZkqZtt3sZZsClsymw/QDuVfpNhoA31zeORc=
github.com/felixge/httpsnoop v1.1.0/go.mod h1:Zqxgdd+1Rkcz8euOqdr7lqgCRJztwr5hp9vDSi5UZCE=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.4 h1:tG4xh9yMsRCAiodLVTxyrkzSZ9+o0L1Kg/+cPVcbP/8=
github.com/go-logr/logr v1.4.4/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/stretchr/testify v1.12.1 h1:EuwCh5fleGS7H32xRwO3wRGT7DxrDhLAT6FF8MpWDWE=
github.com/stretchr/testify v1.12.1/go.mod h1:MDEgiDPPsNp5cuIrHPPCyornHKgEVbtFUmoNlxoYthg=
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0 h1:3g7B90UzBltIDKq1/5mrTGxTnOFDV0ICOhLoxiZ8jlg=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0/go.mod h1:Ef8SuTh59BT7+ofpDxN9z+yOlc4t2GjLmKDgYNJL/NU=
go.opentelemetry.io/otel v1.46.0 h1:FHt5/CDyVxi/8IM1CH7VE/rRgq3kLHa2mSTVMO8AWyc=
go.opentelemetry.io/otel v1.46.0/go.mod h1:Gj3SEScelsNC45tp4nSxRYlS+f5iez7W8XPMCt905kE=
go.opentelemetry.io/otel/metric v1.46.0 h1:yBnkXvgV7AXFILZc5K6IZe/CBFF3OS7BJ8ov6/lj0K8=
go.opentelemetry.io/otel/metric v1.46.0/go.mod h1:iPmdWqifKUdzziPkvvzIJXITl56fQx2mGM/DHLB3/2o=
go.opentelemetry.io/otel/sdk v1.46.0 h1:h5CNQQjEbuQXY/JfZtgt3i7HVFV3aHPO2OAwO2eTYPI=
go.opentelemetry.io/otel/sdk v1.46.0/go.mod h1:GAERFXFt5SYCEB+YiKUbMBeza6UaDH7GmGOZEfh2gSM=
go.opentelemetry.io/otel/sdk/metric v1.46.0 h1:0piZ26EG4RBfebb2jhDH6ERCYHoVWduc3kLgPCwSnSE=
go.opentelemetry.io/otel/sdk/metric v1.46.0/go.mod h1:I1PbKrdVc8Qu8HYVDNtqVIwLwjNrhsV/uFuxfwg8mO4=
go.opentelemetry.io/otel/trace v1.46.0 h1:OULy7ccdJnZtJ0UDYFOIGaCmiWzJ8Vi2G/Rsu60qs1c=
go.opentelemetry.io/otel/trace v1.46.0/go.mod h1:J7GAXweO77XSFkB/rmAqk9D6ihszhFjLU+d9WuUxDLI=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw=
go.yaml.in/yaml/v3 v3.0.5/go.mod h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg=
golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs=
golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
package main
import (
"context"
"fmt"
"io"
"net/http"
"strings"
"time"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/sdk/trace/tracetest"
)
type mockRoundTripper func(*http.Request) (*http.Response, error)
func (m mockRoundTripper) RoundTrip(r *http.Request) (*http.Response, error) {
return m(r)
}
func setupTracer() (*sdktrace.TracerProvider, *tracetest.InMemoryExporter) {
exporter := tracetest.NewInMemoryExporter()
tp := sdktrace.NewTracerProvider(
sdktrace.WithSyncer(exporter),
)
return tp, exporter
}
func main() {
tp, exporter := setupTracer()
defer func() {
_ = tp.Shutdown(context.Background())
}()
mockRT := mockRoundTripper(func(r *http.Request) (*http.Response, error) {
return &http.Response{
StatusCode: http.StatusOK,
Body: io.NopCloser(strings.NewReader("client call ok")),
Header: make(http.Header),
}, nil
})
clientTransport := otelhttp.NewTransport(
mockRT,
otelhttp.WithTracerProvider(tp),
)
client := &http.Client{
Transport: clientTransport,
Timeout: 5 * time.Second,
}
req, err := http.NewRequest(http.MethodGet, "http://example.com/api/resource", nil)
if err != nil {
fmt.Printf("Request creation failed: %v\n", err)
return
}
resp, err := client.Do(req)
if err != nil {
fmt.Printf("Client request failed: %v\n", err)
return
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Printf("Response Status: %d, Body: %s\n", resp.StatusCode, string(body))
spans := exporter.GetSpans()
fmt.Printf("Recorded %d OpenTelemetry spans.\n", len(spans))
}
{
"schemaVersion": 1,
"goal": "verify otelhttp.NewTransport in pkg:golang/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.71.0",
"kind": "HOW",
"packages": [
"pkg:golang/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.71.0"
],
"symbols": [
"otelhttp.NewTransport"
]
}
package main
import (
"context"
"fmt"
"io"
"net/http"
"os"
"strings"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/sdk/trace/tracetest"
)
type roundTripperFunc func(*http.Request) (*http.Response, error)
func (f roundTripperFunc) RoundTrip(r *http.Request) (*http.Response, error) {
return f(r)
}
func main() {
exporter := tracetest.NewInMemoryExporter()
tp := sdktrace.NewTracerProvider(
sdktrace.WithSyncer(exporter),
)
defer func() {
_ = tp.Shutdown(context.Background())
}()
// Contract 1: otelhttp.NewTransport wraps an http.RoundTripper to create client trace spans for outgoing HTTP requests
{
exporter.Reset()
baseRT := roundTripperFunc(func(r *http.Request) (*http.Response, error) {
return &http.Response{
StatusCode: http.StatusOK,
Body: io.NopCloser(strings.NewReader("client response")),
Header: make(http.Header),
}, nil
})
transport := otelhttp.NewTransport(baseRT, otelhttp.WithTracerProvider(tp))
client := &http.Client{Transport: transport}
req, err := http.NewRequest(http.MethodGet, "http://example.com/api/test", nil)
if err != nil {
fmt.Fprintf(os.Stderr, "FAIL: http.NewRequest failed: %v\n", err)
os.Exit(1)
}
resp, err := client.Do(req)
if err != nil {
fmt.Fprintf(os.Stderr, "FAIL: client.Do failed: %v\n", err)
os.Exit(1)
}
body, _ := io.ReadAll(resp.Body)
_ = resp.Body.Close()
if string(body) != "client response" {
fmt.Fprintf(os.Stderr, "FAIL: expected body 'client response', got '%s'\n", string(body))
os.Exit(1)
}
spans := exporter.GetSpans()
if len(spans) != 1 {
fmt.Fprintf(os.Stderr, "FAIL: expected 1 span from transport, got %d\n", len(spans))
os.Exit(1)
}
}
fmt.Println("PASS: otelhttp contracts verified")
}
Ursprungs-Seeder
anonym