File view with blame information shown in the left gutter beside each line.

barerepo / runner / cmd/barerepo-runner/remember_test.go
53 lines · 1.6kb · master
log files threads runs releases config jump to file t
96966ee barerepo 1mo
1
package main
96966ee barerepo 1mo
2
96966ee barerepo 1mo
3
import (
96966ee barerepo 1mo
4
"os"
96966ee barerepo 1mo
5
"strings"
96966ee barerepo 1mo
6
"testing"
96966ee barerepo 1mo
7
)
96966ee barerepo 1mo
8
96966ee barerepo 1mo
9
// Appendix E's line is `forge runner <token>`, with no address, which needs the last one remembered.
96966ee barerepo 1mo
10
func TestRememberAndRecallAServer(t *testing.T) {
96966ee barerepo 1mo
11
t.Setenv("XDG_CONFIG_HOME", t.TempDir())
96966ee barerepo 1mo
12
if os.Getenv("HOME") != "" {
96966ee barerepo 1mo
13
t.Setenv("HOME", t.TempDir())
96966ee barerepo 1mo
14
}
96966ee barerepo 1mo
15
96966ee barerepo 1mo
16
if got := recallServer("rt_live_never_seen"); got != "" {
96966ee barerepo 1mo
17
t.Errorf("a token that never attached recalled %q", got)
96966ee barerepo 1mo
18
}
96966ee barerepo 1mo
19
96966ee barerepo 1mo
20
rememberServer("rt_live_aaa", "https://one.example")
96966ee barerepo 1mo
21
rememberServer("rt_live_bbb", "https://two.example")
96966ee barerepo 1mo
22
if got := recallServer("rt_live_aaa"); got != "https://one.example" {
96966ee barerepo 1mo
23
t.Errorf("recall = %q", got)
96966ee barerepo 1mo
24
}
96966ee barerepo 1mo
25
// Two forges on one machine must not answer for each other.
96966ee barerepo 1mo
26
if got := recallServer("rt_live_bbb"); got != "https://two.example" {
96966ee barerepo 1mo
27
t.Errorf("the second token recalled %q", got)
96966ee barerepo 1mo
28
}
96966ee barerepo 1mo
29
96966ee barerepo 1mo
30
// Re-attaching somewhere else replaces rather than appends.
96966ee barerepo 1mo
31
rememberServer("rt_live_aaa", "https://moved.example")
96966ee barerepo 1mo
32
if got := recallServer("rt_live_aaa"); got != "https://moved.example" {
96966ee barerepo 1mo
33
t.Errorf("a moved server recalled %q", got)
96966ee barerepo 1mo
34
}
96966ee barerepo 1mo
35
96966ee barerepo 1mo
36
// The file names servers, never tokens, so it is not a place secrets sit.
96966ee barerepo 1mo
37
path, err := serversFile()
96966ee barerepo 1mo
38
if err != nil {
96966ee barerepo 1mo
39
t.Fatal(err)
96966ee barerepo 1mo
40
}
96966ee barerepo 1mo
41
body, err := os.ReadFile(path)
96966ee barerepo 1mo
42
if err != nil {
96966ee barerepo 1mo
43
t.Fatal(err)
96966ee barerepo 1mo
44
}
96966ee barerepo 1mo
45
for _, secret := range []string{"rt_live_aaa", "rt_live_bbb"} {
96966ee barerepo 1mo
46
if strings.Contains(string(body), secret) {
96966ee barerepo 1mo
47
t.Errorf("the file holds the token %q", secret)
96966ee barerepo 1mo
48
}
96966ee barerepo 1mo
49
}
96966ee barerepo 1mo
50
if info, err := os.Stat(path); err == nil && info.Mode().Perm() != 0o600 {
96966ee barerepo 1mo
51
t.Errorf("the file is mode %v, and it names where a token works", info.Mode().Perm())
96966ee barerepo 1mo
52
}
96966ee barerepo 1mo
53
}
history · rawbarerepo 0.1.0