@@ -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+
1829func 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