package edge import ( "context" "fmt" "net" "net/http" "net/http/httptest" "os" "os/exec" "strings" "testing" ) // The gate script, run against this package's own backhaul path: a far // edge serving a remote-homed host passes; the same edge with no mesh key // mirrored answers unknown-host (edge.go:2699, :1428) and the gate FAILS. func TestServiceGateAgainstARealBackhaul(t *testing.T) { if _, err := exec.LookPath("curl"); err != nil { t.Skip("curl not installed") } const version = "abc1234" e, m, _ := hopEdge(t, "annie", "local.test") _, eip := fakeHomeEdge(t, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("X-Carlos-Version", version) fmt.Fprint(w, "ok") })) homedOn(t, m, "betty", eip, "example.com") gate := func() (string, error) { ts := httptest.NewTLSServer(e) defer ts.Close() h, p, _ := net.SplitHostPort(ts.Listener.Addr().String()) cmd := exec.Command("../../scripts/region-service-gate.sh", "example.com", version, h) cmd.Env = append(os.Environ(), "GATE_PORT="+p, "GATE_INSECURE=1", "GATE_SKIP_PUBLIC=1") out, err := cmd.CombinedOutput() return string(out), err } if out, err := gate(); err != nil { t.Fatalf("a working backhaul failed the gate: %v %s", err, out) } if err := m.s.Delete(context.Background(), meshKeyKey); err != nil { t.Fatal(err) } refreshHomeMap(t, m) if out, err := gate(); err == nil || !strings.Contains(out, "FAIL") { t.Fatalf("a backhaul with no mesh key passed the gate: %s", out) } }