ollie/cmd/toolsrv/internal/server/state_test.go

122 lines
2.6 KiB
Go

package server
import (
"strings"
"testing"
)
func TestServer_AuthenticateFirst(t *testing.T) {
srv := NewServer()
secret := "test-secret-0123456789abcdef"
// First auth sets the secret and returns a token
token, err := srv.Authenticate(secret)
if err != nil {
t.Fatalf("Authenticate failed: %v", err)
}
if token == "" {
t.Fatal("Authenticate returned empty token")
}
// Token() should return the same value
if srv.Token() != token {
t.Errorf("Token() = %q, want %q", srv.Token(), token)
}
}
func TestServer_AuthenticateSameSecret(t *testing.T) {
srv := NewServer()
secret := "test-secret-0123456789abcdef"
// First auth
token1, err := srv.Authenticate(secret)
if err != nil {
t.Fatalf("First Authenticate failed: %v", err)
}
// Second auth with same secret should succeed and return same token
token2, err := srv.Authenticate(secret)
if err != nil {
t.Fatalf("Second Authenticate failed: %v", err)
}
if token1 != token2 {
t.Errorf("Token changed: %q -> %q", token1, token2)
}
}
func TestServer_AuthenticateWrongSecret(t *testing.T) {
srv := NewServer()
secret := "test-secret-0123456789abcdef"
wrongSecret := "wrong-secret-fedcba9876543210"
// First auth establishes the secret
_, err := srv.Authenticate(secret)
if err != nil {
t.Fatalf("First Authenticate failed: %v", err)
}
// Second auth with wrong secret should fail
_, err = srv.Authenticate(wrongSecret)
if err == nil {
t.Fatal("Authenticate should fail with wrong secret")
}
}
func TestServer_TokenBeforeAuth(t *testing.T) {
srv := NewServer()
// Token should be empty before authentication
if srv.Token() != "" {
t.Errorf("Token() = %q before auth, want empty", srv.Token())
}
}
func TestServer_BuildTree(t *testing.T) {
srv := NewServer()
tree := srv.BuildTree()
if tree == nil {
t.Fatal("BuildTree returned nil")
}
}
func TestServer_HostInfo(t *testing.T) {
srv := NewServer()
info := srv.HostInfo()
if info == "" {
t.Fatal("HostInfo returned empty string")
}
if !strings.Contains(info, "platform=") {
t.Error("HostInfo missing platform=")
}
if !strings.Contains(info, "arch=") {
t.Error("HostInfo missing arch=")
}
}
func TestGenerateSecret(t *testing.T) {
s1, err := GenerateSecret()
if err != nil {
t.Fatalf("GenerateSecret failed: %v", err)
}
if s1 == "" {
t.Fatal("GenerateSecret returned empty string")
}
// 32 bytes -> 64 hex chars
if len(s1) != 64 {
t.Errorf("GenerateSecret returned %d chars, want 64", len(s1))
}
// Two calls should return different secrets
s2, _ := GenerateSecret()
if s1 == s2 {
t.Error("GenerateSecret returned same secret twice")
}
}