func TestDeleteRoute(t *testing.T) { resetData(t) c := etcd.NewClient(mock.EtcdUrls) dc, _ := Make(mock.EtcdUrls, "/skippertest") if !waitForEtcd(dc, checkInitial) { t.Error("failed to get initial data") } _, err := c.Delete("/skippertest/routes/pdp", false) if err != nil { t.Error("failed to delete route") } if !waitForEtcd(dc, func(rd skipper.RawData) bool { d, err := eskip.Parse(rd.Get()) if err != nil { return false } return len(d) == 0 }) { t.Error("failed to delete route") } }
func checkInitial(rd skipper.RawData) bool { d, err := eskip.Parse(rd.Get()) if err != nil { return false } if len(d) != 1 { return false } r := d[0] if r.Id != "pdp" { return false } if r.MatchExp != "PathRegexp(`.*\\.html`)" { return false } if len(r.Filters) != 2 { return false } checkFilter := func(f *eskip.Filter, name string, args ...interface{}) bool { if f.Name != name { return false } if len(f.Args) != len(args) { return false } for i, a := range args { if f.Args[i] != a { return false } } return true } if !checkFilter(r.Filters[0], "customHeader", 3.14) { return false } if !checkFilter(r.Filters[1], "xSessionId", "v4") { return false } if r.Backend != "https://www.zalando.de" { return false } return true }
func checkBackend(rd skipper.RawData, routeId, backend string) bool { d, err := eskip.Parse(rd.Get()) if err != nil { return false } for _, r := range d { if r.Id == routeId { return r.Backend == backend } } return false }
func TestInsertUpdateDelete(t *testing.T) { resetData(t) c := etcd.NewClient(mock.EtcdUrls) dc, _ := Make(mock.EtcdUrls, "/skippertest") if !waitForEtcd(dc, checkInitial) { t.Error("faield to get initial data") } c.Set("/skippertest/routes/pdp1", `Path("/pdp1") -> "http://www.zalando.de/pdp-inserted-1.html"`, 0) c.Set("/skippertest/routes/pdp2", `Path("/pdp2") -> "http://www.zalando.de/pdp-inserted-2.html"`, 0) c.Delete("/skippertest/routes/pdp1", false) c.Set("/skippertest/routes/pdp2", `Path("/pdp2") -> "http://www.zalando.de/pdp-mod-2.html"`, 0) if !waitForEtcd(dc, func(rd skipper.RawData) bool { d, err := eskip.Parse(rd.Get()) if err != nil { return false } if len(d) != 2 { return false } var originalOk, modOk bool for _, r := range d { if r.Id == "pdp" && r.Backend == "https://www.zalando.de" { originalOk = true } if r.Id == "pdp2" && r.Backend == "http://www.zalando.de/pdp-mod-2.html" { modOk = true } } return originalOk && modOk }) { t.Error("failed to delete route") } }