Skip to content

Commit 2834fee

Browse files
author
CodingWizKid
committed
add test solver present
1 parent e28a0e4 commit 2834fee

File tree

1 file changed

+173
-20
lines changed

1 file changed

+173
-20
lines changed

internal/resolver/resolver_test.go

Lines changed: 173 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,27 @@ import (
55
"net/http"
66
"testing"
77

8+
"github.com/cert-manager/cert-manager/pkg/acme/webhook"
89
"github.com/cert-manager/cert-manager/pkg/acme/webhook/apis/acme/v1alpha1"
10+
"github.com/stackitcloud/stackit-cert-manager-webhook/internal/repository"
911
repository_mock "github.com/stackitcloud/stackit-cert-manager-webhook/internal/repository/mock"
1012
"github.com/stackitcloud/stackit-cert-manager-webhook/internal/resolver"
1113
resolver_mock "github.com/stackitcloud/stackit-cert-manager-webhook/internal/resolver/mock"
14+
stackitdnsclient "github.com/stackitcloud/stackit-dns-api-client-go"
1215
"github.com/stretchr/testify/assert"
16+
"github.com/stretchr/testify/suite"
1317
"go.uber.org/mock/gomock"
1418
v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
1519
"k8s.io/client-go/rest"
1620
)
1721

22+
var (
23+
configJson = &v1.JSON{Raw: []byte(`{"projectId":"test"}`)}
24+
challengeRequest = &v1alpha1.ChallengeRequest{
25+
Config: configJson,
26+
}
27+
)
28+
1829
func TestName(t *testing.T) {
1930
t.Parallel()
2031

@@ -45,34 +56,176 @@ func TestInitialize(t *testing.T) {
4556
})
4657
}
4758

48-
func TestStackitDnsProviderResolver_Present(t *testing.T) {
59+
type presentSuite struct {
60+
suite.Suite
61+
ctrl *gomock.Controller
62+
mockSecretFetcher *resolver_mock.MockSecretFetcher
63+
mockConfigProvider *resolver_mock.MockConfigProvider
64+
mockZoneRepositoryFactory *repository_mock.MockZoneRepositoryFactory
65+
mockRRSetRepositoryFactory *repository_mock.MockRRSetRepositoryFactory
66+
mockZoneRepository *repository_mock.MockZoneRepository
67+
mockRRSetRepository *repository_mock.MockRRSetRepository
68+
resolver webhook.Solver
69+
}
70+
71+
func (s *presentSuite) SetupTest() {
72+
s.mockSecretFetcher = resolver_mock.NewMockSecretFetcher(s.ctrl)
73+
s.mockConfigProvider = resolver_mock.NewMockConfigProvider(s.ctrl)
74+
s.mockZoneRepositoryFactory = repository_mock.NewMockZoneRepositoryFactory(s.ctrl)
75+
s.mockRRSetRepositoryFactory = repository_mock.NewMockRRSetRepositoryFactory(s.ctrl)
76+
s.mockZoneRepository = repository_mock.NewMockZoneRepository(s.ctrl)
77+
s.mockRRSetRepository = repository_mock.NewMockRRSetRepository(s.ctrl)
78+
79+
s.resolver = resolver.NewResolver(
80+
&http.Client{},
81+
s.mockZoneRepositoryFactory,
82+
s.mockRRSetRepositoryFactory,
83+
s.mockSecretFetcher,
84+
s.mockConfigProvider,
85+
)
86+
}
87+
88+
func (s *presentSuite) TearDownSuite() {
89+
s.ctrl.Finish()
90+
}
91+
92+
func TestPresentTestSuite(t *testing.T) {
4993
t.Parallel()
5094

51-
ctrl := gomock.NewController(t)
52-
defer ctrl.Finish()
95+
pSuite := new(presentSuite)
96+
pSuite.ctrl = gomock.NewController(t)
5397

54-
mockSecretFetcher := resolver_mock.NewMockSecretFetcher(ctrl)
55-
mockConfigProvider := resolver_mock.NewMockConfigProvider(ctrl)
56-
mockZoneRepositoryFactory := repository_mock.NewMockZoneRepositoryFactory(ctrl)
57-
mockRRSetRepositoryFactory := repository_mock.NewMockRRSetRepositoryFactory(ctrl)
98+
suite.Run(t, pSuite)
99+
}
58100

59-
configJson := &v1.JSON{Raw: []byte(`{"projectId":"test"}`)}
60-
mockConfigProvider.EXPECT().
101+
func (s *presentSuite) TestConfigProviderError() {
102+
s.mockConfigProvider.EXPECT().
61103
LoadConfig(configJson).
62104
Return(resolver.StackitDnsProviderConfig{}, fmt.Errorf("error decoding solver configProvider"))
63105

64-
r := resolver.NewResolver(
65-
&http.Client{},
66-
mockZoneRepositoryFactory,
67-
mockRRSetRepositoryFactory,
68-
mockSecretFetcher,
69-
mockConfigProvider,
106+
err := s.resolver.Present(challengeRequest)
107+
s.Error(err)
108+
}
109+
110+
func (s *presentSuite) TestFailGetAuthToken() {
111+
s.mockConfigProvider.EXPECT().
112+
LoadConfig(gomock.Any()).
113+
Return(resolver.StackitDnsProviderConfig{}, nil)
114+
s.mockSecretFetcher.EXPECT().
115+
StringFromSecret(gomock.Any(), gomock.Any(), gomock.Any()).
116+
Return("", fmt.Errorf("error fetching token"))
117+
118+
err := s.resolver.Present(challengeRequest)
119+
s.Error(err)
120+
s.Containsf(
121+
err.Error(),
122+
"error fetching token",
123+
"error message should contain error from secretFetcher",
70124
)
125+
}
71126

72-
ch := &v1alpha1.ChallengeRequest{
73-
Config: configJson,
74-
}
127+
func (s *presentSuite) TestFailFetchZone() {
128+
s.mockConfigProvider.EXPECT().
129+
LoadConfig(gomock.Any()).
130+
Return(resolver.StackitDnsProviderConfig{}, nil)
131+
s.mockSecretFetcher.EXPECT().
132+
StringFromSecret(gomock.Any(), gomock.Any(), gomock.Any()).
133+
Return("", nil)
134+
s.mockZoneRepositoryFactory.EXPECT().
135+
NewZoneRepository(gomock.Any()).
136+
Return(s.mockZoneRepository)
137+
s.mockZoneRepository.EXPECT().
138+
FetchZone(gomock.Any(), gomock.Any()).
139+
Return(nil, fmt.Errorf("error fetching zone"))
140+
141+
err := s.resolver.Present(challengeRequest)
142+
s.Error(err)
143+
s.Containsf(
144+
err.Error(),
145+
"error fetching zone",
146+
"error message should contain error from zoneRepository",
147+
)
148+
}
149+
150+
func (s *presentSuite) TestFailFetchRRSet() {
151+
s.mockConfigProvider.EXPECT().
152+
LoadConfig(gomock.Any()).
153+
Return(resolver.StackitDnsProviderConfig{}, nil)
154+
s.mockSecretFetcher.EXPECT().
155+
StringFromSecret(gomock.Any(), gomock.Any(), gomock.Any()).
156+
Return("", nil)
157+
s.mockZoneRepositoryFactory.EXPECT().
158+
NewZoneRepository(gomock.Any()).
159+
Return(s.mockZoneRepository)
160+
s.mockZoneRepository.EXPECT().
161+
FetchZone(gomock.Any(), gomock.Any()).
162+
Return(&stackitdnsclient.DomainZone{Id: "test"}, nil)
163+
s.mockRRSetRepositoryFactory.EXPECT().
164+
NewRRSetRepository(gomock.Any(), gomock.Any()).
165+
Return(s.mockRRSetRepository)
166+
s.mockRRSetRepository.EXPECT().
167+
FetchRRSetForZone(gomock.Any(), gomock.Any(), gomock.Any()).
168+
Return(nil, fmt.Errorf("error fetching rr set"))
169+
170+
err := s.resolver.Present(challengeRequest)
171+
s.Error(err)
172+
s.Containsf(
173+
err.Error(),
174+
"error fetching rr set",
175+
"error message should contain error from rrSetRepository",
176+
)
177+
}
178+
179+
func (s *presentSuite) TestSuccessCreateRRSet() {
180+
s.mockConfigProvider.EXPECT().
181+
LoadConfig(gomock.Any()).
182+
Return(resolver.StackitDnsProviderConfig{}, nil)
183+
s.mockSecretFetcher.EXPECT().
184+
StringFromSecret(gomock.Any(), gomock.Any(), gomock.Any()).
185+
Return("", nil)
186+
s.mockZoneRepositoryFactory.EXPECT().
187+
NewZoneRepository(gomock.Any()).
188+
Return(s.mockZoneRepository)
189+
s.mockZoneRepository.EXPECT().
190+
FetchZone(gomock.Any(), gomock.Any()).
191+
Return(&stackitdnsclient.DomainZone{Id: "test"}, nil)
192+
s.mockRRSetRepositoryFactory.EXPECT().
193+
NewRRSetRepository(gomock.Any(), gomock.Any()).
194+
Return(s.mockRRSetRepository)
195+
s.mockRRSetRepository.EXPECT().
196+
FetchRRSetForZone(gomock.Any(), gomock.Any(), gomock.Any()).
197+
Return(nil, repository.ErrRRSetNotFound)
198+
s.mockRRSetRepository.EXPECT().
199+
CreateRRSet(gomock.Any(), gomock.Any()).
200+
Return(nil)
201+
202+
err := s.resolver.Present(challengeRequest)
203+
s.NoError(err)
204+
}
75205

76-
err := r.Present(ch)
77-
assert.Error(t, err)
206+
func (s *presentSuite) TestSuccessUpdateRRSet() {
207+
s.mockConfigProvider.EXPECT().
208+
LoadConfig(gomock.Any()).
209+
Return(resolver.StackitDnsProviderConfig{}, nil)
210+
s.mockSecretFetcher.EXPECT().
211+
StringFromSecret(gomock.Any(), gomock.Any(), gomock.Any()).
212+
Return("", nil)
213+
s.mockZoneRepositoryFactory.EXPECT().
214+
NewZoneRepository(gomock.Any()).
215+
Return(s.mockZoneRepository)
216+
s.mockZoneRepository.EXPECT().
217+
FetchZone(gomock.Any(), gomock.Any()).
218+
Return(&stackitdnsclient.DomainZone{Id: "test"}, nil)
219+
s.mockRRSetRepositoryFactory.EXPECT().
220+
NewRRSetRepository(gomock.Any(), gomock.Any()).
221+
Return(s.mockRRSetRepository)
222+
s.mockRRSetRepository.EXPECT().
223+
FetchRRSetForZone(gomock.Any(), gomock.Any(), gomock.Any()).
224+
Return(&stackitdnsclient.DomainRrSet{}, nil)
225+
s.mockRRSetRepository.EXPECT().
226+
UpdateRRSet(gomock.Any(), gomock.Any()).
227+
Return(nil)
228+
229+
err := s.resolver.Present(challengeRequest)
230+
s.NoError(err)
78231
}

0 commit comments

Comments
 (0)