scrape: add test detecting data races
@@ -333,6 +333,44 @@ func TestScrapePoolAppender(t *testing.T) {
}
}
+func TestScrapePoolRaces(t *testing.T) {
+ interval, _ := model.ParseDuration("500ms")
+ timeout, _ := model.ParseDuration("1s")
+ newConfig := func() *config.ScrapeConfig {
+ return &config.ScrapeConfig{ScrapeInterval: interval, ScrapeTimeout: timeout}
+ }
+ sp := newScrapePool(newConfig(), &nopAppendable{}, nil)
+ tgts := []*targetgroup.Group{
+ &targetgroup.Group{
+ Targets: []model.LabelSet{
+ model.LabelSet{model.AddressLabel: "127.0.0.1:9090"},
+ model.LabelSet{model.AddressLabel: "127.0.0.2:9090"},
+ model.LabelSet{model.AddressLabel: "127.0.0.3:9090"},
+ model.LabelSet{model.AddressLabel: "127.0.0.4:9090"},
+ model.LabelSet{model.AddressLabel: "127.0.0.5:9090"},
+ model.LabelSet{model.AddressLabel: "127.0.0.6:9090"},
+ model.LabelSet{model.AddressLabel: "127.0.0.7:9090"},
+ model.LabelSet{model.AddressLabel: "127.0.0.8:9090"},
+ },
+ },
+ }
+
+ active, dropped := sp.Sync(tgts)
+ expectedActive, expectedDropped := len(tgts[0].Targets), 0
+ if len(active) != expectedActive {
+ t.Fatalf("Invalid number of active targets: expected %v, got %v", expectedActive, len(active))
+ }
+ if len(dropped) != expectedDropped {
+ t.Fatalf("Invalid number of dropped targets: expected %v, got %v", expectedDropped, len(dropped))
+ }
+
+ for i := 0; i < 20; i++ {
+ time.Sleep(time.Duration(10 * time.Millisecond))
+ sp.reload(newConfig())
+ }
+ sp.stop()
+}
+
func TestScrapeLoopStopBeforeRun(t *testing.T) {
scraper := &testScraper{}
