mirror of https://github.com/prometheus/prometheus
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.1 KiB
85 lines
2.1 KiB
// Copyright 2016 The Prometheus Authors |
|
// Licensed under the Apache License, Version 2.0 (the "License"); |
|
// you may not use this file except in compliance with the License. |
|
// You may obtain a copy of the License at |
|
// |
|
// http://www.apache.org/licenses/LICENSE-2.0 |
|
// |
|
// Unless required by applicable law or agreed to in writing, software |
|
// distributed under the License is distributed on an "AS IS" BASIS, |
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
// See the License for the specific language governing permissions and |
|
// limitations under the License. |
|
|
|
package discovery |
|
|
|
import ( |
|
"testing" |
|
|
|
"github.com/prometheus/prometheus/config" |
|
"golang.org/x/net/context" |
|
yaml "gopkg.in/yaml.v2" |
|
) |
|
|
|
func TestTargetSetRecreatesTargetGroupsEveryRun(t *testing.T) { |
|
|
|
verifyPresence := func(tgroups map[string]*config.TargetGroup, 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) |
|
} |
|
} |
|
|
|
cfg := &config.ServiceDiscoveryConfig{} |
|
|
|
sOne := ` |
|
static_configs: |
|
- targets: ["foo:9090"] |
|
- targets: ["bar:9090"] |
|
` |
|
if err := yaml.Unmarshal([]byte(sOne), cfg); err != nil { |
|
t.Fatalf("Unable to load YAML config sOne: %s", err) |
|
} |
|
called := make(chan struct{}) |
|
|
|
ts := NewTargetSet(&mockSyncer{ |
|
sync: func([]*config.TargetGroup) { called <- struct{}{} }, |
|
}) |
|
ctx, cancel := context.WithCancel(context.Background()) |
|
defer cancel() |
|
|
|
go ts.Run(ctx) |
|
|
|
ts.UpdateProviders(ProvidersFromConfig(*cfg)) |
|
<-called |
|
|
|
verifyPresence(ts.tgroups, "static/0/0", true) |
|
verifyPresence(ts.tgroups, "static/0/1", true) |
|
|
|
sTwo := ` |
|
static_configs: |
|
- targets: ["foo:9090"] |
|
` |
|
if err := yaml.Unmarshal([]byte(sTwo), cfg); err != nil { |
|
t.Fatalf("Unable to load YAML config sTwo: %s", err) |
|
} |
|
|
|
ts.UpdateProviders(ProvidersFromConfig(*cfg)) |
|
<-called |
|
|
|
verifyPresence(ts.tgroups, "static/0/0", true) |
|
verifyPresence(ts.tgroups, "static/0/1", false) |
|
} |
|
|
|
type mockSyncer struct { |
|
sync func(tgs []*config.TargetGroup) |
|
} |
|
|
|
func (s *mockSyncer) Sync(tgs []*config.TargetGroup) { |
|
if s.sync != nil { |
|
s.sync(tgs) |
|
} |
|
}
|
|
|