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