Skip to content

Commit 4dad7b9

Browse files
authored
Tests verify url (#9)
Closes #8 * fix typo * add another CA certificate for testing * add tests for verifying urls * Update README.md
1 parent cbc0b89 commit 4dad7b9

File tree

6 files changed

+123
-6
lines changed

6 files changed

+123
-6
lines changed

.gitignore

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
dist
22
gossl
3-
*.pem
4-
*.key
5-
.vscode
3+
.vscode

README.md

-1
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,3 @@ gossl ssh-copy --pubkey /home/user/.ssh/id_rsa.pub remoteUser@remoteIP
129129
1. Add generate command for generating private key, root ca and x509 certificates in one command
130130
2. Add cert template format read from yaml file
131131
3. Add certificate converter command like DER to PEM etc.
132-
4. Add test for verify URL

commands/verify/verify.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ func verifyURLWithCA(c *cli.Context, url string, roots *x509.CertPool) error {
183183

184184
_, err := client.Get(url)
185185
if err != nil {
186-
log.Printf("Failed to sen Get request to URL %s error: %v", url, err)
186+
log.Printf("Failed to send Get request to URL %s error: %v", url, err)
187187
return err
188188
}
189189

commands/verify/verify_test.go

+78-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package verify_test
22

33
import (
4+
"crypto/tls"
5+
"fmt"
6+
"net/http"
7+
"net/http/httptest"
48
"os"
59
"testing"
610

@@ -87,7 +91,80 @@ func TestVerify(t *testing.T) {
8791

8892
for _, tC := range testCases {
8993
t.Run(tC.name, func(t *testing.T) {
90-
testArgs := []string{execName, verify.CmdVerify, "-dns", tC.dns, "-cafile", tC.cafile, "-certfile", tC.certfile}
94+
testArgs := []string{
95+
execName, verify.CmdVerify,
96+
"-dns", tC.dns,
97+
"-cafile", tC.cafile,
98+
"-certfile", tC.certfile,
99+
}
100+
if tC.shouldErr {
101+
require.Error(t, app.Run(testArgs))
102+
} else {
103+
require.NoError(t, app.Run(testArgs))
104+
}
105+
})
106+
}
107+
}
108+
109+
func TestVerifyURL(t *testing.T) {
110+
const (
111+
// Certificate paths
112+
serverCert = "../../testdata/server-cert.pem"
113+
serverKey = "../../testdata/server-key.pem"
114+
caCert = "../../testdata/ca-cert.pem"
115+
caCert2 = "../../testdata/ca-cert-2.pem"
116+
)
117+
118+
ts := httptest.NewUnstartedServer(
119+
http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
120+
fmt.Fprintln(w, "hello!")
121+
}),
122+
)
123+
124+
cert, err := tls.LoadX509KeyPair(serverCert, serverKey)
125+
require.NoError(t, err)
126+
127+
ts.TLS = &tls.Config{
128+
Certificates: []tls.Certificate{cert},
129+
}
130+
131+
ts.StartTLS()
132+
defer ts.Close()
133+
134+
app := &cli.App{
135+
Commands: []*cli.Command{
136+
verify.Command(),
137+
},
138+
}
139+
140+
execName, err := os.Executable()
141+
require.NoError(t, err)
142+
143+
testCases := []struct {
144+
name string
145+
cafile string
146+
shouldErr bool
147+
}{
148+
{
149+
name: "valid cert and ca",
150+
cafile: caCert,
151+
shouldErr: false,
152+
},
153+
{
154+
name: "bad certificate",
155+
cafile: caCert2,
156+
shouldErr: true,
157+
},
158+
}
159+
160+
for _, tC := range testCases {
161+
t.Run(tC.name, func(t *testing.T) {
162+
testArgs := []string{
163+
execName, verify.CmdVerify,
164+
"--cafile", tC.cafile,
165+
"--url", ts.URL,
166+
}
167+
91168
if tC.shouldErr {
92169
require.Error(t, app.Run(testArgs))
93170
} else {

testdata/ca-cert-2.pem

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIICmDCCAYACCQC2Phk4n8m/JDANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJ0
3+
cjAgFw0yMjA0MTQxNjAyNTZaGA8zMDIxMDgxNTE2MDI1NlowDTELMAkGA1UEBhMC
4+
dHIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDcIoJP1ylhMNLG7e8r
5+
mVqBWxEqPoaGhdpwJ08n7myJ9qiwMIcf9qDMVDag26Q38gQeOMu/15MX6c4rig4T
6+
SUB9KuBernX1Gv0KkD0/vXH3SyvVLH79LyP+x5VthdxP0c/MqypXteNgLZU+1oJ0
7+
nZtIqUJZABE2fQ8kNFxSvL5ZPcYqBXwkgj17Qd08xl2MASfT80hfeW4Kj9txyFye
8+
e3mIIgF7r787SJu7JAEHj0C2j52yM1inUDiAOAJ+xushqhAZvp4nNyEnCM2rvqoJ
9+
5j8QuLdpO8PVHGWfqHNG8CrMuUyGWaLaYZSozqAWsNCPckjLxErRertIAvJGsguU
10+
0LrDAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAI3d6TxZPndLDJ2aYEZ1QtLAQbch
11+
O/srZ5GnbwALBdK3zFG41oV6RJX/pnLrNwsCvySkTX2X7Vyf687jkR6qGfNAbxVB
12+
Ckeg+6K7sDomD9EQsDD7juX/lT2TSsZQwPBO2Agqh4IkYnvUP+XDjmxPmpEN8/Jf
13+
hWZAN4mI1EQhFdUdpTfATpea+gs3HhwW13tSEr9AIstS5Ef1/5veEeTvNMDqHuxC
14+
YgNhCz+Fd7FWuKxUGsEFx7fSt96hy30rOjtextqphiRzXMpzgKd8xtPcPzQx2fxj
15+
EqiKsvALSDAmq38WpykrV13LuKpIizghJRqCB+hklWpJkWN7StrYv+2qPbk=
16+
-----END CERTIFICATE-----

testdata/ca-key-2.pem

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIEowIBAAKCAQEA3CKCT9cpYTDSxu3vK5lagVsRKj6GhoXacCdPJ+5sifaosDCH
3+
H/agzFQ2oNukN/IEHjjLv9eTF+nOK4oOE0lAfSrgXq519Rr9CpA9P71x90sr1Sx+
4+
/S8j/seVbYXcT9HPzKsqV7XjYC2VPtaCdJ2bSKlCWQARNn0PJDRcUry+WT3GKgV8
5+
JII9e0HdPMZdjAEn0/NIX3luCo/bcchcnnt5iCIBe6+/O0ibuyQBB49Ato+dsjNY
6+
p1A4gDgCfsbrIaoQGb6eJzchJwjNq76qCeY/ELi3aTvD1Rxln6hzRvAqzLlMhlmi
7+
2mGUqM6gFrDQj3JIy8RK0Xq7SALyRrILlNC6wwIDAQABAoIBAAQCtPETcHOO2ig5
8+
qYPX1WhJ6nQkk3rb8XDdpnmJxHx2+/fJyoxwh9lxJ1Wi6skCJcUPL9cc7FchMVpl
9+
t3/uc7hUEaZn80o15apNmnAQ2YSx3+iQWPfv5e38YOKP78Wcgvatn6XdcHkOG4v7
10+
iIDrZiraupS4hZfCi4YTViNDwQwLJWxmDhWqT7+RZFiRTI+wjC4x/aW5ya+a+dyP
11+
cuiuosPdAHiLLzYuNVBe+p4yLyrcWA8+2XZ55YS2T4ElkiB+98u4dEm78AYMrBTp
12+
e8KGBKqAMyXLPiY44EImHwuHpRthbAxvTHpfUsSuJ4Y3VslKjMbaMDwKyqJIcHCI
13+
jprX98ECgYEA8UaswxHfUWczI6iEPnu19Dw6Dn1dYpxfHANNm0Jok/qWQYlZMQiV
14+
jtF6m0rGXs++aZLxlGZjcRJz86zz8x2tSi3Nm0XZIQ1M4CwTAJdeARxYzuQlszCu
15+
8Din/s6j3+Onf7R4bU/lw1H6MNR+wFRq15wrWruAlKz5oOr1iX454bECgYEA6ZGO
16+
OH1TSgOEqpRVmscofudyE8ek9h637/yQT0SWOzVCx8M+KmvbCclwJ07WT+HGtv9U
17+
e4AY8puvbbQBb6Oy9IOv1IdEwKOpdfMdJxZirjEUg1JnH1YqCEPCBXuUoAYdgBfq
18+
coCp4n2nXZkPHWN6xxOEjPsrv3XtuBB7FbpFrLMCgYBjfzOrVelz1kz+fXXbloSY
19+
bWW7p/MkwTtvf+U3C5G4xHPGHu/LCrEyLiyTcaiQXLc3LkO1YOvNK0Dp0f7f2PMn
20+
TfAmAg3iVWvIXiSP79vyNVBiMS9iz8a0hYixyWFG6MigHzoySeqEO4AjNt32Tlmp
21+
BFvUlNIXfaWLuJj81DLmYQKBgQC+X7ZFEtlVRWLXykmv+05liW3w81Pgi48u23Qg
22+
N+4fWj0RJ3E/EGQbKQXx9A84UvUt6RVKCFHNRNoLF6HoBcxyAffJyWtffMY97ic/
23+
2b4a7sQieYK2BvwBeoDlCSJOAE4BPv0H0RknE3XcE0o/kPrc0mrComK5Dnzw/vXj
24+
8syhgwKBgE/tm46Fh3jCVk5LlxcO/iTYiUGK6zu6UDf8atTxgaDojZekbihK4RFo
25+
qqvLa1UFj+bzWGlLGWTyQrb02Q+fuwJmM+Y5jUOuPLjcnxapu3Lv8faXPv84YVIC
26+
bm+QgZSPrCgKIJYUN8JK3SlfZ877tHEz+z/Q4sWjHIQ+f/wLOz/A
27+
-----END RSA PRIVATE KEY-----

0 commit comments

Comments
 (0)