tests: clean up code (#2612)

This commit is contained in:
Ludovic Fernandez 2025-08-04 14:46:37 +02:00 committed by GitHub
commit fc21d23f7f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
26 changed files with 106 additions and 76 deletions

View file

@ -167,11 +167,11 @@ func TestPresent_httpStorage(t *testing.T) {
for _, test := range testCases {
t.Run(test.desc, func(t *testing.T) {
config := servermock.NewBuilder(func(server *httptest.Server) (*Config, error) {
cfg := NewDefaultConfig()
cfg.StorageBaseURL = server.URL
provider := servermock.NewBuilder(func(server *httptest.Server) (*DNSProvider, error) {
config := NewDefaultConfig()
config.StorageBaseURL = server.URL
return cfg, nil
return NewDNSProviderConfig(config)
}).
// Fetch
Route("GET /example.com", servermock.Noop().WithStatusCode(http.StatusNotFound)).
@ -179,15 +179,12 @@ func TestPresent_httpStorage(t *testing.T) {
Route("POST /example.com", servermock.Noop().WithStatusCode(test.StatusCode)).
Build(t)
p, err := NewDNSProviderConfig(config)
require.NoError(t, err)
client := newMockClient().WithRegisterAccount(egTestAccount)
p.client = client
provider.client = client
err = p.Present(egDomain, "foo", egKeyAuth)
err := provider.Present(egDomain, "foo", egKeyAuth)
if test.ExpectedError != nil {
assert.Equal(t, test.ExpectedError, err)
assert.EqualError(t, err, test.ExpectedError.Error())
assert.True(t, client.registerAccountCalled)
assert.False(t, client.updateTXTRecordCalled)
} else {
@ -222,22 +219,19 @@ func TestRegister_httpStorage(t *testing.T) {
for _, test := range testCases {
t.Run(test.Name, func(t *testing.T) {
config := servermock.NewBuilder(func(server *httptest.Server) (*Config, error) {
cfg := NewDefaultConfig()
cfg.StorageBaseURL = server.URL
provider := servermock.NewBuilder(func(server *httptest.Server) (*DNSProvider, error) {
config := NewDefaultConfig()
config.StorageBaseURL = server.URL
return cfg, nil
return NewDNSProviderConfig(config)
}).
// Put
Route("POST /example.com", servermock.Noop().WithStatusCode(test.StatusCode)).
Build(t)
p, err := NewDNSProviderConfig(config)
require.NoError(t, err)
provider.client = newMockClient().WithRegisterAccount(egTestAccount)
p.client = newMockClient().WithRegisterAccount(egTestAccount)
acc, err := p.register(t.Context(), egDomain, egFQDN)
acc, err := provider.register(t.Context(), egDomain, egFQDN)
if test.ExpectedError != nil {
assert.Equal(t, test.ExpectedError, err)
} else {

View file

@ -58,7 +58,7 @@ func TestHTTPStorage_Fetch_error(t *testing.T) {
func TestHTTPStorage_FetchAll(t *testing.T) {
storage := mockBuilder().
Route("GET /", servermock.ResponseFromFixture("fetch-all.json")).
Route("GET /", servermock.ResponseFromFixture("fetch_all.json")).
Build(t)
account, err := storage.FetchAll(t.Context())
@ -98,7 +98,7 @@ func TestHTTPStorage_FetchAll_error(t *testing.T) {
func TestHTTPStorage_Put(t *testing.T) {
storage := mockBuilder().
Route("POST /example.com", nil,
servermock.CheckRequestJSONBodyFromFixture("request-body.json")).
servermock.CheckRequestJSONBodyFromFixture("fetch-request.json")).
Build(t)
account := goacmedns.Account{
@ -137,7 +137,7 @@ func TestHTTPStorage_Put_CNAME_created(t *testing.T) {
Route("POST /example.com",
servermock.Noop().
WithStatusCode(http.StatusCreated),
servermock.CheckRequestJSONBodyFromFixture("request-body.json")).
servermock.CheckRequestJSONBodyFromFixture("fetch-request.json")).
Build(t)
account := goacmedns.Account{

View file

@ -13,6 +13,7 @@ import (
func setupIdentifierClient(server *httptest.Server) (*Identifier, error) {
client := NewIdentifier("user", "secret")
client.authEndpoint = server.URL
client.HTTPClient = server.Client()
return client, nil
}

View file

@ -2,13 +2,13 @@
package bindman
import (
"errors"
"net/http"
"net/http/httptest"
"testing"
"time"
"github.com/go-acme/lego/v4/platform/tester"
bindmanClient "github.com/labbsr0x/bindman-dns-webhook/src/client"
"github.com/go-acme/lego/v4/platform/tester/servermock"
"github.com/stretchr/testify/require"
)
@ -106,10 +106,24 @@ func TestNewDNSProviderConfig(t *testing.T) {
}
}
func mockBuilder() *servermock.Builder[*DNSProvider] {
return servermock.NewBuilder(
func(server *httptest.Server) (*DNSProvider, error) {
config := NewDefaultConfig()
config.BaseURL = server.URL
config.HTTPClient = server.Client()
return NewDNSProviderConfig(config)
},
servermock.CheckHeader().
WithJSONHeaders().
With("User-Agent", "bindman-dns-webhook-client"))
}
func TestDNSProvider_Present(t *testing.T) {
testCases := []struct {
name string
client *bindmanClient.DNSWebhookClient
mock *servermock.Builder[*DNSProvider]
domain string
token string
keyAuth string
@ -117,28 +131,31 @@ func TestDNSProvider_Present(t *testing.T) {
}{
{
name: "success when add record function return no error",
client: &bindmanClient.DNSWebhookClient{
ClientAPI: &MockHTTPClientAPI{Status: http.StatusNoContent},
},
domain: "hello.test.com",
mock: mockBuilder().
Route("POST /records",
servermock.Noop().WithStatusCode(http.StatusNoContent),
servermock.CheckRequestJSONBodyFromFixture("add_record-request.json"),
),
domain: "example.com",
keyAuth: "szDTG4zmM0GsKG91QAGO2M4UYOJMwU8oFpWOP7eTjCw",
expectError: false,
},
{
name: "error when add record function return an error",
client: &bindmanClient.DNSWebhookClient{
ClientAPI: &MockHTTPClientAPI{Error: errors.New("error adding record")},
},
domain: "hello.test.com",
mock: mockBuilder().
Route("POST /records",
servermock.ResponseFromFixture("error.json"),
),
domain: "example.com",
keyAuth: "szDTG4zmM0GsKG91QAGO2M4UYOJMwU8oFpWOP7eTjCw",
expectError: true,
},
}
for _, test := range testCases {
t.Run(test.name, func(t *testing.T) {
d := &DNSProvider{client: test.client}
provider := test.mock.Build(t)
err := d.Present(test.domain, test.token, test.keyAuth)
err := provider.Present(test.domain, test.token, test.keyAuth)
if test.expectError {
require.Error(t, err)
} else {
@ -151,7 +168,7 @@ func TestDNSProvider_Present(t *testing.T) {
func TestDNSProvider_CleanUp(t *testing.T) {
testCases := []struct {
name string
client *bindmanClient.DNSWebhookClient
mock *servermock.Builder[*DNSProvider]
domain string
token string
keyAuth string
@ -159,30 +176,33 @@ func TestDNSProvider_CleanUp(t *testing.T) {
}{
{
name: "success when remove record function return no error",
client: &bindmanClient.DNSWebhookClient{
ClientAPI: &MockHTTPClientAPI{Status: http.StatusNoContent},
},
domain: "hello.test.com",
mock: mockBuilder().
Route("DELETE /records/_acme-challenge.example.com./TXT",
servermock.Noop().WithStatusCode(http.StatusNoContent),
),
domain: "example.com",
keyAuth: "szDTG4zmM0GsKG91QAGO2M4UYOJMwU8oFpWOP7eTjCw",
expectError: false,
},
{
name: "error when remove record function return an error",
client: &bindmanClient.DNSWebhookClient{
ClientAPI: &MockHTTPClientAPI{Error: errors.New("error adding record")},
},
domain: "hello.test.com",
mock: mockBuilder().
Route("DELETE /records/_acme-challenge.example.com./TXT",
servermock.ResponseFromFixture("error.json"),
),
domain: "example.com",
keyAuth: "szDTG4zmM0GsKG91QAGO2M4UYOJMwU8oFpWOP7eTjCw",
expectError: true,
},
}
for _, test := range testCases {
t.Run(test.name, func(t *testing.T) {
d := &DNSProvider{client: test.client}
provider := test.mock.Build(t)
err := d.CleanUp(test.domain, test.token, test.keyAuth)
err := provider.CleanUp(test.domain, test.token, test.keyAuth)
if test.expectError {
require.Error(t, err)
require.ErrorContains(t, err, "bindman: ERROR (400): bar; ")
} else {
require.NoError(t, err)
}
@ -217,25 +237,3 @@ func TestLiveCleanUp(t *testing.T) {
err = provider.CleanUp(envTest.GetDomain(), "", "123d==")
require.NoError(t, err)
}
type MockHTTPClientAPI struct {
Data []byte
Status int
Error error
}
func (m *MockHTTPClientAPI) Put(url string, data []byte) (*http.Response, []byte, error) {
return &http.Response{StatusCode: m.Status}, m.Data, m.Error
}
func (m *MockHTTPClientAPI) Post(url string, data []byte) (*http.Response, []byte, error) {
return &http.Response{StatusCode: m.Status}, m.Data, m.Error
}
func (m *MockHTTPClientAPI) Get(url string) (*http.Response, []byte, error) {
return &http.Response{StatusCode: m.Status}, m.Data, m.Error
}
func (m *MockHTTPClientAPI) Delete(url string) (*http.Response, []byte, error) {
return &http.Response{StatusCode: m.Status}, m.Data, m.Error
}

View file

@ -0,0 +1,5 @@
{
"name": "_acme-challenge.example.com.",
"value": "_EYMkjukXEMcXbnvpT6WLESzfYhxH190NKTBo3cpu-E",
"type": "TXT"
}

View file

@ -0,0 +1,5 @@
{
"message": "bar",
"code": 400,
"details": ["foo"]
}

View file

@ -132,6 +132,7 @@ func mockBuilder() *servermock.Builder[*DNSProvider] {
return servermock.NewBuilder(
func(server *httptest.Server) (*DNSProvider, error) {
config := NewDefaultConfig()
config.HTTPClient = server.Client()
config.Token = "secret"
p, err := NewDNSProviderConfig(config)

View file

@ -304,6 +304,7 @@ func mockBuilder() *servermock.Builder[*DNSProvider] {
config.AuthEmail = "foo@example.com"
config.AuthKey = "secret"
config.BaseURL = server.URL
config.HTTPClient = server.Client()
return NewDNSProviderConfig(config)
},

View file

@ -126,6 +126,7 @@ func TestDNSProvider(t *testing.T) {
func(server *httptest.Server) (*DNSProvider, error) {
config := NewDefaultConfig()
config.BaseURL = server.URL + "/"
config.HTTPClient = server.Client()
config.APIKey = "123412341234123412341234"
return NewDNSProviderConfig(config)

View file

@ -96,6 +96,7 @@ func TestDNSProvider(t *testing.T) {
config := NewDefaultConfig()
config.PersonalAccessToken = "123412341234123412341234"
config.BaseURL = server.URL
config.HTTPClient = server.Client()
return NewDNSProviderConfig(config)
},

View file

@ -352,7 +352,7 @@ func TestLiveCleanUp(t *testing.T) {
func mockBuilder() *servermock.Builder[*DNSProvider] {
return servermock.NewBuilder(func(server *httptest.Server) (*DNSProvider, error) {
config := NewDefaultConfig()
config.HTTPClient = &http.Client{Timeout: 10 * time.Second}
config.HTTPClient = server.Client()
config.Project = "manhattan"
p, err := NewDNSProviderConfig(config)

View file

@ -227,6 +227,7 @@ func mockBuilder(mode string) *servermock.Builder[*DNSProvider] {
return servermock.NewBuilder(
func(server *httptest.Server) (*DNSProvider, error) {
config := NewDefaultConfig()
config.HTTPClient = server.Client()
config.Endpoint, _ = url.Parse(server.URL)
config.Mode = mode
@ -238,6 +239,7 @@ func mockBuilderWithPathPrefix(mode, prefix string) *servermock.Builder[*DNSProv
return servermock.NewBuilder(
func(server *httptest.Server) (*DNSProvider, error) {
config := NewDefaultConfig()
config.HTTPClient = server.Client()
config.Endpoint, _ = url.Parse(server.URL + prefix)
config.Mode = mode
@ -249,6 +251,7 @@ func mockBuilderWithBasicAuth(username, password string) *servermock.Builder[*DN
return servermock.NewBuilder(
func(server *httptest.Server) (*DNSProvider, error) {
config := NewDefaultConfig()
config.HTTPClient = server.Client()
config.Endpoint, _ = url.Parse(server.URL)
config.Username = username
config.Password = password

View file

@ -60,6 +60,7 @@ func TestDNSProvider_Present(t *testing.T) {
func(server *httptest.Server) (*DNSProvider, error) {
return &DNSProvider{
client: lightsail.NewFromConfig(aws.Config{
HTTPClient: server.Client(),
Credentials: credentials.NewStaticCredentialsProvider("abc", "123", " "),
Region: "mock-region",
BaseEndpoint: aws.String(server.URL),

View file

@ -15,6 +15,7 @@ func mockBuilder(password string) *servermock.Builder[*Client] {
return servermock.NewBuilder[*Client](
func(server *httptest.Server) (*Client, error) {
client := NewClient("apiuser", password)
client.HTTPClient = server.Client()
client.BaseURL = server.URL + "/"
return client, nil

View file

@ -1,10 +1,8 @@
package namecheap
import (
"net/http"
"net/http/httptest"
"testing"
"time"
"github.com/go-acme/lego/v4/platform/tester/servermock"
"github.com/stretchr/testify/assert"
@ -179,11 +177,11 @@ func Test_newPseudoRecord_domainSplit(t *testing.T) {
func mockBuilder() *servermock.Builder[*DNSProvider] {
return servermock.NewBuilder(func(server *httptest.Server) (*DNSProvider, error) {
config := NewDefaultConfig()
config.HTTPClient = server.Client()
config.BaseURL = server.URL
config.APIUser = envTestUser
config.APIKey = envTestKey
config.ClientIP = envTestClientIP
config.HTTPClient = &http.Client{Timeout: 60 * time.Second}
return NewDNSProviderConfig(config)
})

View file

@ -279,6 +279,7 @@ func mockBuilder() *servermock.Builder[*DNSProvider] {
return servermock.NewBuilder(
func(server *httptest.Server) (*DNSProvider, error) {
config := NewDefaultConfig()
config.HTTPClient = server.Client()
config.UserName = "user"
config.Password = "secret"
config.DomainName = "example.com"

View file

@ -113,6 +113,7 @@ func mockBuilder() *servermock.Builder[*DNSProvider] {
return servermock.NewBuilder(
func(server *httptest.Server) (*DNSProvider, error) {
config := NewDefaultConfig()
config.HTTPClient = server.Client()
config.APIUser = "testUser"
config.APIKey = "testKey"
config.HTTPClient = server.Client()

View file

@ -13,6 +13,7 @@ func mockBuilder() *servermock.Builder[*Client] {
return servermock.NewBuilder[*Client](
func(server *httptest.Server) (*Client, error) {
client := NewClient("user", "secret")
client.HTTPClient = server.Client()
client.baseURL, _ = url.Parse(server.URL)
return client, nil

View file

@ -146,6 +146,7 @@ func TestDNSProvider_Present(t *testing.T) {
provider := servermock.NewBuilder(
func(server *httptest.Server) (*DNSProvider, error) {
cfg := aws.Config{
HTTPClient: server.Client(),
Credentials: credentials.NewStaticCredentialsProvider("abc", "123", " "),
Region: "mock-region",
BaseEndpoint: aws.String(server.URL),

View file

@ -17,6 +17,7 @@ func mockBuilder() *servermock.Builder[*Client] {
func(server *httptest.Server) (*Client, error) {
client := NewClient("secret")
client.baseURL, _ = url.Parse(server.URL)
client.HTTPClient = server.Client()
return client, nil
},

View file

@ -252,6 +252,13 @@ func mockBuilder() *servermock.Builder[*DNSProvider] {
EnvEndpoint: server.URL,
})
return NewDNSProvider()
provider, err := NewDNSProvider()
if err != nil {
return nil, err
}
provider.client.HTTPClient = server.Client()
return provider, nil
})
}

View file

@ -163,7 +163,14 @@ func mockBuilder() *servermock.Builder[*DNSProvider] {
config.SecretKey = "bar"
config.Host = server.URL
return NewDNSProviderConfig(config)
provider, err := NewDNSProviderConfig(config)
if err != nil {
return nil, err
}
provider.client.HTTPClient = server.Client()
return provider, nil
})
}

View file

@ -164,7 +164,7 @@ func TestDNSProvider_getHostedZone(t *testing.T) {
provider := servermock.NewBuilder(
func(server *httptest.Server) (*DNSProvider, error) {
client := govultr.NewClient(nil)
client := govultr.NewClient(server.Client())
err := client.SetBaseURL(server.URL)
require.NoError(t, err)

View file

@ -273,6 +273,7 @@ func mockBuilder(username, apiKey string) *servermock.Builder[*DNSProvider] {
return servermock.NewBuilder(
func(server *httptest.Server) (*DNSProvider, error) {
config := NewDefaultConfig()
config.HTTPClient = server.Client()
config.Endpoint, _ = url.Parse(server.URL)
config.Username = username
config.APIKey = apiKey