mirror of
https://github.com/coredns/coredns.git
synced 2025-11-01 02:33:14 -04:00
Do not interrupt querying readiness probes for plugins (#6975)
* Do not interrupt querying readiness probes for plugins Signed-off-by: Gleb Kogtev <gleb.kogtev@gmail.com> * Add monitor param for ready plugin Signed-off-by: Gleb Kogtev <gleb.kogtev@gmail.com> * Update ready docs Signed-off-by: Gleb Kogtev <gleb.kogtev@gmail.com> * Update ready docs Signed-off-by: Gleb Kogtev <gleb.kogtev@gmail.com> --------- Signed-off-by: Gleb Kogtev <gleb.kogtev@gmail.com>
This commit is contained in:
@@ -67,3 +67,57 @@ func TestReady(t *testing.T) {
|
||||
}
|
||||
response.Body.Close()
|
||||
}
|
||||
|
||||
func TestReady_Continuously(t *testing.T) {
|
||||
rd := &ready{Addr: ":0"}
|
||||
e := &erratic.Erratic{}
|
||||
plugins.Append(e, "erratic")
|
||||
plugins.keepReadiness = true
|
||||
|
||||
if err := rd.onStartup(); err != nil {
|
||||
t.Fatalf("Unable to startup the readiness server: %v", err)
|
||||
}
|
||||
|
||||
defer rd.onFinalShutdown()
|
||||
|
||||
address := fmt.Sprintf("http://%s/ready", rd.ln.Addr().String())
|
||||
|
||||
response, err := http.Get(address)
|
||||
if err != nil {
|
||||
t.Fatalf("Unable to query %s: %v", address, err)
|
||||
}
|
||||
if response.StatusCode != http.StatusServiceUnavailable {
|
||||
t.Errorf("Invalid status code: expecting %d, got %d", 503, response.StatusCode)
|
||||
}
|
||||
response.Body.Close()
|
||||
|
||||
// make it ready by giving erratic 3 queries.
|
||||
m := new(dns.Msg)
|
||||
m.SetQuestion("example.org.", dns.TypeA)
|
||||
e.ServeDNS(context.TODO(), &test.ResponseWriter{}, m)
|
||||
e.ServeDNS(context.TODO(), &test.ResponseWriter{}, m)
|
||||
e.ServeDNS(context.TODO(), &test.ResponseWriter{}, m)
|
||||
|
||||
response, err = http.Get(address)
|
||||
if err != nil {
|
||||
t.Fatalf("Unable to query %s: %v", address, err)
|
||||
}
|
||||
if response.StatusCode != http.StatusOK {
|
||||
t.Errorf("Invalid status code: expecting %d, got %d", 200, response.StatusCode)
|
||||
}
|
||||
response.Body.Close()
|
||||
|
||||
// make erratic not-ready by giving it more queries, this should change the process readiness
|
||||
e.ServeDNS(context.TODO(), &test.ResponseWriter{}, m)
|
||||
e.ServeDNS(context.TODO(), &test.ResponseWriter{}, m)
|
||||
e.ServeDNS(context.TODO(), &test.ResponseWriter{}, m)
|
||||
|
||||
response, err = http.Get(address)
|
||||
if err != nil {
|
||||
t.Fatalf("Unable to query %s: %v", address, err)
|
||||
}
|
||||
if response.StatusCode != http.StatusServiceUnavailable {
|
||||
t.Errorf("Invalid status code: expecting %d, got %d", 503, response.StatusCode)
|
||||
}
|
||||
response.Body.Close()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user