MCPcopy
hub / github.com/coredns/coredns / TestFailover

Function TestFailover

plugin/forward/setup_test.go:601–673  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

599}
600
601func TestFailover(t *testing.T) {
602 server_fail_s := dnstest.NewMultipleServer(func(w dns.ResponseWriter, r *dns.Msg) {
603 ret := new(dns.Msg)
604 ret.SetRcode(r, dns.RcodeServerFailure)
605 w.WriteMsg(ret)
606 })
607 defer server_fail_s.Close()
608
609 server_refused_s := dnstest.NewMultipleServer(func(w dns.ResponseWriter, r *dns.Msg) {
610 ret := new(dns.Msg)
611 ret.SetRcode(r, dns.RcodeRefused)
612 w.WriteMsg(ret)
613 })
614 defer server_refused_s.Close()
615
616 s := dnstest.NewMultipleServer(func(w dns.ResponseWriter, r *dns.Msg) {
617 ret := new(dns.Msg)
618 ret.SetReply(r)
619 ret.Answer = append(ret.Answer, test.A("example.org. IN A 127.0.0.1"))
620 w.WriteMsg(ret)
621 })
622 defer s.Close()
623
624 tests := []struct {
625 input string
626 hasRecord bool
627 failMsg string
628 }{
629 {fmt.Sprintf(
630 `forward . %s %s %s {
631 policy sequential
632 failover ServFail Refused
633 }`, server_fail_s.Addr, server_refused_s.Addr, s.Addr), true, "If failover is set, records should be returned as long as one of the upstreams is work"},
634 {fmt.Sprintf(
635 `forward . %s %s %s {
636 policy sequential
637 }`, server_fail_s.Addr, server_refused_s.Addr, s.Addr), false, "If failover is not set and the first upstream is not work, no records should be returned"},
638 {fmt.Sprintf(
639 `forward . %s %s %s {
640 policy sequential
641 }`, s.Addr, server_fail_s.Addr, server_refused_s.Addr), true, "Although failover is not set, as long as the first upstream is work, there should be has a record return"},
642 }
643
644 for i, testCase := range tests {
645 c := caddy.NewTestController("dns", testCase.input)
646 fs, err := parseForward(c)
647
648 f := fs[0]
649 if err != nil {
650 t.Errorf("Test #%d: Failed to create forwarder: %s", i, err)
651 }
652 f.OnStartup()
653 defer f.OnShutdown()
654
655 // Reduce per-upstream read timeout to make the test fit within the
656 // per-query deadline defaultTimeout of 5 seconds.
657 for _, p := range f.proxies {
658 p.SetReadTimeout(500 * time.Millisecond)

Callers

nothing calls this directly

Calls 12

NewMultipleServerFunction · 0.92
AFunction · 0.92
NewRecorderFunction · 0.92
parseForwardFunction · 0.85
ErrorfMethod · 0.65
SetReadTimeoutMethod · 0.65
ServeDNSMethod · 0.65
FatalfMethod · 0.65
WriteMsgMethod · 0.45
CloseMethod · 0.45
OnStartupMethod · 0.45
OnShutdownMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…