Skip to content

Commit f313afa

Browse files
authored
Merge pull request #1084 from sdreger/bugfix/1083/gitea-tls-error
fix: pass 'certPool' to Gitea client on creation
2 parents d62be26 + 30d8d01 commit f313afa

File tree

2 files changed

+68
-31
lines changed

2 files changed

+68
-31
lines changed

internal/notifier/gitea.go

+8-10
Original file line numberDiff line numberDiff line change
@@ -69,18 +69,16 @@ func NewGitea(commitStatus string, addr string, token string, certPool *x509.Cer
6969
return nil, fmt.Errorf("invalid repository id %q", id)
7070
}
7171

72-
client, err := gitea.NewClient(host, gitea.SetToken(token))
73-
if err != nil {
74-
return nil, fmt.Errorf("failed creating Gitea client: %w", err)
75-
}
76-
72+
tr := &http.Transport{}
7773
if certPool != nil {
78-
tr := &http.Transport{
79-
TLSClientConfig: &tls.Config{
80-
RootCAs: certPool,
81-
},
74+
tr.TLSClientConfig = &tls.Config{
75+
RootCAs: certPool,
8276
}
83-
client.SetHTTPClient(&http.Client{Transport: tr})
77+
}
78+
79+
client, err := gitea.NewClient(host, gitea.SetToken(token), gitea.SetHTTPClient(&http.Client{Transport: tr}))
80+
if err != nil {
81+
return nil, fmt.Errorf("failed creating Gitea client: %w", err)
8482
}
8583

8684
return &Gitea{

internal/notifier/gitea_test.go

+60-21
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package notifier
1818

1919
import (
2020
"context"
21+
"crypto/x509"
2122
"fmt"
2223
"net/http"
2324
"net/http/httptest"
@@ -31,30 +32,43 @@ import (
3132
"github.com/stretchr/testify/assert"
3233
)
3334

34-
// newTestServer returns an HTTP server mimicking parts of Gitea's API so that tests don't
35+
// newTestHTTPServer returns an HTTP server mimicking parts of Gitea's API so that tests don't
3536
// need to rely on 3rd-party components to be available (like the try.gitea.io server).
36-
func newTestServer(t *testing.T) *httptest.Server {
37+
func newTestHTTPServer(t *testing.T) *httptest.Server {
3738
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
38-
switch r.URL.Path {
39-
case "/api/v1/version":
40-
fmt.Fprintf(w, `{"version":"1.18.3"}`)
41-
case "/api/v1/repos/foo/bar/commits/69b59063470310ebbd88a9156325322a124e55a3/statuses":
42-
fmt.Fprintf(w, "[]")
43-
case "/api/v1/repos/foo/bar/statuses/69b59063470310ebbd88a9156325322a124e55a3":
44-
fmt.Fprintf(w, "{}")
45-
case "/api/v1/repos/foo/bar/commits/8a9156325322a124e55a369b59063470310ebbd8/statuses":
46-
fmt.Fprintf(w, "[]")
47-
case "/api/v1/repos/foo/bar/statuses/8a9156325322a124e55a369b59063470310ebbd8":
48-
fmt.Fprintf(w, "{}")
49-
default:
50-
t.Logf("unknown %s request at %s", r.Method, r.URL.Path)
51-
}
39+
handleTestRequest(t, w, r)
5240
}))
5341
return srv
5442
}
5543

44+
// newTestHTTPSServer returns an HTTPS server mimicking parts of Gitea's API so that tests don't
45+
// need to rely on 3rd-party components to be available (like the try.gitea.io server).
46+
func newTestHTTPSServer(t *testing.T) *httptest.Server {
47+
srv := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
48+
handleTestRequest(t, w, r)
49+
}))
50+
return srv
51+
}
52+
53+
func handleTestRequest(t *testing.T, w http.ResponseWriter, r *http.Request) {
54+
switch r.URL.Path {
55+
case "/api/v1/version":
56+
fmt.Fprintf(w, `{"version":"1.18.3"}`)
57+
case "/api/v1/repos/foo/bar/commits/69b59063470310ebbd88a9156325322a124e55a3/statuses":
58+
fmt.Fprintf(w, "[]")
59+
case "/api/v1/repos/foo/bar/statuses/69b59063470310ebbd88a9156325322a124e55a3":
60+
fmt.Fprintf(w, "{}")
61+
case "/api/v1/repos/foo/bar/commits/8a9156325322a124e55a369b59063470310ebbd8/statuses":
62+
fmt.Fprintf(w, "[]")
63+
case "/api/v1/repos/foo/bar/statuses/8a9156325322a124e55a369b59063470310ebbd8":
64+
fmt.Fprintf(w, "{}")
65+
default:
66+
t.Logf("unknown %s request at %s", r.Method, r.URL.Path)
67+
}
68+
}
69+
5670
func TestNewGiteaBasic(t *testing.T) {
57-
srv := newTestServer(t)
71+
srv := newTestHTTPServer(t)
5872
defer srv.Close()
5973

6074
g, err := NewGitea("kustomization/gitops-system/0c9c2e41", srv.URL+"/foo/bar", "foobar", nil)
@@ -64,32 +78,57 @@ func TestNewGiteaBasic(t *testing.T) {
6478
assert.Equal(t, g.BaseURL, srv.URL)
6579
}
6680

81+
func TestNewGiteaWithCertPool(t *testing.T) {
82+
srv := newTestHTTPSServer(t)
83+
defer srv.Close()
84+
85+
certpool := x509.NewCertPool()
86+
certpool.AddCert(srv.Certificate())
87+
88+
g, err := NewGitea("kustomization/gitops-system/0c9c2e41", srv.URL+"/foo/bar", "foobar", certpool)
89+
assert.NoError(t, err)
90+
assert.Equal(t, g.Owner, "foo")
91+
assert.Equal(t, g.Repo, "bar")
92+
assert.Equal(t, g.BaseURL, srv.URL)
93+
}
94+
95+
func TestNewGiteaNoCertificate(t *testing.T) {
96+
srv := newTestHTTPSServer(t)
97+
defer srv.Close()
98+
99+
certpool := x509.NewCertPool()
100+
101+
_, err := NewGitea("kustomization/gitops-system/0c9c2e41", srv.URL+"/foo/bar", "foobar", certpool)
102+
assert.Error(t, err)
103+
assert.ErrorContains(t, err, "tls: failed to verify certificate: x509: certificate signed by unknown authority")
104+
}
105+
67106
func TestNewGiteaInvalidUrl(t *testing.T) {
68-
srv := newTestServer(t)
107+
srv := newTestHTTPServer(t)
69108
defer srv.Close()
70109

71110
_, err := NewGitea("kustomization/gitops-system/0c9c2e41", srv.URL+"/foo/bar/baz", "foobar", nil)
72111
assert.ErrorContains(t, err, "invalid repository id")
73112
}
74113

75114
func TestNewGiteaEmptyToken(t *testing.T) {
76-
srv := newTestServer(t)
115+
srv := newTestHTTPServer(t)
77116
defer srv.Close()
78117

79118
_, err := NewGitea("kustomization/gitops-system/0c9c2e41", srv.URL+"/foo/bar", "", nil)
80119
assert.ErrorContains(t, err, "gitea token cannot be empty")
81120
}
82121

83122
func TestNewGiteaEmptyCommitStatus(t *testing.T) {
84-
srv := newTestServer(t)
123+
srv := newTestHTTPServer(t)
85124
defer srv.Close()
86125

87126
_, err := NewGitea("", srv.URL+"/foo/bar", "foobar", nil)
88127
assert.ErrorContains(t, err, "commit status cannot be empty")
89128
}
90129

91130
func TestGitea_Post(t *testing.T) {
92-
srv := newTestServer(t)
131+
srv := newTestHTTPServer(t)
93132
defer srv.Close()
94133

95134
g, err := NewGitea("kustomization/gitops-system/0c9c2e41", srv.URL+"/foo/bar", "foobar", nil)

0 commit comments

Comments
 (0)