diff --git a/retrieval/targetmanager_test.go b/retrieval/targetmanager_test.go index 074fe51ec..72894a503 100644 --- a/retrieval/targetmanager_test.go +++ b/retrieval/targetmanager_test.go @@ -12,3 +12,63 @@ // limitations under the License. package retrieval + +import ( + "testing" + + "golang.org/x/net/context" + "gopkg.in/yaml.v2" + + "github.com/prometheus/prometheus/config" + "github.com/prometheus/prometheus/storage/local" +) + +func TestTargetSetRecreatesTargetGroupsEveryRun(t *testing.T) { + + verifyPresence := func(tgroups map[string][]*Target, name string, present bool) { + if _, ok := tgroups[name]; ok != present { + msg := "" + if !present { + msg = "not " + } + t.Fatalf("'%s' should %sbe present in TargetSet.tgroups: %s", name, msg, tgroups) + } + + } + + scrapeConfig := &config.ScrapeConfig{} + + sOne := ` +job_name: "foo" +dns_sd_configs: +- names: + - "srv.name.one.example.org" +` + if err := yaml.Unmarshal([]byte(sOne), scrapeConfig); err != nil { + t.Fatalf("Unable to load YAML config sOne: %s", err) + } + + // Not properly setting it up, but that seems okay + mss := &local.MemorySeriesStorage{} + + ts := newTargetSet(scrapeConfig, mss) + + ts.runProviders(context.Background(), providersFromConfig(scrapeConfig)) + + verifyPresence(ts.tgroups, "dns/0/srv.name.one.example.org", true) + + sTwo := ` +job_name: "foo" +dns_sd_configs: +- names: + - "srv.name.two.example.org" +` + if err := yaml.Unmarshal([]byte(sTwo), scrapeConfig); err != nil { + t.Fatalf("Unable to load YAML config sTwo: %s", err) + } + + ts.runProviders(context.Background(), providersFromConfig(scrapeConfig)) + + verifyPresence(ts.tgroups, "dns/0/srv.name.one.example.org", false) + verifyPresence(ts.tgroups, "dns/0/srv.name.two.example.org", true) +}