| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package auth
- import (
- "path/filepath"
- "testing"
- )
- func TestAuthManager(t *testing.T) {
- tempDir := t.TempDir()
- dbPath := filepath.Join(tempDir, "users.json")
- mgr := NewManager(dbPath)
- // 1. Check default admin user exists
- users := mgr.ListUsers()
- if len(users) != 1 {
- t.Fatalf("expected 1 user, got %d", len(users))
- }
- if users[0].Username != "admin" || users[0].Role != RoleFull {
- t.Fatalf("unexpected admin user: %+v", users[0])
- }
- // 2. Authenticate admin with default credentials
- sess, err := mgr.Authenticate("admin", "admin")
- if err != nil {
- t.Fatalf("failed to authenticate default admin: %v", err)
- }
- if sess.Username != "admin" || sess.Role != RoleFull {
- t.Fatalf("unexpected session: %+v", sess)
- }
- // 3. Authenticate with wrong password
- if _, err := mgr.Authenticate("admin", "wrongpassword"); err != ErrInvalidCredentials {
- t.Fatalf("expected ErrInvalidCredentials, got %v", err)
- }
- // 4. Validate session
- valSess, err := mgr.ValidateSession(sess.Token)
- if err != nil {
- t.Fatalf("failed to validate valid session: %v", err)
- }
- if valSess.Username != "admin" {
- t.Fatalf("session username mismatch: %s", valSess.Username)
- }
- // 5. Create new user
- err = mgr.CreateUser(CreateUserRequest{
- Username: "operator",
- Password: "operatorpassword",
- Role: RoleWrite,
- Comment: "NOC operator",
- })
- if err != nil {
- t.Fatalf("failed to create user: %v", err)
- }
- // Authenticate new user
- opSess, err := mgr.Authenticate("operator", "operatorpassword")
- if err != nil {
- t.Fatalf("failed to authenticate operator: %v", err)
- }
- if opSess.Role != RoleWrite {
- t.Fatalf("expected RoleWrite, got %s", opSess.Role)
- }
- // 6. Change password
- err = mgr.ChangePassword("operator", "operatorpassword", "newpassword123", false)
- if err != nil {
- t.Fatalf("failed to change password: %v", err)
- }
- if _, err := mgr.Authenticate("operator", "newpassword123"); err != nil {
- t.Fatalf("failed to authenticate with new password: %v", err)
- }
- // 7. Cannot delete self
- if err := mgr.DeleteUser("admin", "admin"); err != ErrCannotDeleteSelf {
- t.Fatalf("expected ErrCannotDeleteSelf, got %v", err)
- }
- // 8. Delete user
- if err := mgr.DeleteUser("operator", "admin"); err != nil {
- t.Fatalf("failed to delete operator: %v", err)
- }
- if _, err := mgr.Authenticate("operator", "newpassword123"); err != ErrInvalidCredentials {
- t.Fatalf("deleted user should not be able to authenticate, got %v", err)
- }
- }
|