Skip to content

Commit 6c981f8

Browse files
author
Niklas Empt
committed
move cert replacement test
1 parent aff029e commit 6c981f8

File tree

2 files changed

+82
-80
lines changed

2 files changed

+82
-80
lines changed

t/02_daemon_linux_test.go

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package main
22

33
import (
4+
"encoding/base64"
5+
"encoding/json"
46
"fmt"
57
"os"
68
"testing"
79

10+
"github.com/stretchr/testify/assert"
811
"github.com/stretchr/testify/require"
912
)
1013

@@ -30,3 +33,82 @@ func TestDaemonRequestsLinux(t *testing.T) {
3033
os.Remove("test.crt")
3134
os.Remove("test.key")
3235
}
36+
37+
func TestErrorBetweenSavingAndSigning(t *testing.T) {
38+
_, baseURL, _, cleanUp := daemonInit(t, "")
39+
defer os.Remove("test.crt")
40+
defer os.Remove("test.key")
41+
defer os.Remove("test.csr")
42+
43+
postData, err := json.Marshal(map[string]any{
44+
"Country": "DE",
45+
"State": "Bavaria",
46+
"Locality": "Earth",
47+
"Organization": "snclient",
48+
"OrganizationalUnit": "IT",
49+
"HostName": "Root CA SNClient",
50+
"NewKey": true,
51+
"KeyLength": 1024,
52+
})
53+
require.NoErrorf(t, err, "post data json encoded")
54+
55+
// Create Temp Server Certs
56+
runCmd(t, &cmd{
57+
Cmd: "make",
58+
Args: []string{"testca"},
59+
ErrLike: []string{"Certificate request self-signature ok"},
60+
})
61+
defer runCmd(t, &cmd{
62+
Cmd: "make",
63+
Args: []string{"clean-testca"},
64+
Like: []string{"dist"},
65+
})
66+
67+
commandResult := runCmd(t, &cmd{
68+
Cmd: "curl",
69+
Args: []string{"-s", "-u", "user:" + localDaemonAdminPassword, "-k", "-s", "-d", string(postData), baseURL + "/api/v1/admin/csr"},
70+
Dir: ".",
71+
Like: []string{"CERTIFICATE REQUEST"},
72+
})
73+
err = os.WriteFile("test.csr", []byte(commandResult.Stdout), 0o600)
74+
if err != nil {
75+
t.Fatalf("could not save certificate signing requests")
76+
}
77+
78+
runCmd(t, &cmd{
79+
Cmd: "openssl",
80+
Args: []string{"x509", "-req", "-in=test.csr", "-CA=dist/cacert.pem", "-CAkey=dist/ca.key", "-out=server.crt", "-days=365"},
81+
ErrLike: []string{"Certificate request self-signature ok"},
82+
})
83+
defer os.Remove("server.crt")
84+
85+
keyBak, _ := os.ReadFile("test.key.tmp")
86+
newCert, _ := os.ReadFile("server.crt")
87+
88+
// restart client
89+
cleanUp()
90+
_, baseURL, _, cleanUp = daemonInit(t, "")
91+
defer cleanUp()
92+
93+
postData, err = json.Marshal(map[string]interface{}{
94+
"Reload": true,
95+
"CertData": base64.StdEncoding.EncodeToString(newCert),
96+
"KeyData": "",
97+
})
98+
require.NoErrorf(t, err, "post data json encoded")
99+
100+
runCmd(t, &cmd{
101+
Cmd: "curl",
102+
Args: []string{"-s", "-u", "user:" + localDaemonAdminPassword, "-k", "-s", "-d", string(postData), baseURL + "/api/v1/admin/certs/replace"},
103+
Like: []string{`{"success":true}`},
104+
})
105+
106+
// Check if new private Key matches the on we got from the csr Endpoint
107+
key, _ := os.ReadFile("test.key")
108+
assert.Equalf(t, string(keyBak), string(key), "private keys do not match")
109+
110+
_, err = os.ReadFile("test.key.tmp")
111+
if err == nil {
112+
t.Fatalf("tempory key file was not removed")
113+
}
114+
}

t/02_daemon_test.go

Lines changed: 0 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package main
22

33
import (
4-
"encoding/base64"
54
"encoding/json"
65
"fmt"
76
"os"
@@ -234,82 +233,3 @@ func TestDaemonAdminCSR(t *testing.T) {
234233
Like: []string{"CERTIFICATE REQUEST"},
235234
})
236235
}
237-
238-
func TestErrorBetweenSavingAndSigning(t *testing.T) {
239-
_, baseURL, _, cleanUp := daemonInit(t, "")
240-
defer os.Remove("test.crt")
241-
defer os.Remove("test.key")
242-
defer os.Remove("test.csr")
243-
244-
postData, err := json.Marshal(map[string]any{
245-
"Country": "DE",
246-
"State": "Bavaria",
247-
"Locality": "Earth",
248-
"Organization": "snclient",
249-
"OrganizationalUnit": "IT",
250-
"HostName": "Root CA SNClient",
251-
"NewKey": true,
252-
"KeyLength": 1024,
253-
})
254-
require.NoErrorf(t, err, "post data json encoded")
255-
256-
// Create Temp Server Certs
257-
runCmd(t, &cmd{
258-
Cmd: "make",
259-
Args: []string{"testca"},
260-
ErrLike: []string{"Certificate request self-signature ok"},
261-
})
262-
defer runCmd(t, &cmd{
263-
Cmd: "make",
264-
Args: []string{"clean-testca"},
265-
Like: []string{"dist"},
266-
})
267-
268-
commandResult := runCmd(t, &cmd{
269-
Cmd: "curl",
270-
Args: []string{"-s", "-u", "user:" + localDaemonAdminPassword, "-k", "-s", "-d", string(postData), baseURL + "/api/v1/admin/csr"},
271-
Dir: ".",
272-
Like: []string{"CERTIFICATE REQUEST"},
273-
})
274-
err = os.WriteFile("test.csr", []byte(commandResult.Stdout), 0o600)
275-
if err != nil {
276-
t.Fatalf("could not save certificate signing requests")
277-
}
278-
279-
runCmd(t, &cmd{
280-
Cmd: "openssl",
281-
Args: []string{"x509", "-req", "-in=test.csr", "-CA=dist/cacert.pem", "-CAkey=dist/ca.key", "-out=server.crt", "-days=365"},
282-
ErrLike: []string{"Certificate request self-signature ok"},
283-
})
284-
defer os.Remove("server.crt")
285-
286-
keyBak, _ := os.ReadFile("test.key.tmp")
287-
newCert, _ := os.ReadFile("server.crt")
288-
289-
// restart client
290-
cleanUp()
291-
_, baseURL, _, cleanUp = daemonInit(t, "")
292-
defer cleanUp()
293-
294-
postData, err = json.Marshal(map[string]interface{}{
295-
"Reload": true,
296-
"CertData": base64.StdEncoding.EncodeToString(newCert),
297-
"KeyData": "",
298-
})
299-
require.NoErrorf(t, err, "post data json encoded")
300-
301-
runCmd(t, &cmd{
302-
Cmd: "curl",
303-
Args: []string{"-s", "-u", "user:" + localDaemonAdminPassword, "-k", "-s", "-d", string(postData), baseURL + "/api/v1/admin/certs/replace"},
304-
Like: []string{`{"success":true}`},
305-
})
306-
307-
// Check if new private Key matches the on we got from the csr Endpoint
308-
key, _ := os.ReadFile("test.key")
309-
assert.Equalf(t, string(keyBak), string(key), "private keys do not match")
310-
311-
_, err = os.ReadFile("test.key.tmp")
312-
if err == nil {
313-
t.Fatalf("tempory key file was not removed")
314-
}
315-
}

0 commit comments

Comments
 (0)