// Copyright 2019, OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package othttp import ( "io" "io/ioutil" "net/http" "net/http/httptest" "testing" "go.opentelemetry.io/otel/api/trace" mocktrace "go.opentelemetry.io/otel/internal/trace" ) func TestBasics(t *testing.T) { rr := httptest.NewRecorder() var id uint64 tracer := mocktrace.MockTracer{StartSpanID: &id} h := NewHandler( http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if _, err := io.WriteString(w, "hello world"); err != nil { t.Fatal(err) } }), "test_handler", WithTracer(&tracer)) r, err := http.NewRequest(http.MethodGet, "http://localhost/", nil) if err != nil { t.Fatal(err) } h.ServeHTTP(rr, r) if got, expected := rr.Result().StatusCode, http.StatusOK; got != expected { t.Fatalf("got %d, expected %d", got, expected) } if got := rr.Header().Get(trace.TraceparentHeader); got == "" { t.Fatal("expected non empty trace header") } if got, expected := id, uint64(1); got != expected { t.Fatalf("got %d, expected %d", got, expected) } d, err := ioutil.ReadAll(rr.Result().Body) if err != nil { t.Fatal(err) } if got, expected := string(d), "hello world"; got != expected { t.Fatalf("got %q, expected %q", got, expected) } }