orama/pkg/client/identity_test.go

93 lines
2.4 KiB
Go

package client
import (
"os"
"path/filepath"
"testing"
"github.com/DeBrosOfficial/network/pkg/encryption"
)
func TestPersistentIdentity_NoPath(t *testing.T) {
// Without IdentityPath, Connect() generates a random ID each time.
// We can't easily test Connect() (needs network), so verify config defaults.
cfg := DefaultClientConfig("test-app")
if cfg.IdentityPath != "" {
t.Fatalf("expected empty IdentityPath by default, got %q", cfg.IdentityPath)
}
}
func TestPersistentIdentity_GenerateAndReload(t *testing.T) {
dir := t.TempDir()
keyPath := filepath.Join(dir, "identity.key")
// 1. No file exists — generate + save
id1, err := encryption.GenerateIdentity()
if err != nil {
t.Fatalf("GenerateIdentity: %v", err)
}
if err := encryption.SaveIdentity(id1, keyPath); err != nil {
t.Fatalf("SaveIdentity: %v", err)
}
// File should exist
if _, err := os.Stat(keyPath); os.IsNotExist(err) {
t.Fatal("identity key file was not created")
}
// 2. Load it back — same PeerID
id2, err := encryption.LoadIdentity(keyPath)
if err != nil {
t.Fatalf("LoadIdentity: %v", err)
}
if id1.PeerID != id2.PeerID {
t.Fatalf("PeerID mismatch: generated %s, loaded %s", id1.PeerID, id2.PeerID)
}
// 3. Load again — still the same
id3, err := encryption.LoadIdentity(keyPath)
if err != nil {
t.Fatalf("LoadIdentity (second): %v", err)
}
if id2.PeerID != id3.PeerID {
t.Fatalf("PeerID changed across loads: %s vs %s", id2.PeerID, id3.PeerID)
}
}
func TestPersistentIdentity_DifferentFromRandom(t *testing.T) {
// A persistent identity should be different from a freshly generated one
id1, err := encryption.GenerateIdentity()
if err != nil {
t.Fatalf("GenerateIdentity: %v", err)
}
id2, err := encryption.GenerateIdentity()
if err != nil {
t.Fatalf("GenerateIdentity: %v", err)
}
if id1.PeerID == id2.PeerID {
t.Fatal("two independently generated identities should have different PeerIDs")
}
}
func TestPersistentIdentity_FilePermissions(t *testing.T) {
dir := t.TempDir()
keyPath := filepath.Join(dir, "subdir", "identity.key")
id, err := encryption.GenerateIdentity()
if err != nil {
t.Fatalf("GenerateIdentity: %v", err)
}
if err := encryption.SaveIdentity(id, keyPath); err != nil {
t.Fatalf("SaveIdentity: %v", err)
}
info, err := os.Stat(keyPath)
if err != nil {
t.Fatalf("Stat: %v", err)
}
perm := info.Mode().Perm()
if perm != 0600 {
t.Fatalf("expected file permissions 0600, got %o", perm)
}
}