Skip to content

Commit 171290d

Browse files
committed
Add integration tests for private.NoServCommand and private.ServCommand
modules/private/serv.go has two major functions that are missing testcases to ensure that Deploy and normal SSH keys work correctly. This PR adds some basic integration tests for these. Signed-off-by: Andrew Thornton <art27@cantab.net>
1 parent 01fc24c commit 171290d

File tree

1 file changed

+154
-0
lines changed

1 file changed

+154
-0
lines changed

integrations/api_private_serv_test.go

+154
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
// Copyright 2021 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package integrations
6+
7+
import (
8+
"context"
9+
"net/url"
10+
"testing"
11+
12+
"code.gitea.io/gitea/models"
13+
"code.gitea.io/gitea/modules/private"
14+
"github.com/stretchr/testify/assert"
15+
)
16+
17+
func TestAPIPrivateNoServ(t *testing.T) {
18+
onGiteaRun(t, func(*testing.T, *url.URL) {
19+
ctx, cancel := context.WithCancel(context.Background())
20+
defer cancel()
21+
key, user, err := private.ServNoCommand(ctx, 1)
22+
assert.NoError(t, err)
23+
assert.Equal(t, int64(2), user.ID)
24+
assert.Equal(t, "user2", user.Name)
25+
assert.Equal(t, int64(1), key.ID)
26+
assert.Equal(t, "user2@localhost", key.Name)
27+
28+
deployKey, err := models.AddDeployKey(1, "test-deploy", "sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBGXEEzWmm1dxb+57RoK5KVCL0w2eNv9cqJX2AGGVlkFsVDhOXHzsadS3LTK4VlEbbrDMJdoti9yM8vclA8IeRacAAAAEc3NoOg== nocomment", false)
29+
assert.NoError(t, err)
30+
31+
key, user, err = private.ServNoCommand(ctx, deployKey.KeyID)
32+
assert.NoError(t, err)
33+
assert.Empty(t, user)
34+
assert.Equal(t, deployKey.KeyID, key.ID)
35+
assert.Equal(t, "test-deploy", key.Name)
36+
})
37+
}
38+
39+
func TestAPIPrivateServ(t *testing.T) {
40+
onGiteaRun(t, func(*testing.T, *url.URL) {
41+
ctx, cancel := context.WithCancel(context.Background())
42+
defer cancel()
43+
44+
// Can push to a repo we own
45+
results, err := private.ServCommand(ctx, 1, "user2", "repo1", models.AccessModeWrite, "git-upload-pack", "")
46+
assert.NoError(t, err)
47+
assert.False(t, results.IsWiki)
48+
assert.False(t, results.IsDeployKey)
49+
assert.Equal(t, int64(1), results.KeyID)
50+
assert.Equal(t, "user2@localhost", results.KeyName)
51+
assert.Equal(t, "user2", results.UserName)
52+
assert.Equal(t, int64(2), results.UserID)
53+
assert.Equal(t, "user2", results.OwnerName)
54+
assert.Equal(t, "repo1", results.RepoName)
55+
assert.Equal(t, int64(1), results.RepoID)
56+
57+
// Cannot push to a private repo we're not associated with
58+
results, err = private.ServCommand(ctx, 1, "user15", "big_test_private_1", models.AccessModeWrite, "git-upload-pack", "")
59+
assert.Error(t, err)
60+
assert.Empty(t, results)
61+
62+
// Cannot pull from a private repo we're not associated with
63+
results, err = private.ServCommand(ctx, 1, "user15", "big_test_private_1", models.AccessModeRead, "git-upload-pack", "")
64+
assert.Error(t, err)
65+
assert.Empty(t, results)
66+
67+
// Can pull from a public repo we're not associated with
68+
results, err = private.ServCommand(ctx, 1, "user15", "big_test_public_1", models.AccessModeRead, "git-upload-pack", "")
69+
assert.NoError(t, err)
70+
assert.False(t, results.IsWiki)
71+
assert.False(t, results.IsDeployKey)
72+
assert.Equal(t, int64(1), results.KeyID)
73+
assert.Equal(t, "user2@localhost", results.KeyName)
74+
assert.Equal(t, "user2", results.UserName)
75+
assert.Equal(t, int64(2), results.UserID)
76+
assert.Equal(t, "user15", results.OwnerName)
77+
assert.Equal(t, "big_test_public_1", results.RepoName)
78+
assert.Equal(t, int64(17), results.RepoID)
79+
80+
// Cannot push to a public repo we're not associated with
81+
results, err = private.ServCommand(ctx, 1, "user15", "big_test_public_1", models.AccessModeWrite, "git-upload-pack", "")
82+
assert.Error(t, err)
83+
assert.Empty(t, results)
84+
85+
// Add reading deploy key
86+
deployKey, err := models.AddDeployKey(19, "test-deploy", "sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBGXEEzWmm1dxb+57RoK5KVCL0w2eNv9cqJX2AGGVlkFsVDhOXHzsadS3LTK4VlEbbrDMJdoti9yM8vclA8IeRacAAAAEc3NoOg== nocomment", true)
87+
assert.NoError(t, err)
88+
89+
// Can pull from repo we're a deploy key for
90+
results, err = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_1", models.AccessModeRead, "git-upload-pack", "")
91+
assert.NoError(t, err)
92+
assert.False(t, results.IsWiki)
93+
assert.True(t, results.IsDeployKey)
94+
assert.Equal(t, deployKey.KeyID, results.KeyID)
95+
assert.Equal(t, "test-deploy", results.KeyName)
96+
assert.Equal(t, "user15", results.UserName)
97+
assert.Equal(t, int64(15), results.UserID)
98+
assert.Equal(t, "user15", results.OwnerName)
99+
assert.Equal(t, "big_test_private_1", results.RepoName)
100+
assert.Equal(t, int64(19), results.RepoID)
101+
102+
// Cannot push to a private repo with reading key
103+
results, err = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_1", models.AccessModeWrite, "git-upload-pack", "")
104+
assert.Error(t, err)
105+
assert.Empty(t, results)
106+
107+
// Cannot pull from a private repo we're not associated with
108+
results, err = private.ServCommand(ctx, deployKey.ID, "user15", "big_test_private_2", models.AccessModeRead, "git-upload-pack", "")
109+
assert.Error(t, err)
110+
assert.Empty(t, results)
111+
112+
// Cannot pull from a public repo we're not associated with
113+
results, err = private.ServCommand(ctx, deployKey.ID, "user15", "big_test_public_1", models.AccessModeRead, "git-upload-pack", "")
114+
assert.Error(t, err)
115+
assert.Empty(t, results)
116+
117+
// Add writing deploy key
118+
deployKey, err = models.AddDeployKey(20, "test-deploy", "sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBGXEEzWmm1dxb+57RoK5KVCL0w2eNv9cqJX2AGGVlkFsVDhOXHzsadS3LTK4VlEbbrDMJdoti9yM8vclA8IeRacAAAAEc3NoOg== nocomment", false)
119+
assert.NoError(t, err)
120+
121+
// Cannot push to a private repo with reading key
122+
results, err = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_1", models.AccessModeWrite, "git-upload-pack", "")
123+
assert.Error(t, err)
124+
assert.Empty(t, results)
125+
126+
// Can pull from repo we're a writing deploy key for
127+
results, err = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_2", models.AccessModeRead, "git-upload-pack", "")
128+
assert.NoError(t, err)
129+
assert.False(t, results.IsWiki)
130+
assert.True(t, results.IsDeployKey)
131+
assert.Equal(t, deployKey.KeyID, results.KeyID)
132+
assert.Equal(t, "test-deploy", results.KeyName)
133+
assert.Equal(t, "user15", results.UserName)
134+
assert.Equal(t, int64(15), results.UserID)
135+
assert.Equal(t, "user15", results.OwnerName)
136+
assert.Equal(t, "big_test_private_2", results.RepoName)
137+
assert.Equal(t, int64(20), results.RepoID)
138+
139+
// Can push to repo we're a writing deploy key for
140+
results, err = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_2", models.AccessModeWrite, "git-upload-pack", "")
141+
assert.NoError(t, err)
142+
assert.False(t, results.IsWiki)
143+
assert.True(t, results.IsDeployKey)
144+
assert.Equal(t, deployKey.KeyID, results.KeyID)
145+
assert.Equal(t, "test-deploy", results.KeyName)
146+
assert.Equal(t, "user15", results.UserName)
147+
assert.Equal(t, int64(15), results.UserID)
148+
assert.Equal(t, "user15", results.OwnerName)
149+
assert.Equal(t, "big_test_private_2", results.RepoName)
150+
assert.Equal(t, int64(20), results.RepoID)
151+
152+
})
153+
154+
}

0 commit comments

Comments
 (0)