identity_test.go raw
1 package relay
2
3 import (
4 "encoding/hex"
5 "os"
6 "path/filepath"
7 "testing"
8
9 "git.smesh.lol/torly/pkg/config"
10 )
11
12 func TestLoadRelayKeyPersists(t *testing.T) {
13 cfg := &config.Config{DataDir: t.TempDir()}
14 sk1, err := loadRelayKey(cfg)
15 if err != nil {
16 t.Fatal(err)
17 }
18 if cfg.RelayPubKey == "" {
19 t.Fatal("relay pubkey was not derived")
20 }
21 info, err := os.Stat(filepath.Join(cfg.DataDir, "relay.key"))
22 if err != nil {
23 t.Fatal(err)
24 }
25 if info.Mode().Perm() != 0o600 {
26 t.Fatalf("relay key mode = %o", info.Mode().Perm())
27 }
28
29 cfg2 := &config.Config{DataDir: cfg.DataDir}
30 sk2, err := loadRelayKey(cfg2)
31 if err != nil {
32 t.Fatal(err)
33 }
34 if sk1 != sk2 || cfg2.RelayPubKey != cfg.RelayPubKey {
35 t.Fatal("relay identity did not persist across loads")
36 }
37 }
38
39 func TestLoadRelayKeyEnvOverride(t *testing.T) {
40 var sk [32]byte
41 sk[31] = 7
42 cfg := &config.Config{DataDir: t.TempDir(), SecretKey: hex.EncodeToString(sk[:])}
43 got, err := loadRelayKey(cfg)
44 if err != nil {
45 t.Fatal(err)
46 }
47 if got != sk {
48 t.Fatal("env key was not used")
49 }
50 if _, err := os.Stat(filepath.Join(cfg.DataDir, "relay.key")); !os.IsNotExist(err) {
51 t.Fatalf("env key unexpectedly created a key file: %v", err)
52 }
53
54 cfg = &config.Config{DataDir: t.TempDir(), SecretKey: "not-a-key"}
55 if _, err := loadRelayKey(cfg); err == nil {
56 t.Fatal("malformed env key was accepted")
57 }
58 }
59