(t *testing.T)
| 548 | } |
| 549 | |
| 550 | func TestTracingProxySpanWithLoopbackIfStatusFilter(t *testing.T) { |
| 551 | // b: backend server that returns 404 to trigger loopbackIfStatus |
| 552 | // fb: fallback backend server for loopback request |
| 553 | // We cannot use shunt backends instead because in that case the proxy span will be nil |
| 554 | b := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| 555 | w.WriteHeader(http.StatusNotFound) |
| 556 | w.Write([]byte("Hello! I'm main backend!")) |
| 557 | })) |
| 558 | defer b.Close() |
| 559 | fb := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| 560 | w.WriteHeader(http.StatusOK) |
| 561 | w.Write([]byte("Hello! I'm fallback backend!")) |
| 562 | })) |
| 563 | defer fb.Close() |
| 564 | |
| 565 | doc := fmt.Sprintf(` |
| 566 | main: Path("/main") -> loopbackIfStatus(404, "/fallback") -> "%s"; |
| 567 | fallback: Path("/fallback") -> "%s"; |
| 568 | `, b.URL, fb.URL) |
| 569 | |
| 570 | tracer := tracingtest.NewTracer() |
| 571 | params := Params{ |
| 572 | OpenTracing: &OpenTracingParams{ |
| 573 | Tracer: tracer, |
| 574 | }, |
| 575 | Flags: FlagsNone, |
| 576 | } |
| 577 | |
| 578 | t.Setenv("HOSTNAME", "shadow-tag.tracing.test") |
| 579 | |
| 580 | tp, err := newTestProxyWithParams(doc, params) |
| 581 | if err != nil { |
| 582 | t.Fatal(err) |
| 583 | } |
| 584 | defer tp.close() |
| 585 | |
| 586 | ps := httptest.NewServer(tp.proxy) |
| 587 | defer ps.Close() |
| 588 | |
| 589 | req, err := http.NewRequest("GET", ps.URL+"/main", nil) |
| 590 | if err != nil { |
| 591 | t.Fatal(err) |
| 592 | } |
| 593 | req.Header.Set("X-Flow-Id", "test-flow-id-fallback") |
| 594 | |
| 595 | rsp, err := ps.Client().Do(req) |
| 596 | if err != nil { |
| 597 | t.Fatal(err) |
| 598 | } |
| 599 | defer rsp.Body.Close() |
| 600 | io.Copy(io.Discard, rsp.Body) |
| 601 | t.Logf("got response %d", rsp.StatusCode) |
| 602 | |
| 603 | pxSpanCount := 0 |
| 604 | for _, s := range tracer.FinishedSpans() { |
| 605 | if s.OperationName == "proxy" { |
| 606 | pxSpanCount++ |
| 607 | verifyNoTag(t, s, "shadow") |
nothing calls this directly
no test coverage detected
searching dependent graphs…