Skip to content

Commit 43a2ed4

Browse files
Add more tests
Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
1 parent b2d5609 commit 43a2ed4

File tree

14 files changed

+1060
-54
lines changed

14 files changed

+1060
-54
lines changed

database/common/store.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ type OrgStore interface {
5656
}
5757

5858
type EnterpriseStore interface {
59-
CreateEnterprise(ctx context.Context, name, credentialsName, webhookSecret string, poolBalancerType params.PoolBalancerType) (params.Enterprise, error)
59+
CreateEnterprise(ctx context.Context, name string, credentialsName params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType) (params.Enterprise, error)
6060
GetEnterprise(ctx context.Context, name, endpointName string) (params.Enterprise, error)
6161
GetEnterpriseByID(ctx context.Context, enterpriseID string) (params.Enterprise, error)
6262
ListEnterprises(ctx context.Context) ([]params.Enterprise, error)

database/sql/enterprise.go

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,14 @@ import (
2828
"github.com/cloudbase/garm/params"
2929
)
3030

31-
func (s *sqlDatabase) CreateEnterprise(ctx context.Context, name, credentialsName, webhookSecret string, poolBalancerType params.PoolBalancerType) (paramEnt params.Enterprise, err error) {
31+
func (s *sqlDatabase) CreateEnterprise(ctx context.Context, name string, credentials params.ForgeCredentials, webhookSecret string, poolBalancerType params.PoolBalancerType) (paramEnt params.Enterprise, err error) {
3232
if webhookSecret == "" {
3333
return params.Enterprise{}, errors.New("creating enterprise: missing secret")
3434
}
35+
if credentials.ForgeType != params.GithubEndpointType {
36+
return params.Enterprise{}, errors.Wrap(runnerErrors.ErrBadRequest, "enterprises are not supported on this forge type")
37+
}
38+
3539
secret, err := util.Seal([]byte(webhookSecret), []byte(s.cfg.Passphrase))
3640
if err != nil {
3741
return params.Enterprise{}, errors.Wrap(err, "encoding secret")
@@ -48,24 +52,18 @@ func (s *sqlDatabase) CreateEnterprise(ctx context.Context, name, credentialsNam
4852
PoolBalancerType: poolBalancerType,
4953
}
5054
err = s.conn.Transaction(func(tx *gorm.DB) error {
51-
creds, err := s.getGithubCredentialsByName(ctx, tx, credentialsName, false)
52-
if err != nil {
53-
return errors.Wrap(err, "creating enterprise")
54-
}
55-
if creds.EndpointName == nil {
56-
return errors.Wrap(runnerErrors.ErrUnprocessable, "credentials have no endpoint")
57-
}
58-
newEnterprise.CredentialsID = &creds.ID
59-
newEnterprise.EndpointName = creds.EndpointName
55+
newEnterprise.CredentialsID = &credentials.ID
56+
newEnterprise.EndpointName = &credentials.Endpoint.Name
6057

6158
q := tx.Create(&newEnterprise)
6259
if q.Error != nil {
6360
return errors.Wrap(q.Error, "creating enterprise")
6461
}
6562

66-
newEnterprise.Credentials = creds
67-
newEnterprise.Endpoint = creds.Endpoint
68-
63+
newEnterprise, err = s.getEnterpriseByID(ctx, tx, newEnterprise.ID.String(), "Pools", "Credentials", "Endpoint", "Credentials.Endpoint")
64+
if err != nil {
65+
return errors.Wrap(err, "creating enterprise")
66+
}
6967
return nil
7068
})
7169
if err != nil {

database/sql/enterprise_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ func (s *EnterpriseTestSuite) SetupTest() {
9999
enterprise, err := db.CreateEnterprise(
100100
s.adminCtx,
101101
fmt.Sprintf("test-enterprise-%d", i),
102-
s.testCreds.Name,
102+
s.testCreds,
103103
fmt.Sprintf("test-webhook-secret-%d", i),
104104
params.PoolBalancerTypeRoundRobin,
105105
)
@@ -178,7 +178,7 @@ func (s *EnterpriseTestSuite) TestCreateEnterprise() {
178178
enterprise, err := s.Store.CreateEnterprise(
179179
s.adminCtx,
180180
s.Fixtures.CreateEnterpriseParams.Name,
181-
s.Fixtures.CreateEnterpriseParams.CredentialsName,
181+
s.testCreds,
182182
s.Fixtures.CreateEnterpriseParams.WebhookSecret,
183183
params.PoolBalancerTypeRoundRobin)
184184

@@ -209,7 +209,7 @@ func (s *EnterpriseTestSuite) TestCreateEnterpriseInvalidDBPassphrase() {
209209
_, err = sqlDB.CreateEnterprise(
210210
s.adminCtx,
211211
s.Fixtures.CreateEnterpriseParams.Name,
212-
s.Fixtures.CreateEnterpriseParams.CredentialsName,
212+
s.testCreds,
213213
s.Fixtures.CreateEnterpriseParams.WebhookSecret,
214214
params.PoolBalancerTypeRoundRobin)
215215

@@ -235,7 +235,7 @@ func (s *EnterpriseTestSuite) TestCreateEnterpriseDBCreateErr() {
235235
_, err := s.StoreSQLMocked.CreateEnterprise(
236236
s.adminCtx,
237237
s.Fixtures.CreateEnterpriseParams.Name,
238-
s.Fixtures.CreateEnterpriseParams.CredentialsName,
238+
s.testCreds,
239239
s.Fixtures.CreateEnterpriseParams.WebhookSecret,
240240
params.PoolBalancerTypeRoundRobin)
241241

database/sql/gitea.go

Lines changed: 16 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func (s *sqlDatabase) CreateGiteaEndpoint(_ context.Context, param params.Create
2222
var endpoint GithubEndpoint
2323
err = s.conn.Transaction(func(tx *gorm.DB) error {
2424
if err := tx.Where("name = ?", param.Name).First(&endpoint).Error; err == nil {
25-
return errors.Wrap(runnerErrors.ErrDuplicateEntity, "github endpoint already exists")
25+
return errors.Wrap(runnerErrors.ErrDuplicateEntity, "gitea endpoint already exists")
2626
}
2727
endpoint = GithubEndpoint{
2828
Name: param.Name,
@@ -34,16 +34,16 @@ func (s *sqlDatabase) CreateGiteaEndpoint(_ context.Context, param params.Create
3434
}
3535

3636
if err := tx.Create(&endpoint).Error; err != nil {
37-
return errors.Wrap(err, "creating github endpoint")
37+
return errors.Wrap(err, "creating gitea endpoint")
3838
}
3939
return nil
4040
})
4141
if err != nil {
42-
return params.ForgeEndpoint{}, errors.Wrap(err, "creating github endpoint")
42+
return params.ForgeEndpoint{}, errors.Wrap(err, "creating gitea endpoint")
4343
}
4444
ghEndpoint, err = s.sqlToCommonGithubEndpoint(endpoint)
4545
if err != nil {
46-
return params.ForgeEndpoint{}, errors.Wrap(err, "converting github endpoint")
46+
return params.ForgeEndpoint{}, errors.Wrap(err, "converting gitea endpoint")
4747
}
4848
return ghEndpoint, nil
4949
}
@@ -52,25 +52,21 @@ func (s *sqlDatabase) ListGiteaEndpoints(_ context.Context) ([]params.ForgeEndpo
5252
var endpoints []GithubEndpoint
5353
err := s.conn.Where("endpoint_type = ?", params.GiteaEndpointType).Find(&endpoints).Error
5454
if err != nil {
55-
return nil, errors.Wrap(err, "fetching github endpoints")
55+
return nil, errors.Wrap(err, "fetching gitea endpoints")
5656
}
5757

5858
var ret []params.ForgeEndpoint
5959
for _, ep := range endpoints {
6060
commonEp, err := s.sqlToCommonGithubEndpoint(ep)
6161
if err != nil {
62-
return nil, errors.Wrap(err, "converting github endpoint")
62+
return nil, errors.Wrap(err, "converting gitea endpoint")
6363
}
6464
ret = append(ret, commonEp)
6565
}
6666
return ret, nil
6767
}
6868

6969
func (s *sqlDatabase) UpdateGiteaEndpoint(_ context.Context, name string, param params.UpdateGiteaEndpointParams) (ghEndpoint params.ForgeEndpoint, err error) {
70-
if name == defaultGithubEndpoint {
71-
return params.ForgeEndpoint{}, runnerErrors.NewBadRequestError("cannot update default endpoint %s", defaultGithubEndpoint)
72-
}
73-
7470
defer func() {
7571
if err == nil {
7672
s.sendNotify(common.GithubEndpointEntityType, common.UpdateOperation, ghEndpoint)
@@ -118,7 +114,6 @@ func (s *sqlDatabase) UpdateGiteaEndpoint(_ context.Context, name string, param
118114

119115
func (s *sqlDatabase) GetGiteaEndpoint(_ context.Context, name string) (params.ForgeEndpoint, error) {
120116
var endpoint GithubEndpoint
121-
122117
err := s.conn.Where("name = ? and endpoint_type = ?", name, params.GiteaEndpointType).First(&endpoint).Error
123118
if err != nil {
124119
if errors.Is(err, gorm.ErrRecordNotFound) {
@@ -150,7 +145,7 @@ func (s *sqlDatabase) DeleteGiteaEndpoint(_ context.Context, name string) (err e
150145
}
151146

152147
var credsCount int64
153-
if err := tx.Model(&GithubCredentials{}).Where("endpoint_name = ?", endpoint.Name).Count(&credsCount).Error; err != nil {
148+
if err := tx.Model(&GiteaCredentials{}).Where("endpoint_name = ?", endpoint.Name).Count(&credsCount).Error; err != nil {
154149
if !errors.Is(err, gorm.ErrRecordNotFound) {
155150
return errors.Wrap(err, "fetching gitea credentials")
156151
}
@@ -170,15 +165,8 @@ func (s *sqlDatabase) DeleteGiteaEndpoint(_ context.Context, name string) (err e
170165
}
171166
}
172167

173-
var entCnt int64
174-
if err := tx.Model(&Enterprise{}).Where("endpoint_name = ?", endpoint.Name).Count(&entCnt).Error; err != nil {
175-
if !errors.Is(err, gorm.ErrRecordNotFound) {
176-
return errors.Wrap(err, "fetching gitea enterprises")
177-
}
178-
}
179-
180-
if credsCount > 0 || repoCnt > 0 || orgCnt > 0 || entCnt > 0 {
181-
return errors.New("cannot delete endpoint with associated entities")
168+
if credsCount > 0 || repoCnt > 0 || orgCnt > 0 {
169+
return runnerErrors.NewBadRequestError("cannot delete endpoint with associated entities")
182170
}
183171

184172
if err := tx.Unscoped().Delete(&endpoint).Error; err != nil {
@@ -195,7 +183,7 @@ func (s *sqlDatabase) DeleteGiteaEndpoint(_ context.Context, name string) (err e
195183
func (s *sqlDatabase) CreateGiteaCredentials(ctx context.Context, param params.CreateGiteaCredentialsParams) (gtCreds params.ForgeCredentials, err error) {
196184
userID, err := getUIDFromContext(ctx)
197185
if err != nil {
198-
return params.ForgeCredentials{}, errors.Wrap(err, "creating github credentials")
186+
return params.ForgeCredentials{}, errors.Wrap(err, "creating gitea credentials")
199187
}
200188
if param.Endpoint == "" {
201189
return params.ForgeCredentials{}, errors.Wrap(runnerErrors.ErrBadRequest, "endpoint name is required")
@@ -211,22 +199,20 @@ func (s *sqlDatabase) CreateGiteaCredentials(ctx context.Context, param params.C
211199
var endpoint GithubEndpoint
212200
if err := tx.Where("name = ? and endpoint_type = ?", param.Endpoint, params.GiteaEndpointType).First(&endpoint).Error; err != nil {
213201
if errors.Is(err, gorm.ErrRecordNotFound) {
214-
return errors.Wrap(runnerErrors.ErrNotFound, "github endpoint not found")
202+
return errors.Wrap(runnerErrors.ErrNotFound, "gitea endpoint not found")
215203
}
216-
return errors.Wrap(err, "fetching github endpoint")
204+
return errors.Wrap(err, "fetching gitea endpoint")
217205
}
218206

219207
if err := tx.Where("name = ? and user_id = ?", param.Name, userID).First(&creds).Error; err == nil {
220-
return errors.Wrap(runnerErrors.ErrDuplicateEntity, "github credentials already exists")
208+
return errors.Wrap(runnerErrors.ErrDuplicateEntity, "gitea credentials already exists")
221209
}
222210

223211
var data []byte
224212
var err error
225213
switch param.AuthType {
226214
case params.ForgeAuthTypePAT:
227215
data, err = s.marshalAndSeal(param.PAT)
228-
case params.ForgeAuthTypeApp:
229-
data, err = s.marshalAndSeal(param.App)
230216
default:
231217
return errors.Wrap(runnerErrors.ErrBadRequest, "invalid auth type")
232218
}
@@ -244,19 +230,19 @@ func (s *sqlDatabase) CreateGiteaCredentials(ctx context.Context, param params.C
244230
}
245231

246232
if err := tx.Create(&creds).Error; err != nil {
247-
return errors.Wrap(err, "creating github credentials")
233+
return errors.Wrap(err, "creating gitea credentials")
248234
}
249235
// Skip making an extra query.
250236
creds.Endpoint = endpoint
251237

252238
return nil
253239
})
254240
if err != nil {
255-
return params.ForgeCredentials{}, errors.Wrap(err, "creating github credentials")
241+
return params.ForgeCredentials{}, errors.Wrap(err, "creating gitea credentials")
256242
}
257243
gtCreds, err = s.sqlGiteaToCommonForgeCredentials(creds)
258244
if err != nil {
259-
return params.ForgeCredentials{}, errors.Wrap(err, "converting github credentials")
245+
return params.ForgeCredentials{}, errors.Wrap(err, "converting gitea credentials")
260246
}
261247
return gtCreds, nil
262248
}

0 commit comments

Comments
 (0)