| 
									
										
										
										
											2017-04-18 11:25:21 +01:00
										 |  |  | package test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2018-04-21 17:43:02 +01:00
										 |  |  | 	"bytes" | 
					
						
							| 
									
										
										
										
											2018-08-21 08:52:25 -07:00
										 |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2018-04-21 17:43:02 +01:00
										 |  |  | 	"io/ioutil" | 
					
						
							|  |  |  | 	"net/http" | 
					
						
							| 
									
										
										
										
											2018-05-18 07:26:45 +01:00
										 |  |  | 	"strings" | 
					
						
							| 
									
										
										
										
											2017-04-18 11:25:21 +01:00
										 |  |  | 	"testing" | 
					
						
							| 
									
										
										
										
											2018-04-21 18:59:35 +01:00
										 |  |  | 	"time" | 
					
						
							| 
									
										
										
										
											2017-04-18 11:25:21 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/miekg/dns" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestReload(t *testing.T) { | 
					
						
							|  |  |  | 	corefile := `.:0 { | 
					
						
							| 
									
										
										
										
											2020-04-25 14:08:36 +08:00
										 |  |  | 		whoami | 
					
						
							|  |  |  | 	}` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-18 11:25:21 +01:00
										 |  |  | 	coreInput := NewInput(corefile) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	c, err := CoreDNSServer(corefile) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Fatalf("Could not get CoreDNS serving instance: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	udp, _ := CoreDNSServerPorts(c, 0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	send(t, udp) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	c1, err := c.Restart(coreInput) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	udp, _ = CoreDNSServerPorts(c1, 0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	send(t, udp) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	c1.Stop() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func send(t *testing.T, server string) { | 
					
						
							|  |  |  | 	m := new(dns.Msg) | 
					
						
							|  |  |  | 	m.SetQuestion("whoami.example.org.", dns.TypeSRV) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	r, err := dns.Exchange(m, server) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2017-08-27 07:39:44 +01:00
										 |  |  | 		// This seems to fail a lot on travis, quick'n dirty: redo | 
					
						
							|  |  |  | 		r, err = dns.Exchange(m, server) | 
					
						
							|  |  |  | 		if err != nil { | 
					
						
							|  |  |  | 			return | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-04-18 11:25:21 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	if r.Rcode != dns.RcodeSuccess { | 
					
						
							|  |  |  | 		t.Fatalf("Expected successful reply, got %s", dns.RcodeToString[r.Rcode]) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if len(r.Extra) != 2 { | 
					
						
							| 
									
										
										
										
											2017-09-24 03:59:04 -07:00
										 |  |  | 		t.Fatalf("Expected 2 RRs in additional, got %d", len(r.Extra)) | 
					
						
							| 
									
										
										
										
											2017-04-18 11:25:21 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-04-21 17:43:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | func TestReloadHealth(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2020-04-25 14:08:36 +08:00
										 |  |  | 	corefile := `.:0 { | 
					
						
							|  |  |  | 		health 127.0.0.1:52182 | 
					
						
							|  |  |  | 		whoami | 
					
						
							|  |  |  | 	}` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-21 17:43:02 +01:00
										 |  |  | 	c, err := CoreDNSServer(corefile) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2018-05-18 07:26:45 +01:00
										 |  |  | 		if strings.Contains(err.Error(), inUse) { | 
					
						
							|  |  |  | 			return // meh, but don't error | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-04-21 17:43:02 +01:00
										 |  |  | 		t.Fatalf("Could not get service instance: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if c1, err := c.Restart(NewInput(corefile)); err != nil { | 
					
						
							|  |  |  | 		t.Fatal(err) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		c1.Stop() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestReloadMetricsHealth(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2020-04-25 14:08:36 +08:00
										 |  |  | 	corefile := `.:0 { | 
					
						
							|  |  |  | 		prometheus 127.0.0.1:53183 | 
					
						
							|  |  |  | 		health 127.0.0.1:53184 | 
					
						
							|  |  |  | 		whoami | 
					
						
							|  |  |  | 	}` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-21 17:43:02 +01:00
										 |  |  | 	c, err := CoreDNSServer(corefile) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2018-05-18 07:26:45 +01:00
										 |  |  | 		if strings.Contains(err.Error(), inUse) { | 
					
						
							|  |  |  | 			return // meh, but don't error | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-04-21 17:43:02 +01:00
										 |  |  | 		t.Fatalf("Could not get service instance: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	c1, err := c.Restart(NewInput(corefile)) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	defer c1.Stop() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-21 18:59:35 +01:00
										 |  |  | 	time.Sleep(1 * time.Second) | 
					
						
							| 
									
										
										
										
											2018-04-21 17:43:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Health | 
					
						
							|  |  |  | 	resp, err := http.Get("http://localhost:53184/health") | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	ok, _ := ioutil.ReadAll(resp.Body) | 
					
						
							|  |  |  | 	resp.Body.Close() | 
					
						
							| 
									
										
										
										
											2019-08-26 18:31:24 +08:00
										 |  |  | 	if string(ok) != http.StatusText(http.StatusOK) { | 
					
						
							| 
									
										
										
										
											2018-04-21 17:43:02 +01:00
										 |  |  | 		t.Errorf("Failed to receive OK, got %s", ok) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Metrics | 
					
						
							|  |  |  | 	resp, err = http.Get("http://localhost:53183/metrics") | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-09-19 05:11:24 -04:00
										 |  |  | 	const proc = "coredns_build_info" | 
					
						
							| 
									
										
										
										
											2018-04-21 17:43:02 +01:00
										 |  |  | 	metrics, _ := ioutil.ReadAll(resp.Body) | 
					
						
							|  |  |  | 	if !bytes.Contains(metrics, []byte(proc)) { | 
					
						
							|  |  |  | 		t.Errorf("Failed to see %s in metric output", proc) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-05-18 07:26:45 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-19 05:11:24 -04:00
										 |  |  | func collectMetricsInfo(addr string, procs ...string) error { | 
					
						
							| 
									
										
										
										
											2018-08-21 08:52:25 -07:00
										 |  |  | 	cl := &http.Client{} | 
					
						
							|  |  |  | 	resp, err := cl.Get(fmt.Sprintf("http://%s/metrics", addr)) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	metrics, _ := ioutil.ReadAll(resp.Body) | 
					
						
							| 
									
										
										
										
											2018-09-19 05:11:24 -04:00
										 |  |  | 	for _, p := range procs { | 
					
						
							|  |  |  | 		if !bytes.Contains(metrics, []byte(p)) { | 
					
						
							|  |  |  | 			return fmt.Errorf("failed to see %s in metric output \n%s", p, metrics) | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-08-21 08:52:25 -07:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // TestReloadSeveralTimeMetrics ensures that metrics are not pushed to | 
					
						
							|  |  |  | // prometheus once the metrics plugin is removed and a coredns | 
					
						
							|  |  |  | // reload is triggered | 
					
						
							|  |  |  | // 1. check that metrics have not been exported to prometheus before coredns starts | 
					
						
							|  |  |  | // 2. ensure that build-related metrics have been exported once coredns starts | 
					
						
							|  |  |  | // 3. trigger multiple reloads without changing the corefile | 
					
						
							|  |  |  | // 4. remove the metrics plugin and trigger a final reload | 
					
						
							|  |  |  | // 5. ensure the original prometheus exporter has not received more metrics | 
					
						
							|  |  |  | func TestReloadSeveralTimeMetrics(t *testing.T) { | 
					
						
							|  |  |  | 	//TODO: add a tool that find an available port because this needs to be a port | 
					
						
							|  |  |  | 	// that is not used in another test | 
					
						
							|  |  |  | 	promAddress := "127.0.0.1:53185" | 
					
						
							|  |  |  | 	proc := "coredns_build_info" | 
					
						
							| 
									
										
										
										
											2020-04-25 14:08:36 +08:00
										 |  |  | 	corefileWithMetrics := `.:0 { | 
					
						
							| 
									
										
										
										
											2018-08-21 08:52:25 -07:00
										 |  |  | 		prometheus ` + promAddress + ` | 
					
						
							|  |  |  | 		whoami | 
					
						
							|  |  |  | 	}` | 
					
						
							| 
									
										
										
										
											2020-04-25 14:08:36 +08:00
										 |  |  | 	corefileWithoutMetrics := `.:0 { | 
					
						
							| 
									
										
										
										
											2018-08-21 08:52:25 -07:00
										 |  |  | 		whoami | 
					
						
							|  |  |  | 	}` | 
					
						
							| 
									
										
										
										
											2020-04-25 14:08:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-21 08:52:25 -07:00
										 |  |  | 	if err := collectMetricsInfo(promAddress, proc); err == nil { | 
					
						
							|  |  |  | 		t.Errorf("Prometheus is listening before the test started") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	serverWithMetrics, err := CoreDNSServer(corefileWithMetrics) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		if strings.Contains(err.Error(), inUse) { | 
					
						
							|  |  |  | 			return | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		t.Errorf("Could not get service instance: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	// verify prometheus is running | 
					
						
							|  |  |  | 	if err := collectMetricsInfo(promAddress, proc); err != nil { | 
					
						
							|  |  |  | 		t.Errorf("Prometheus is not listening : %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	reloadCount := 2 | 
					
						
							|  |  |  | 	for i := 0; i < reloadCount; i++ { | 
					
						
							|  |  |  | 		serverReload, err := serverWithMetrics.Restart( | 
					
						
							|  |  |  | 			NewInput(corefileWithMetrics), | 
					
						
							|  |  |  | 		) | 
					
						
							|  |  |  | 		if err != nil { | 
					
						
							|  |  |  | 			t.Errorf("Could not restart CoreDNS : %s, at loop %v", err, i) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if err := collectMetricsInfo(promAddress, proc); err != nil { | 
					
						
							|  |  |  | 			t.Errorf("Prometheus is not listening : %s", err) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		serverWithMetrics = serverReload | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	// reload without prometheus | 
					
						
							|  |  |  | 	serverWithoutMetrics, err := serverWithMetrics.Restart( | 
					
						
							|  |  |  | 		NewInput(corefileWithoutMetrics), | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Errorf("Could not restart a second time CoreDNS : %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	serverWithoutMetrics.Stop() | 
					
						
							|  |  |  | 	// verify that metrics have not been pushed | 
					
						
							|  |  |  | 	if err := collectMetricsInfo(promAddress, proc); err == nil { | 
					
						
							|  |  |  | 		t.Errorf("Prometheus is still listening") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-19 05:11:24 -04:00
										 |  |  | func TestMetricsAvailableAfterReload(t *testing.T) { | 
					
						
							|  |  |  | 	//TODO: add a tool that find an available port because this needs to be a port | 
					
						
							|  |  |  | 	// that is not used in another test | 
					
						
							|  |  |  | 	promAddress := "127.0.0.1:53186" | 
					
						
							|  |  |  | 	procMetric := "coredns_build_info" | 
					
						
							| 
									
										
										
										
											2020-04-04 00:30:06 +08:00
										 |  |  | 	procCache := "coredns_cache_entries" | 
					
						
							| 
									
										
										
										
											2018-09-19 05:11:24 -04:00
										 |  |  | 	procForward := "coredns_dns_request_duration_seconds" | 
					
						
							| 
									
										
										
										
											2020-04-25 14:08:36 +08:00
										 |  |  | 	corefileWithMetrics := `.:0 { | 
					
						
							| 
									
										
										
										
											2018-09-19 05:11:24 -04:00
										 |  |  | 		prometheus ` + promAddress + ` | 
					
						
							|  |  |  | 		cache | 
					
						
							|  |  |  | 		forward . 8.8.8.8 { | 
					
						
							| 
									
										
										
										
											2020-04-25 14:08:36 +08:00
										 |  |  | 			force_tcp | 
					
						
							| 
									
										
										
										
											2018-09-19 05:11:24 -04:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	}` | 
					
						
							| 
									
										
										
										
											2020-04-25 14:08:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-19 05:11:24 -04:00
										 |  |  | 	inst, _, tcp, err := CoreDNSServerAndPorts(corefileWithMetrics) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		if strings.Contains(err.Error(), inUse) { | 
					
						
							|  |  |  | 			return | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		t.Errorf("Could not get service instance: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	// send a query and check we can scrap corresponding metrics | 
					
						
							|  |  |  | 	cl := dns.Client{Net: "tcp"} | 
					
						
							|  |  |  | 	m := new(dns.Msg) | 
					
						
							|  |  |  | 	m.SetQuestion("www.example.org.", dns.TypeA) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if _, _, err := cl.Exchange(m, tcp); err != nil { | 
					
						
							|  |  |  | 		t.Fatalf("Could not send message: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// we should have metrics from forward, cache, and metrics itself | 
					
						
							|  |  |  | 	if err := collectMetricsInfo(promAddress, procMetric, procCache, procForward); err != nil { | 
					
						
							|  |  |  | 		t.Errorf("Could not scrap one of expected stats : %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// now reload | 
					
						
							|  |  |  | 	instReload, err := inst.Restart( | 
					
						
							|  |  |  | 		NewInput(corefileWithMetrics), | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Errorf("Could not restart CoreDNS : %s", err) | 
					
						
							|  |  |  | 		instReload = inst | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// check the metrics are available still | 
					
						
							|  |  |  | 	if err := collectMetricsInfo(promAddress, procMetric, procCache, procForward); err != nil { | 
					
						
							|  |  |  | 		t.Errorf("Could not scrap one of expected stats : %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	instReload.Stop() | 
					
						
							|  |  |  | 	// verify that metrics have not been pushed | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestMetricsAvailableAfterReloadAndFailedReload(t *testing.T) { | 
					
						
							|  |  |  | 	//TODO: add a tool that find an available port because this needs to be a port | 
					
						
							|  |  |  | 	// that is not used in another test | 
					
						
							|  |  |  | 	promAddress := "127.0.0.1:53187" | 
					
						
							|  |  |  | 	procMetric := "coredns_build_info" | 
					
						
							| 
									
										
										
										
											2020-04-04 00:30:06 +08:00
										 |  |  | 	procCache := "coredns_cache_entries" | 
					
						
							| 
									
										
										
										
											2018-09-19 05:11:24 -04:00
										 |  |  | 	procForward := "coredns_dns_request_duration_seconds" | 
					
						
							| 
									
										
										
										
											2020-04-25 14:08:36 +08:00
										 |  |  | 	corefileWithMetrics := `.:0 { | 
					
						
							| 
									
										
										
										
											2018-09-19 05:11:24 -04:00
										 |  |  | 		prometheus ` + promAddress + ` | 
					
						
							|  |  |  | 		cache | 
					
						
							|  |  |  | 		forward . 8.8.8.8 { | 
					
						
							| 
									
										
										
										
											2020-04-25 14:08:36 +08:00
										 |  |  | 			force_tcp | 
					
						
							| 
									
										
										
										
											2018-09-19 05:11:24 -04:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	}` | 
					
						
							| 
									
										
										
										
											2020-04-25 14:08:36 +08:00
										 |  |  | 	invalidCorefileWithMetrics := `.:0 { | 
					
						
							| 
									
										
										
										
											2018-09-19 05:11:24 -04:00
										 |  |  | 		prometheus ` + promAddress + ` | 
					
						
							|  |  |  | 		cache | 
					
						
							|  |  |  | 		forward . 8.8.8.8 { | 
					
						
							| 
									
										
										
										
											2020-04-25 14:08:36 +08:00
										 |  |  | 			force_tcp | 
					
						
							| 
									
										
										
										
											2018-09-19 05:11:24 -04:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		invalid | 
					
						
							|  |  |  | 	}` | 
					
						
							| 
									
										
										
										
											2020-04-25 14:08:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-19 05:11:24 -04:00
										 |  |  | 	inst, _, tcp, err := CoreDNSServerAndPorts(corefileWithMetrics) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		if strings.Contains(err.Error(), inUse) { | 
					
						
							|  |  |  | 			return | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		t.Errorf("Could not get service instance: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	// send a query and check we can scrap corresponding metrics | 
					
						
							|  |  |  | 	cl := dns.Client{Net: "tcp"} | 
					
						
							|  |  |  | 	m := new(dns.Msg) | 
					
						
							|  |  |  | 	m.SetQuestion("www.example.org.", dns.TypeA) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if _, _, err := cl.Exchange(m, tcp); err != nil { | 
					
						
							|  |  |  | 		t.Fatalf("Could not send message: %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// we should have metrics from forward, cache, and metrics itself | 
					
						
							|  |  |  | 	if err := collectMetricsInfo(promAddress, procMetric, procCache, procForward); err != nil { | 
					
						
							|  |  |  | 		t.Errorf("Could not scrap one of expected stats : %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for i := 0; i < 2; i++ { | 
					
						
							|  |  |  | 		// now provide a failed reload | 
					
						
							|  |  |  | 		invInst, err := inst.Restart( | 
					
						
							|  |  |  | 			NewInput(invalidCorefileWithMetrics), | 
					
						
							|  |  |  | 		) | 
					
						
							|  |  |  | 		if err == nil { | 
					
						
							|  |  |  | 			t.Errorf("Invalid test - this reload should fail") | 
					
						
							|  |  |  | 			inst = invInst | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// now reload with correct corefile | 
					
						
							|  |  |  | 	instReload, err := inst.Restart( | 
					
						
							|  |  |  | 		NewInput(corefileWithMetrics), | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Errorf("Could not restart CoreDNS : %s", err) | 
					
						
							|  |  |  | 		instReload = inst | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// check the metrics are available still | 
					
						
							|  |  |  | 	if err := collectMetricsInfo(promAddress, procMetric, procCache, procForward); err != nil { | 
					
						
							|  |  |  | 		t.Errorf("Could not scrap one of expected stats : %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	instReload.Stop() | 
					
						
							|  |  |  | 	// verify that metrics have not been pushed | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-18 07:26:45 +01:00
										 |  |  | const inUse = "address already in use" |