mirror of
https://github.com/kubernetes-sigs/external-dns.git
synced 2025-08-06 09:36:58 +02:00
Merge pull request #3639 from kubernetes-sigs/test/controller-run
test: controller run() and successfully shutdown
This commit is contained in:
commit
fa17f9d06c
@ -131,12 +131,9 @@ func newMockProvider(endpoints []*endpoint.Endpoint, changes *plan.Changes) prov
|
|||||||
return dnsProvider
|
return dnsProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestRunOnce tests that RunOnce correctly orchestrates the different components.
|
func getTestSource() *testutils.MockSource {
|
||||||
func TestRunOnce(t *testing.T) {
|
|
||||||
// Fake some desired endpoints coming from our source.
|
// Fake some desired endpoints coming from our source.
|
||||||
source := new(testutils.MockSource)
|
source := new(testutils.MockSource)
|
||||||
cfg := externaldns.NewConfig()
|
|
||||||
cfg.ManagedDNSRecordTypes = []string{endpoint.RecordTypeA, endpoint.RecordTypeAAAA, endpoint.RecordTypeCNAME}
|
|
||||||
source.On("Endpoints").Return([]*endpoint.Endpoint{
|
source.On("Endpoints").Return([]*endpoint.Endpoint{
|
||||||
{
|
{
|
||||||
DNSName: "create-record",
|
DNSName: "create-record",
|
||||||
@ -160,8 +157,18 @@ func TestRunOnce(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}, nil)
|
}, nil)
|
||||||
|
|
||||||
|
return source
|
||||||
|
}
|
||||||
|
|
||||||
|
func getTestConfig() *externaldns.Config {
|
||||||
|
cfg := externaldns.NewConfig()
|
||||||
|
cfg.ManagedDNSRecordTypes = []string{endpoint.RecordTypeA, endpoint.RecordTypeAAAA, endpoint.RecordTypeCNAME}
|
||||||
|
return cfg
|
||||||
|
}
|
||||||
|
|
||||||
|
func getTestProvider() provider.Provider {
|
||||||
// Fake some existing records in our DNS provider and validate some desired changes.
|
// Fake some existing records in our DNS provider and validate some desired changes.
|
||||||
provider := newMockProvider(
|
return newMockProvider(
|
||||||
[]*endpoint.Endpoint{
|
[]*endpoint.Endpoint{
|
||||||
{
|
{
|
||||||
DNSName: "update-record",
|
DNSName: "update-record",
|
||||||
@ -203,6 +210,13 @@ func TestRunOnce(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestRunOnce tests that RunOnce correctly orchestrates the different components.
|
||||||
|
func TestRunOnce(t *testing.T) {
|
||||||
|
source := getTestSource()
|
||||||
|
cfg := getTestConfig()
|
||||||
|
provider := getTestProvider()
|
||||||
|
|
||||||
r, err := registry.NewNoopRegistry(provider)
|
r, err := registry.NewNoopRegistry(provider)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@ -224,6 +238,40 @@ func TestRunOnce(t *testing.T) {
|
|||||||
assert.Equal(t, math.Float64bits(1), valueFromMetric(verifiedAAAARecords))
|
assert.Equal(t, math.Float64bits(1), valueFromMetric(verifiedAAAARecords))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestRun tests that Run correctly starts and stops
|
||||||
|
func TestRun(t *testing.T) {
|
||||||
|
source := getTestSource()
|
||||||
|
cfg := getTestConfig()
|
||||||
|
provider := getTestProvider()
|
||||||
|
|
||||||
|
r, err := registry.NewNoopRegistry(provider)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// Run our controller once to trigger the validation.
|
||||||
|
ctrl := &Controller{
|
||||||
|
Source: source,
|
||||||
|
Registry: r,
|
||||||
|
Policy: &plan.SyncPolicy{},
|
||||||
|
ManagedRecordTypes: cfg.ManagedDNSRecordTypes,
|
||||||
|
}
|
||||||
|
ctrl.nextRunAt = time.Now().Add(-time.Millisecond)
|
||||||
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
stopped := make(chan struct{})
|
||||||
|
go func() {
|
||||||
|
ctrl.Run(ctx)
|
||||||
|
close(stopped)
|
||||||
|
}()
|
||||||
|
time.Sleep(1500 * time.Millisecond)
|
||||||
|
cancel() // start shutdown
|
||||||
|
<-stopped
|
||||||
|
|
||||||
|
// Validate that the mock source was called.
|
||||||
|
source.AssertExpectations(t)
|
||||||
|
// check the verified records
|
||||||
|
assert.Equal(t, math.Float64bits(1), valueFromMetric(verifiedARecords))
|
||||||
|
assert.Equal(t, math.Float64bits(1), valueFromMetric(verifiedAAAARecords))
|
||||||
|
}
|
||||||
|
|
||||||
func valueFromMetric(metric prometheus.Gauge) uint64 {
|
func valueFromMetric(metric prometheus.Gauge) uint64 {
|
||||||
ref := reflect.ValueOf(metric)
|
ref := reflect.ValueOf(metric)
|
||||||
return reflect.Indirect(ref).FieldByName("valBits").Uint()
|
return reflect.Indirect(ref).FieldByName("valBits").Uint()
|
||||||
|
Loading…
Reference in New Issue
Block a user