(t *testing.T)
| 25 | ) |
| 26 | |
| 27 | func TestShadowSingle(t *testing.T) { |
| 28 | s := stdlibhttptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| 29 | w.Header().Add("Backend", "main") |
| 30 | w.WriteHeader(http.StatusOK) |
| 31 | w.Write([]byte("OK")) |
| 32 | })) |
| 33 | defer s.Close() |
| 34 | |
| 35 | shadow := stdlibhttptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| 36 | w.Header().Add("Backend", "shadow") |
| 37 | w.WriteHeader(http.StatusOK) |
| 38 | w.Write([]byte("OK")) |
| 39 | })) |
| 40 | defer shadow.Close() |
| 41 | |
| 42 | metrics := &metricstest.MockMetrics{} |
| 43 | reg := sched.RegistryWith(sched.Options{ |
| 44 | Metrics: metrics, |
| 45 | EnableRouteFIFOMetrics: true, |
| 46 | }) |
| 47 | defer reg.Close() |
| 48 | |
| 49 | fr := make(filters.Registry) |
| 50 | fr.Register(tee.NewTeeLoopback()) |
| 51 | fr.Register(scheduler.NewFifo()) |
| 52 | |
| 53 | doc := fmt.Sprintf(` |
| 54 | main: PathSubtree("/") |
| 55 | -> "%s"; |
| 56 | split: PathSubtree("/") && Traffic(0.5) |
| 57 | -> teeLoopback("test") |
| 58 | -> "%s"; |
| 59 | shadow: PathSubtree("/") && Tee("test") && True() |
| 60 | -> "%s"; |
| 61 | `, s.URL, s.URL, shadow.URL) |
| 62 | |
| 63 | dc, err := testdataclient.NewDoc(doc) |
| 64 | if err != nil { |
| 65 | t.Fatalf("Failed to create testdataclient: %v", err) |
| 66 | } |
| 67 | defer dc.Close() |
| 68 | |
| 69 | ro := routing.Options{ |
| 70 | SignalFirstLoad: true, |
| 71 | FilterRegistry: fr, |
| 72 | DataClients: []routing.DataClient{dc}, |
| 73 | PostProcessors: []routing.PostProcessor{reg}, |
| 74 | Predicates: []routing.PredicateSpec{ |
| 75 | teepred.New(), |
| 76 | traffic.New(), |
| 77 | primitive.NewTrue(), |
| 78 | }, |
| 79 | } |
| 80 | rt := routing.New(ro) |
| 81 | defer rt.Close() |
| 82 | <-rt.FirstLoad() |
| 83 | |
| 84 | pr := WithParams(Params{ |
nothing calls this directly
no test coverage detected
searching dependent graphs…