mirror of
https://github.com/kubernetes-sigs/external-dns.git
synced 2025-08-05 17:16:59 +02:00
952 lines
31 KiB
Go
952 lines
31 KiB
Go
/*
|
|
Copyright 2022 The Kubernetes 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 ibmcloud
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/IBM/go-sdk-core/v5/core"
|
|
"github.com/IBM/networking-go-sdk/dnsrecordsv1"
|
|
|
|
"github.com/IBM/networking-go-sdk/dnssvcsv1"
|
|
|
|
. "github.com/onsi/ginkgo"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/mock"
|
|
"sigs.k8s.io/external-dns/endpoint"
|
|
"sigs.k8s.io/external-dns/plan"
|
|
"sigs.k8s.io/external-dns/provider"
|
|
)
|
|
|
|
func NewMockIBMCloudDNSAPI() *mockIbmcloudClientInterface {
|
|
// Setup public example responses
|
|
firstPublicRecord := dnsrecordsv1.DnsrecordDetails{
|
|
ID: core.StringPtr("123"),
|
|
Name: core.StringPtr("test.example.com"),
|
|
Type: core.StringPtr("A"),
|
|
Content: core.StringPtr("1.2.3.4"),
|
|
Proxied: core.BoolPtr(true),
|
|
TTL: core.Int64Ptr(int64(120)),
|
|
}
|
|
secondPublicRecord := dnsrecordsv1.DnsrecordDetails{
|
|
ID: core.StringPtr("456"),
|
|
Name: core.StringPtr("test.example.com"),
|
|
Type: core.StringPtr("TXT"),
|
|
Proxied: core.BoolPtr(false),
|
|
Content: core.StringPtr("\"heritage=external-dns,external-dns/owner=tower-pdns\""),
|
|
TTL: core.Int64Ptr(int64(120)),
|
|
}
|
|
publicRecordsResult := []dnsrecordsv1.DnsrecordDetails{firstPublicRecord, secondPublicRecord}
|
|
publicRecordsResultInfo := &dnsrecordsv1.ResultInfo{
|
|
Page: core.Int64Ptr(int64(1)),
|
|
TotalCount: core.Int64Ptr(int64(1)),
|
|
}
|
|
|
|
publicRecordsResp := &dnsrecordsv1.ListDnsrecordsResp{
|
|
Result: publicRecordsResult,
|
|
ResultInfo: publicRecordsResultInfo,
|
|
}
|
|
// Setup private example responses
|
|
firstPrivateZone := dnssvcsv1.Dnszone{
|
|
ID: core.StringPtr("123"),
|
|
Name: core.StringPtr("example.com"),
|
|
State: core.StringPtr(zoneStatePendingNetwork),
|
|
}
|
|
|
|
secondPrivateZone := dnssvcsv1.Dnszone{
|
|
ID: core.StringPtr("456"),
|
|
Name: core.StringPtr("example1.com"),
|
|
State: core.StringPtr(zoneStateActive),
|
|
}
|
|
privateZones := []dnssvcsv1.Dnszone{firstPrivateZone, secondPrivateZone}
|
|
listZonesResp := &dnssvcsv1.ListDnszones{
|
|
Dnszones: privateZones,
|
|
}
|
|
firstPrivateRecord := dnssvcsv1.ResourceRecord{
|
|
ID: core.StringPtr("123"),
|
|
Name: core.StringPtr("test.example.com"),
|
|
Type: core.StringPtr("A"),
|
|
Rdata: map[string]interface{}{"ip": "1.2.3.4"},
|
|
TTL: core.Int64Ptr(int64(120)),
|
|
}
|
|
secondPrivateRecord := dnssvcsv1.ResourceRecord{
|
|
ID: core.StringPtr("456"),
|
|
Name: core.StringPtr("testCNAME.example.com"),
|
|
Type: core.StringPtr("CNAME"),
|
|
Rdata: map[string]interface{}{"cname": "test.example.com"},
|
|
TTL: core.Int64Ptr(int64(120)),
|
|
}
|
|
thirdPrivateRecord := dnssvcsv1.ResourceRecord{
|
|
ID: core.StringPtr("789"),
|
|
Name: core.StringPtr("test.example.com"),
|
|
Type: core.StringPtr("TXT"),
|
|
Rdata: map[string]interface{}{"text": "\"heritage=external-dns,external-dns/owner=tower-pdns\""},
|
|
TTL: core.Int64Ptr(int64(120)),
|
|
}
|
|
privateRecords := []dnssvcsv1.ResourceRecord{firstPrivateRecord, secondPrivateRecord, thirdPrivateRecord}
|
|
privateRecordsResop := &dnssvcsv1.ListResourceRecords{
|
|
ResourceRecords: privateRecords,
|
|
Offset: core.Int64Ptr(int64(0)),
|
|
TotalCount: core.Int64Ptr(int64(1)),
|
|
}
|
|
|
|
// Setup record rData
|
|
inputARecord := &dnssvcsv1.ResourceRecordInputRdataRdataARecord{
|
|
Ip: core.StringPtr("1.2.3.4"),
|
|
}
|
|
inputCnameRecord := &dnssvcsv1.ResourceRecordInputRdataRdataCnameRecord{
|
|
Cname: core.StringPtr("test.example.com"),
|
|
}
|
|
inputTxtRecord := &dnssvcsv1.ResourceRecordInputRdataRdataTxtRecord{
|
|
Text: core.StringPtr("test"),
|
|
}
|
|
|
|
updateARecord := &dnssvcsv1.ResourceRecordUpdateInputRdataRdataARecord{
|
|
Ip: core.StringPtr("1.2.3.4"),
|
|
}
|
|
updateCnameRecord := &dnssvcsv1.ResourceRecordUpdateInputRdataRdataCnameRecord{
|
|
Cname: core.StringPtr("test.example.com"),
|
|
}
|
|
updateTxtRecord := &dnssvcsv1.ResourceRecordUpdateInputRdataRdataTxtRecord{
|
|
Text: core.StringPtr("test"),
|
|
}
|
|
|
|
// Setup mock services
|
|
mockDNSClient := &mockIbmcloudClientInterface{}
|
|
mockDNSClient.On("CreateDNSRecordWithContext", mock.Anything, mock.Anything).Return(nil, nil, nil)
|
|
mockDNSClient.On("UpdateDNSRecordWithContext", mock.Anything, mock.Anything).Return(nil, nil, nil)
|
|
mockDNSClient.On("DeleteDNSRecordWithContext", mock.Anything, mock.Anything).Return(nil, nil, nil)
|
|
mockDNSClient.On("ListAllDDNSRecordsWithContext", mock.Anything, mock.Anything).Return(publicRecordsResp, nil, nil)
|
|
mockDNSClient.On("ListDnszonesWithContext", mock.Anything, mock.Anything).Return(listZonesResp, nil, nil)
|
|
mockDNSClient.On("GetDnszoneWithContext", mock.Anything, mock.Anything).Return(&firstPrivateZone, nil, nil)
|
|
mockDNSClient.On("ListResourceRecordsWithContext", mock.Anything, mock.Anything).Return(privateRecordsResop, nil, nil)
|
|
mockDNSClient.On("CreatePermittedNetworkWithContext", mock.Anything, mock.Anything).Return(nil, nil, nil)
|
|
mockDNSClient.On("CreateResourceRecordWithContext", mock.Anything, mock.Anything).Return(nil, nil, nil)
|
|
mockDNSClient.On("DeleteResourceRecordWithContext", mock.Anything, mock.Anything).Return(nil, nil, nil)
|
|
mockDNSClient.On("UpdateResourceRecordWithContext", mock.Anything, mock.Anything).Return(nil, nil, nil)
|
|
mockDNSClient.On("NewResourceRecordInputRdataRdataARecord", mock.Anything).Return(inputARecord, nil)
|
|
mockDNSClient.On("NewResourceRecordInputRdataRdataCnameRecord", mock.Anything).Return(inputCnameRecord, nil)
|
|
mockDNSClient.On("NewResourceRecordInputRdataRdataTxtRecord", mock.Anything).Return(inputTxtRecord, nil)
|
|
mockDNSClient.On("NewResourceRecordUpdateInputRdataRdataARecord", mock.Anything).Return(updateARecord, nil)
|
|
mockDNSClient.On("NewResourceRecordUpdateInputRdataRdataCnameRecord", mock.Anything).Return(updateCnameRecord, nil)
|
|
mockDNSClient.On("NewResourceRecordUpdateInputRdataRdataTxtRecord", mock.Anything).Return(updateTxtRecord, nil)
|
|
|
|
return mockDNSClient
|
|
}
|
|
|
|
func newTestIBMCloudProvider(private bool) *IBMCloudProvider {
|
|
mockSource := &mockSource{}
|
|
endpoints := []*endpoint.Endpoint{
|
|
{
|
|
DNSName: "new.example.com",
|
|
Targets: endpoint.Targets{"4.3.2.1"},
|
|
ProviderSpecific: endpoint.ProviderSpecific{
|
|
{
|
|
Name: "ibmcloud-vpc",
|
|
Value: "crn:v1:staging:public:is:us-south:a/0821fa9f9ebcc7b7c9a0d6e9bf9442a4::vpc:be33cdad-9a03-4bfa-82ca-eadb9f1de688",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
mockSource.On("Endpoints", mock.Anything).Return(endpoints, nil, nil)
|
|
|
|
domainFilterTest := endpoint.NewDomainFilter([]string{"example.com"})
|
|
|
|
return &IBMCloudProvider{
|
|
Client: NewMockIBMCloudDNSAPI(),
|
|
source: mockSource,
|
|
domainFilter: domainFilterTest,
|
|
DryRun: false,
|
|
instanceID: "test123",
|
|
privateZone: private,
|
|
}
|
|
}
|
|
|
|
func TestPublic_Records(t *testing.T) {
|
|
p := newTestIBMCloudProvider(false)
|
|
endpoints, err := p.Records(context.Background())
|
|
if err != nil {
|
|
t.Errorf("Failed to get records: %v", err)
|
|
} else {
|
|
if len(endpoints) != 2 {
|
|
t.Errorf("Incorrect number of records: %d", len(endpoints))
|
|
}
|
|
for _, endpoint := range endpoints {
|
|
t.Logf("Endpoint for %++v", *endpoint)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPrivate_Records(t *testing.T) {
|
|
p := newTestIBMCloudProvider(true)
|
|
endpoints, err := p.Records(context.Background())
|
|
if err != nil {
|
|
t.Errorf("Failed to get records: %v", err)
|
|
} else {
|
|
if len(endpoints) != 3 {
|
|
t.Errorf("Incorrect number of records: %d", len(endpoints))
|
|
}
|
|
for _, endpoint := range endpoints {
|
|
t.Logf("Endpoint for %++v", *endpoint)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPublic_ApplyChanges(t *testing.T) {
|
|
p := newTestIBMCloudProvider(false)
|
|
|
|
changes := plan.Changes{
|
|
Create: []*endpoint.Endpoint{
|
|
{
|
|
DNSName: "newA.example.com",
|
|
RecordType: "A",
|
|
RecordTTL: 300,
|
|
Targets: endpoint.NewTargets("4.3.2.1"),
|
|
ProviderSpecific: endpoint.ProviderSpecific{
|
|
{
|
|
Name: "ibmcloud-proxied",
|
|
Value: "false",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
UpdateOld: []*endpoint.Endpoint{
|
|
{
|
|
DNSName: "test.example.com",
|
|
RecordType: "A",
|
|
RecordTTL: 180,
|
|
Targets: endpoint.NewTargets("1.2.3.4"),
|
|
ProviderSpecific: endpoint.ProviderSpecific{
|
|
{
|
|
Name: "ibmcloud-proxied",
|
|
Value: "false",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
UpdateNew: []*endpoint.Endpoint{
|
|
{
|
|
DNSName: "test.example.com",
|
|
RecordType: "A",
|
|
RecordTTL: 180,
|
|
Targets: endpoint.NewTargets("1.2.3.4", "5.6.7.8"),
|
|
ProviderSpecific: endpoint.ProviderSpecific{
|
|
{
|
|
Name: "ibmcloud-proxied",
|
|
Value: "true",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Delete: []*endpoint.Endpoint{
|
|
{
|
|
DNSName: "test.example.com",
|
|
RecordType: "TXT",
|
|
RecordTTL: 300,
|
|
Targets: endpoint.NewTargets("\"heritage=external-dns,external-dns/owner=tower-pdns\""),
|
|
},
|
|
},
|
|
}
|
|
ctx := context.Background()
|
|
err := p.ApplyChanges(ctx, &changes)
|
|
if err != nil {
|
|
t.Errorf("should not fail, %s", err)
|
|
}
|
|
}
|
|
|
|
func TestPrivate_ApplyChanges(t *testing.T) {
|
|
p := newTestIBMCloudProvider(true)
|
|
|
|
endpointsCreate, err := p.AdjustEndpoints([]*endpoint.Endpoint{
|
|
{
|
|
DNSName: "newA.example.com",
|
|
RecordType: "A",
|
|
RecordTTL: 120,
|
|
Targets: endpoint.NewTargets("4.3.2.1"),
|
|
ProviderSpecific: endpoint.ProviderSpecific{
|
|
{
|
|
Name: "ibmcloud-vpc",
|
|
Value: "crn:v1:staging:public:is:us-south:a/0821fa9f9ebcc7b7c9a0d6e9bf9442a4::vpc:be33cdad-9a03-4bfa-82ca-eadb9f1de688",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
DNSName: "newCNAME.example.com",
|
|
RecordType: "CNAME",
|
|
RecordTTL: 180,
|
|
Targets: endpoint.NewTargets("newA.example.com"),
|
|
},
|
|
{
|
|
DNSName: "newTXT.example.com",
|
|
RecordType: "TXT",
|
|
RecordTTL: 240,
|
|
Targets: endpoint.NewTargets("\"heritage=external-dns,external-dns/owner=tower-pdns\""),
|
|
},
|
|
})
|
|
assert.NoError(t, err)
|
|
|
|
endpointsUpdate, err := p.AdjustEndpoints([]*endpoint.Endpoint{
|
|
{
|
|
DNSName: "test.example.com",
|
|
RecordType: "A",
|
|
RecordTTL: 180,
|
|
Targets: endpoint.NewTargets("1.2.3.4", "5.6.7.8"),
|
|
},
|
|
})
|
|
assert.NoError(t, err)
|
|
|
|
changes := plan.Changes{
|
|
Create: endpointsCreate,
|
|
UpdateOld: []*endpoint.Endpoint{
|
|
{
|
|
DNSName: "test.example.com",
|
|
RecordType: "A",
|
|
RecordTTL: 180,
|
|
Targets: endpoint.NewTargets("1.2.3.4"),
|
|
},
|
|
},
|
|
UpdateNew: endpointsUpdate,
|
|
Delete: []*endpoint.Endpoint{
|
|
{
|
|
DNSName: "test.example.com",
|
|
RecordType: "TXT",
|
|
RecordTTL: 300,
|
|
Targets: endpoint.NewTargets("\"heritage=external-dns,external-dns/owner=tower-pdns\""),
|
|
},
|
|
},
|
|
}
|
|
ctx := context.Background()
|
|
err = p.ApplyChanges(ctx, &changes)
|
|
if err != nil {
|
|
t.Errorf("should not fail, %s", err)
|
|
}
|
|
}
|
|
|
|
func TestAdjustEndpoints(t *testing.T) {
|
|
p := newTestIBMCloudProvider(false)
|
|
endpoints := []*endpoint.Endpoint{
|
|
{
|
|
DNSName: "test.example.com",
|
|
Targets: endpoint.Targets{"1.2.3.4"},
|
|
RecordType: endpoint.RecordTypeA,
|
|
RecordTTL: 300,
|
|
Labels: endpoint.Labels{},
|
|
ProviderSpecific: endpoint.ProviderSpecific{
|
|
{
|
|
Name: "ibmcloud-proxied",
|
|
Value: "1",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
ep, err := p.AdjustEndpoints(endpoints)
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, endpoint.TTL(0), ep[0].RecordTTL)
|
|
assert.Equal(t, "test.example.com", ep[0].DNSName)
|
|
proxied, _ := ep[0].GetProviderSpecificProperty("ibmcloud-proxied")
|
|
assert.Equal(t, "true", proxied)
|
|
}
|
|
|
|
func TestPrivateZone_withFilterID(t *testing.T) {
|
|
p := newTestIBMCloudProvider(true)
|
|
p.zoneIDFilter = provider.NewZoneIDFilter([]string{"123", "456"})
|
|
|
|
zones, err := p.privateZones(context.Background())
|
|
if err != nil {
|
|
t.Errorf("should not fail, %s", err)
|
|
} else {
|
|
if len(zones) != 2 {
|
|
t.Errorf("Incorrect number of zones: %d", len(zones))
|
|
}
|
|
for _, zone := range zones {
|
|
t.Logf("zone %s", *zone.ID)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPublicConfig_Validate(t *testing.T) {
|
|
// mock http server
|
|
testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
|
|
defer GinkgoRecover()
|
|
time.Sleep(0)
|
|
|
|
// Set mock response
|
|
res.Header().Set("Content-type", "application/json")
|
|
res.WriteHeader(200)
|
|
fmt.Fprintf(res, "%s", `{"success": true, "errors": [["Errors"]], "messages": [["Messages"]], "result": [{"id": "123", "created_on": "2014-01-01T05:20:00.12345Z", "modified_on": "2014-01-01T05:20:00.12345Z", "name": "example.com", "original_registrar": "GoDaddy", "original_dnshost": "NameCheap", "status": "active", "paused": false, "original_name_servers": ["ns1.originaldnshost.com"], "name_servers": ["ns001.name.cloud.ibm.com"]}], "result_info": {"page": 1, "per_page": 20, "count": 1, "total_count": 2000}}`)
|
|
}))
|
|
zoneIDFilterTest := provider.NewZoneIDFilter([]string{"123"})
|
|
domainFilterTest := endpoint.NewDomainFilter([]string{"example.com"})
|
|
cfg := &ibmcloudConfig{
|
|
Endpoint: testServer.URL,
|
|
CRN: "crn:v1:bluemix:public:internet-svcs:global:a/bcf1865e99742d38d2d5fc3fb80a5496:a6338168-9510-4951-9d67-425612de96f0::",
|
|
}
|
|
crn := cfg.CRN
|
|
authenticator := &core.NoAuthAuthenticator{}
|
|
service, isPrivate, err := cfg.Validate(authenticator, domainFilterTest, provider.NewZoneIDFilter([]string{""}))
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, false, isPrivate)
|
|
assert.Equal(t, crn, *service.publicRecordsService.Crn)
|
|
assert.Equal(t, "123", *service.publicRecordsService.ZoneIdentifier)
|
|
|
|
service, isPrivate, err = cfg.Validate(authenticator, endpoint.NewDomainFilter([]string{""}), zoneIDFilterTest)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, false, isPrivate)
|
|
assert.Equal(t, crn, *service.publicRecordsService.Crn)
|
|
assert.Equal(t, "123", *service.publicRecordsService.ZoneIdentifier)
|
|
|
|
testServer.Close()
|
|
}
|
|
|
|
func TestPrivateConfig_Validate(t *testing.T) {
|
|
zoneIDFilterTest := provider.NewZoneIDFilter([]string{"123"})
|
|
domainFilterTest := endpoint.NewDomainFilter([]string{"example.com"})
|
|
authenticator := &core.NoAuthAuthenticator{}
|
|
cfg := &ibmcloudConfig{
|
|
Endpoint: "XXX",
|
|
CRN: "crn:v1:bluemix:public:dns-svcs:global:a/bcf1865e99742d38d2d5fc3fb80a5496:a6338168-9510-4951-9d67-425612de96f0::",
|
|
}
|
|
_, isPrivate, err := cfg.Validate(authenticator, domainFilterTest, zoneIDFilterTest)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, true, isPrivate)
|
|
}
|
|
|
|
// mockIbmcloudClientInterface is an autogenerated mock type for the ibmcloudClient type
|
|
type mockIbmcloudClientInterface struct {
|
|
mock.Mock
|
|
}
|
|
|
|
// CreateDNSRecordWithContext provides a mock function with given fields: ctx, createDnsRecordOptions
|
|
func (_m *mockIbmcloudClientInterface) CreateDNSRecordWithContext(ctx context.Context, createDnsRecordOptions *dnsrecordsv1.CreateDnsRecordOptions) (*dnsrecordsv1.DnsrecordResp, *core.DetailedResponse, error) {
|
|
ret := _m.Called(ctx, createDnsRecordOptions)
|
|
|
|
var r0 *dnsrecordsv1.DnsrecordResp
|
|
if rf, ok := ret.Get(0).(func(context.Context, *dnsrecordsv1.CreateDnsRecordOptions) *dnsrecordsv1.DnsrecordResp); ok {
|
|
r0 = rf(ctx, createDnsRecordOptions)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*dnsrecordsv1.DnsrecordResp)
|
|
}
|
|
}
|
|
|
|
var r1 *core.DetailedResponse
|
|
if rf, ok := ret.Get(1).(func(context.Context, *dnsrecordsv1.CreateDnsRecordOptions) *core.DetailedResponse); ok {
|
|
r1 = rf(ctx, createDnsRecordOptions)
|
|
} else {
|
|
if ret.Get(1) != nil {
|
|
r1 = ret.Get(1).(*core.DetailedResponse)
|
|
}
|
|
}
|
|
|
|
var r2 error
|
|
if rf, ok := ret.Get(2).(func(context.Context, *dnsrecordsv1.CreateDnsRecordOptions) error); ok {
|
|
r2 = rf(ctx, createDnsRecordOptions)
|
|
} else {
|
|
r2 = ret.Error(2)
|
|
}
|
|
|
|
return r0, r1, r2
|
|
}
|
|
|
|
// CreatePermittedNetworkWithContext provides a mock function with given fields: ctx, createPermittedNetworkOptions
|
|
func (_m *mockIbmcloudClientInterface) CreatePermittedNetworkWithContext(ctx context.Context, createPermittedNetworkOptions *dnssvcsv1.CreatePermittedNetworkOptions) (*dnssvcsv1.PermittedNetwork, *core.DetailedResponse, error) {
|
|
ret := _m.Called(ctx, createPermittedNetworkOptions)
|
|
|
|
var r0 *dnssvcsv1.PermittedNetwork
|
|
if rf, ok := ret.Get(0).(func(context.Context, *dnssvcsv1.CreatePermittedNetworkOptions) *dnssvcsv1.PermittedNetwork); ok {
|
|
r0 = rf(ctx, createPermittedNetworkOptions)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*dnssvcsv1.PermittedNetwork)
|
|
}
|
|
}
|
|
|
|
var r1 *core.DetailedResponse
|
|
if rf, ok := ret.Get(1).(func(context.Context, *dnssvcsv1.CreatePermittedNetworkOptions) *core.DetailedResponse); ok {
|
|
r1 = rf(ctx, createPermittedNetworkOptions)
|
|
} else {
|
|
if ret.Get(1) != nil {
|
|
r1 = ret.Get(1).(*core.DetailedResponse)
|
|
}
|
|
}
|
|
|
|
var r2 error
|
|
if rf, ok := ret.Get(2).(func(context.Context, *dnssvcsv1.CreatePermittedNetworkOptions) error); ok {
|
|
r2 = rf(ctx, createPermittedNetworkOptions)
|
|
} else {
|
|
r2 = ret.Error(2)
|
|
}
|
|
|
|
return r0, r1, r2
|
|
}
|
|
|
|
// CreateResourceRecordWithContext provides a mock function with given fields: ctx, createResourceRecordOptions
|
|
func (_m *mockIbmcloudClientInterface) CreateResourceRecordWithContext(ctx context.Context, createResourceRecordOptions *dnssvcsv1.CreateResourceRecordOptions) (*dnssvcsv1.ResourceRecord, *core.DetailedResponse, error) {
|
|
ret := _m.Called(ctx, createResourceRecordOptions)
|
|
|
|
var r0 *dnssvcsv1.ResourceRecord
|
|
if rf, ok := ret.Get(0).(func(context.Context, *dnssvcsv1.CreateResourceRecordOptions) *dnssvcsv1.ResourceRecord); ok {
|
|
r0 = rf(ctx, createResourceRecordOptions)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*dnssvcsv1.ResourceRecord)
|
|
}
|
|
}
|
|
|
|
var r1 *core.DetailedResponse
|
|
if rf, ok := ret.Get(1).(func(context.Context, *dnssvcsv1.CreateResourceRecordOptions) *core.DetailedResponse); ok {
|
|
r1 = rf(ctx, createResourceRecordOptions)
|
|
} else {
|
|
if ret.Get(1) != nil {
|
|
r1 = ret.Get(1).(*core.DetailedResponse)
|
|
}
|
|
}
|
|
|
|
var r2 error
|
|
if rf, ok := ret.Get(2).(func(context.Context, *dnssvcsv1.CreateResourceRecordOptions) error); ok {
|
|
r2 = rf(ctx, createResourceRecordOptions)
|
|
} else {
|
|
r2 = ret.Error(2)
|
|
}
|
|
|
|
return r0, r1, r2
|
|
}
|
|
|
|
// DeleteDNSRecordWithContext provides a mock function with given fields: ctx, deleteDnsRecordOptions
|
|
func (_m *mockIbmcloudClientInterface) DeleteDNSRecordWithContext(ctx context.Context, deleteDnsRecordOptions *dnsrecordsv1.DeleteDnsRecordOptions) (*dnsrecordsv1.DeleteDnsrecordResp, *core.DetailedResponse, error) {
|
|
ret := _m.Called(ctx, deleteDnsRecordOptions)
|
|
|
|
var r0 *dnsrecordsv1.DeleteDnsrecordResp
|
|
if rf, ok := ret.Get(0).(func(context.Context, *dnsrecordsv1.DeleteDnsRecordOptions) *dnsrecordsv1.DeleteDnsrecordResp); ok {
|
|
r0 = rf(ctx, deleteDnsRecordOptions)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*dnsrecordsv1.DeleteDnsrecordResp)
|
|
}
|
|
}
|
|
|
|
var r1 *core.DetailedResponse
|
|
if rf, ok := ret.Get(1).(func(context.Context, *dnsrecordsv1.DeleteDnsRecordOptions) *core.DetailedResponse); ok {
|
|
r1 = rf(ctx, deleteDnsRecordOptions)
|
|
} else {
|
|
if ret.Get(1) != nil {
|
|
r1 = ret.Get(1).(*core.DetailedResponse)
|
|
}
|
|
}
|
|
|
|
var r2 error
|
|
if rf, ok := ret.Get(2).(func(context.Context, *dnsrecordsv1.DeleteDnsRecordOptions) error); ok {
|
|
r2 = rf(ctx, deleteDnsRecordOptions)
|
|
} else {
|
|
r2 = ret.Error(2)
|
|
}
|
|
|
|
return r0, r1, r2
|
|
}
|
|
|
|
// DeleteResourceRecordWithContext provides a mock function with given fields: ctx, deleteResourceRecordOptions
|
|
func (_m *mockIbmcloudClientInterface) DeleteResourceRecordWithContext(ctx context.Context, deleteResourceRecordOptions *dnssvcsv1.DeleteResourceRecordOptions) (*core.DetailedResponse, error) {
|
|
ret := _m.Called(ctx, deleteResourceRecordOptions)
|
|
|
|
var r0 *core.DetailedResponse
|
|
if rf, ok := ret.Get(0).(func(context.Context, *dnssvcsv1.DeleteResourceRecordOptions) *core.DetailedResponse); ok {
|
|
r0 = rf(ctx, deleteResourceRecordOptions)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*core.DetailedResponse)
|
|
}
|
|
}
|
|
|
|
var r1 error
|
|
if rf, ok := ret.Get(1).(func(context.Context, *dnssvcsv1.DeleteResourceRecordOptions) error); ok {
|
|
r1 = rf(ctx, deleteResourceRecordOptions)
|
|
} else {
|
|
r1 = ret.Error(1)
|
|
}
|
|
|
|
return r0, r1
|
|
}
|
|
|
|
// GetDnszoneWithContext provides a mock function with given fields: ctx, getDnszoneOptions
|
|
func (_m *mockIbmcloudClientInterface) GetDnszoneWithContext(ctx context.Context, getDnszoneOptions *dnssvcsv1.GetDnszoneOptions) (*dnssvcsv1.Dnszone, *core.DetailedResponse, error) {
|
|
ret := _m.Called(ctx, getDnszoneOptions)
|
|
|
|
var r0 *dnssvcsv1.Dnszone
|
|
if rf, ok := ret.Get(0).(func(context.Context, *dnssvcsv1.GetDnszoneOptions) *dnssvcsv1.Dnszone); ok {
|
|
r0 = rf(ctx, getDnszoneOptions)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*dnssvcsv1.Dnszone)
|
|
}
|
|
}
|
|
|
|
var r1 *core.DetailedResponse
|
|
if rf, ok := ret.Get(1).(func(context.Context, *dnssvcsv1.GetDnszoneOptions) *core.DetailedResponse); ok {
|
|
r1 = rf(ctx, getDnszoneOptions)
|
|
} else {
|
|
if ret.Get(1) != nil {
|
|
r1 = ret.Get(1).(*core.DetailedResponse)
|
|
}
|
|
}
|
|
|
|
var r2 error
|
|
if rf, ok := ret.Get(2).(func(context.Context, *dnssvcsv1.GetDnszoneOptions) error); ok {
|
|
r2 = rf(ctx, getDnszoneOptions)
|
|
} else {
|
|
r2 = ret.Error(2)
|
|
}
|
|
|
|
return r0, r1, r2
|
|
}
|
|
|
|
// ListAllDDNSRecordsWithContext provides a mock function with given fields: ctx, listAllDnsRecordsOptions
|
|
func (_m *mockIbmcloudClientInterface) ListAllDDNSRecordsWithContext(ctx context.Context, listAllDnsRecordsOptions *dnsrecordsv1.ListAllDnsRecordsOptions) (*dnsrecordsv1.ListDnsrecordsResp, *core.DetailedResponse, error) {
|
|
ret := _m.Called(ctx, listAllDnsRecordsOptions)
|
|
|
|
var r0 *dnsrecordsv1.ListDnsrecordsResp
|
|
if rf, ok := ret.Get(0).(func(context.Context, *dnsrecordsv1.ListAllDnsRecordsOptions) *dnsrecordsv1.ListDnsrecordsResp); ok {
|
|
r0 = rf(ctx, listAllDnsRecordsOptions)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*dnsrecordsv1.ListDnsrecordsResp)
|
|
}
|
|
}
|
|
|
|
var r1 *core.DetailedResponse
|
|
if rf, ok := ret.Get(1).(func(context.Context, *dnsrecordsv1.ListAllDnsRecordsOptions) *core.DetailedResponse); ok {
|
|
r1 = rf(ctx, listAllDnsRecordsOptions)
|
|
} else {
|
|
if ret.Get(1) != nil {
|
|
r1 = ret.Get(1).(*core.DetailedResponse)
|
|
}
|
|
}
|
|
|
|
var r2 error
|
|
if rf, ok := ret.Get(2).(func(context.Context, *dnsrecordsv1.ListAllDnsRecordsOptions) error); ok {
|
|
r2 = rf(ctx, listAllDnsRecordsOptions)
|
|
} else {
|
|
r2 = ret.Error(2)
|
|
}
|
|
|
|
return r0, r1, r2
|
|
}
|
|
|
|
// ListDnszonesWithContext provides a mock function with given fields: ctx, listDnszonesOptions
|
|
func (_m *mockIbmcloudClientInterface) ListDnszonesWithContext(ctx context.Context, listDnszonesOptions *dnssvcsv1.ListDnszonesOptions) (*dnssvcsv1.ListDnszones, *core.DetailedResponse, error) {
|
|
ret := _m.Called(ctx, listDnszonesOptions)
|
|
|
|
var r0 *dnssvcsv1.ListDnszones
|
|
if rf, ok := ret.Get(0).(func(context.Context, *dnssvcsv1.ListDnszonesOptions) *dnssvcsv1.ListDnszones); ok {
|
|
r0 = rf(ctx, listDnszonesOptions)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*dnssvcsv1.ListDnszones)
|
|
}
|
|
}
|
|
|
|
var r1 *core.DetailedResponse
|
|
if rf, ok := ret.Get(1).(func(context.Context, *dnssvcsv1.ListDnszonesOptions) *core.DetailedResponse); ok {
|
|
r1 = rf(ctx, listDnszonesOptions)
|
|
} else {
|
|
if ret.Get(1) != nil {
|
|
r1 = ret.Get(1).(*core.DetailedResponse)
|
|
}
|
|
}
|
|
|
|
var r2 error
|
|
if rf, ok := ret.Get(2).(func(context.Context, *dnssvcsv1.ListDnszonesOptions) error); ok {
|
|
r2 = rf(ctx, listDnszonesOptions)
|
|
} else {
|
|
r2 = ret.Error(2)
|
|
}
|
|
|
|
return r0, r1, r2
|
|
}
|
|
|
|
// ListResourceRecordsWithContext provides a mock function with given fields: ctx, listResourceRecordsOptions
|
|
func (_m *mockIbmcloudClientInterface) ListResourceRecordsWithContext(ctx context.Context, listResourceRecordsOptions *dnssvcsv1.ListResourceRecordsOptions) (*dnssvcsv1.ListResourceRecords, *core.DetailedResponse, error) {
|
|
ret := _m.Called(ctx, listResourceRecordsOptions)
|
|
|
|
var r0 *dnssvcsv1.ListResourceRecords
|
|
if rf, ok := ret.Get(0).(func(context.Context, *dnssvcsv1.ListResourceRecordsOptions) *dnssvcsv1.ListResourceRecords); ok {
|
|
r0 = rf(ctx, listResourceRecordsOptions)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*dnssvcsv1.ListResourceRecords)
|
|
}
|
|
}
|
|
|
|
var r1 *core.DetailedResponse
|
|
if rf, ok := ret.Get(1).(func(context.Context, *dnssvcsv1.ListResourceRecordsOptions) *core.DetailedResponse); ok {
|
|
r1 = rf(ctx, listResourceRecordsOptions)
|
|
} else {
|
|
if ret.Get(1) != nil {
|
|
r1 = ret.Get(1).(*core.DetailedResponse)
|
|
}
|
|
}
|
|
|
|
var r2 error
|
|
if rf, ok := ret.Get(2).(func(context.Context, *dnssvcsv1.ListResourceRecordsOptions) error); ok {
|
|
r2 = rf(ctx, listResourceRecordsOptions)
|
|
} else {
|
|
r2 = ret.Error(2)
|
|
}
|
|
|
|
return r0, r1, r2
|
|
}
|
|
|
|
// NewResourceRecordInputRdataRdataARecord provides a mock function with given fields: ip
|
|
func (_m *mockIbmcloudClientInterface) NewResourceRecordInputRdataRdataARecord(ip string) (*dnssvcsv1.ResourceRecordInputRdataRdataARecord, error) {
|
|
ret := _m.Called(ip)
|
|
|
|
var r0 *dnssvcsv1.ResourceRecordInputRdataRdataARecord
|
|
if rf, ok := ret.Get(0).(func(string) *dnssvcsv1.ResourceRecordInputRdataRdataARecord); ok {
|
|
r0 = rf(ip)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*dnssvcsv1.ResourceRecordInputRdataRdataARecord)
|
|
}
|
|
}
|
|
|
|
var r1 error
|
|
if rf, ok := ret.Get(1).(func(string) error); ok {
|
|
r1 = rf(ip)
|
|
} else {
|
|
r1 = ret.Error(1)
|
|
}
|
|
|
|
return r0, r1
|
|
}
|
|
|
|
// NewResourceRecordInputRdataRdataCnameRecord provides a mock function with given fields: cname
|
|
func (_m *mockIbmcloudClientInterface) NewResourceRecordInputRdataRdataCnameRecord(cname string) (*dnssvcsv1.ResourceRecordInputRdataRdataCnameRecord, error) {
|
|
ret := _m.Called(cname)
|
|
|
|
var r0 *dnssvcsv1.ResourceRecordInputRdataRdataCnameRecord
|
|
if rf, ok := ret.Get(0).(func(string) *dnssvcsv1.ResourceRecordInputRdataRdataCnameRecord); ok {
|
|
r0 = rf(cname)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*dnssvcsv1.ResourceRecordInputRdataRdataCnameRecord)
|
|
}
|
|
}
|
|
|
|
var r1 error
|
|
if rf, ok := ret.Get(1).(func(string) error); ok {
|
|
r1 = rf(cname)
|
|
} else {
|
|
r1 = ret.Error(1)
|
|
}
|
|
|
|
return r0, r1
|
|
}
|
|
|
|
// NewResourceRecordInputRdataRdataTxtRecord provides a mock function with given fields: text
|
|
func (_m *mockIbmcloudClientInterface) NewResourceRecordInputRdataRdataTxtRecord(text string) (*dnssvcsv1.ResourceRecordInputRdataRdataTxtRecord, error) {
|
|
ret := _m.Called(text)
|
|
|
|
var r0 *dnssvcsv1.ResourceRecordInputRdataRdataTxtRecord
|
|
if rf, ok := ret.Get(0).(func(string) *dnssvcsv1.ResourceRecordInputRdataRdataTxtRecord); ok {
|
|
r0 = rf(text)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*dnssvcsv1.ResourceRecordInputRdataRdataTxtRecord)
|
|
}
|
|
}
|
|
|
|
var r1 error
|
|
if rf, ok := ret.Get(1).(func(string) error); ok {
|
|
r1 = rf(text)
|
|
} else {
|
|
r1 = ret.Error(1)
|
|
}
|
|
|
|
return r0, r1
|
|
}
|
|
|
|
// NewResourceRecordUpdateInputRdataRdataARecord provides a mock function with given fields: ip
|
|
func (_m *mockIbmcloudClientInterface) NewResourceRecordUpdateInputRdataRdataARecord(ip string) (*dnssvcsv1.ResourceRecordUpdateInputRdataRdataARecord, error) {
|
|
ret := _m.Called(ip)
|
|
|
|
var r0 *dnssvcsv1.ResourceRecordUpdateInputRdataRdataARecord
|
|
if rf, ok := ret.Get(0).(func(string) *dnssvcsv1.ResourceRecordUpdateInputRdataRdataARecord); ok {
|
|
r0 = rf(ip)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*dnssvcsv1.ResourceRecordUpdateInputRdataRdataARecord)
|
|
}
|
|
}
|
|
|
|
var r1 error
|
|
if rf, ok := ret.Get(1).(func(string) error); ok {
|
|
r1 = rf(ip)
|
|
} else {
|
|
r1 = ret.Error(1)
|
|
}
|
|
|
|
return r0, r1
|
|
}
|
|
|
|
// NewResourceRecordUpdateInputRdataRdataCnameRecord provides a mock function with given fields: cname
|
|
func (_m *mockIbmcloudClientInterface) NewResourceRecordUpdateInputRdataRdataCnameRecord(cname string) (*dnssvcsv1.ResourceRecordUpdateInputRdataRdataCnameRecord, error) {
|
|
ret := _m.Called(cname)
|
|
|
|
var r0 *dnssvcsv1.ResourceRecordUpdateInputRdataRdataCnameRecord
|
|
if rf, ok := ret.Get(0).(func(string) *dnssvcsv1.ResourceRecordUpdateInputRdataRdataCnameRecord); ok {
|
|
r0 = rf(cname)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*dnssvcsv1.ResourceRecordUpdateInputRdataRdataCnameRecord)
|
|
}
|
|
}
|
|
|
|
var r1 error
|
|
if rf, ok := ret.Get(1).(func(string) error); ok {
|
|
r1 = rf(cname)
|
|
} else {
|
|
r1 = ret.Error(1)
|
|
}
|
|
|
|
return r0, r1
|
|
}
|
|
|
|
// NewResourceRecordUpdateInputRdataRdataTxtRecord provides a mock function with given fields: text
|
|
func (_m *mockIbmcloudClientInterface) NewResourceRecordUpdateInputRdataRdataTxtRecord(text string) (*dnssvcsv1.ResourceRecordUpdateInputRdataRdataTxtRecord, error) {
|
|
ret := _m.Called(text)
|
|
|
|
var r0 *dnssvcsv1.ResourceRecordUpdateInputRdataRdataTxtRecord
|
|
if rf, ok := ret.Get(0).(func(string) *dnssvcsv1.ResourceRecordUpdateInputRdataRdataTxtRecord); ok {
|
|
r0 = rf(text)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*dnssvcsv1.ResourceRecordUpdateInputRdataRdataTxtRecord)
|
|
}
|
|
}
|
|
|
|
var r1 error
|
|
if rf, ok := ret.Get(1).(func(string) error); ok {
|
|
r1 = rf(text)
|
|
} else {
|
|
r1 = ret.Error(1)
|
|
}
|
|
|
|
return r0, r1
|
|
}
|
|
|
|
// UpdateDNSRecordWithContext provides a mock function with given fields: ctx, updateDnsRecordOptions
|
|
func (_m *mockIbmcloudClientInterface) UpdateDNSRecordWithContext(ctx context.Context, updateDnsRecordOptions *dnsrecordsv1.UpdateDnsRecordOptions) (*dnsrecordsv1.DnsrecordResp, *core.DetailedResponse, error) {
|
|
ret := _m.Called(ctx, updateDnsRecordOptions)
|
|
|
|
var r0 *dnsrecordsv1.DnsrecordResp
|
|
if rf, ok := ret.Get(0).(func(context.Context, *dnsrecordsv1.UpdateDnsRecordOptions) *dnsrecordsv1.DnsrecordResp); ok {
|
|
r0 = rf(ctx, updateDnsRecordOptions)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*dnsrecordsv1.DnsrecordResp)
|
|
}
|
|
}
|
|
|
|
var r1 *core.DetailedResponse
|
|
if rf, ok := ret.Get(1).(func(context.Context, *dnsrecordsv1.UpdateDnsRecordOptions) *core.DetailedResponse); ok {
|
|
r1 = rf(ctx, updateDnsRecordOptions)
|
|
} else {
|
|
if ret.Get(1) != nil {
|
|
r1 = ret.Get(1).(*core.DetailedResponse)
|
|
}
|
|
}
|
|
|
|
var r2 error
|
|
if rf, ok := ret.Get(2).(func(context.Context, *dnsrecordsv1.UpdateDnsRecordOptions) error); ok {
|
|
r2 = rf(ctx, updateDnsRecordOptions)
|
|
} else {
|
|
r2 = ret.Error(2)
|
|
}
|
|
|
|
return r0, r1, r2
|
|
}
|
|
|
|
// UpdateResourceRecordWithContext provides a mock function with given fields: ctx, updateResourceRecordOptions
|
|
func (_m *mockIbmcloudClientInterface) UpdateResourceRecordWithContext(ctx context.Context, updateResourceRecordOptions *dnssvcsv1.UpdateResourceRecordOptions) (*dnssvcsv1.ResourceRecord, *core.DetailedResponse, error) {
|
|
ret := _m.Called(ctx, updateResourceRecordOptions)
|
|
|
|
var r0 *dnssvcsv1.ResourceRecord
|
|
if rf, ok := ret.Get(0).(func(context.Context, *dnssvcsv1.UpdateResourceRecordOptions) *dnssvcsv1.ResourceRecord); ok {
|
|
r0 = rf(ctx, updateResourceRecordOptions)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).(*dnssvcsv1.ResourceRecord)
|
|
}
|
|
}
|
|
|
|
var r1 *core.DetailedResponse
|
|
if rf, ok := ret.Get(1).(func(context.Context, *dnssvcsv1.UpdateResourceRecordOptions) *core.DetailedResponse); ok {
|
|
r1 = rf(ctx, updateResourceRecordOptions)
|
|
} else {
|
|
if ret.Get(1) != nil {
|
|
r1 = ret.Get(1).(*core.DetailedResponse)
|
|
}
|
|
}
|
|
|
|
var r2 error
|
|
if rf, ok := ret.Get(2).(func(context.Context, *dnssvcsv1.UpdateResourceRecordOptions) error); ok {
|
|
r2 = rf(ctx, updateResourceRecordOptions)
|
|
} else {
|
|
r2 = ret.Error(2)
|
|
}
|
|
|
|
return r0, r1, r2
|
|
}
|
|
|
|
type mockSource struct {
|
|
mock.Mock
|
|
}
|
|
|
|
// Endpoints provides a mock function with given fields: ctx
|
|
func (_m *mockSource) Endpoints(ctx context.Context) ([]*endpoint.Endpoint, error) {
|
|
ret := _m.Called(ctx)
|
|
|
|
var r0 []*endpoint.Endpoint
|
|
if rf, ok := ret.Get(0).(func(context.Context) []*endpoint.Endpoint); ok {
|
|
r0 = rf(ctx)
|
|
} else {
|
|
if ret.Get(0) != nil {
|
|
r0 = ret.Get(0).([]*endpoint.Endpoint)
|
|
}
|
|
}
|
|
|
|
var r1 error
|
|
if rf, ok := ret.Get(1).(func(context.Context) error); ok {
|
|
r1 = rf(ctx)
|
|
} else {
|
|
r1 = ret.Error(1)
|
|
}
|
|
|
|
return r0, r1
|
|
}
|
|
|
|
// AddEventHandler provides a mock function with given fields: _a0, _a1
|
|
func (_m *mockSource) AddEventHandler(_a0 context.Context, _a1 func()) {
|
|
_m.Called(_a0, _a1)
|
|
}
|