manager_test.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package auth
  2. import (
  3. "path/filepath"
  4. "testing"
  5. )
  6. func TestAuthManager(t *testing.T) {
  7. tempDir := t.TempDir()
  8. dbPath := filepath.Join(tempDir, "users.json")
  9. mgr := NewManager(dbPath)
  10. // 1. Check default admin user exists
  11. users := mgr.ListUsers()
  12. if len(users) != 1 {
  13. t.Fatalf("expected 1 user, got %d", len(users))
  14. }
  15. if users[0].Username != "admin" || users[0].Role != RoleFull {
  16. t.Fatalf("unexpected admin user: %+v", users[0])
  17. }
  18. // 2. Authenticate admin with default credentials
  19. sess, err := mgr.Authenticate("admin", "admin")
  20. if err != nil {
  21. t.Fatalf("failed to authenticate default admin: %v", err)
  22. }
  23. if sess.Username != "admin" || sess.Role != RoleFull {
  24. t.Fatalf("unexpected session: %+v", sess)
  25. }
  26. // 3. Authenticate with wrong password
  27. if _, err := mgr.Authenticate("admin", "wrongpassword"); err != ErrInvalidCredentials {
  28. t.Fatalf("expected ErrInvalidCredentials, got %v", err)
  29. }
  30. // 4. Validate session
  31. valSess, err := mgr.ValidateSession(sess.Token)
  32. if err != nil {
  33. t.Fatalf("failed to validate valid session: %v", err)
  34. }
  35. if valSess.Username != "admin" {
  36. t.Fatalf("session username mismatch: %s", valSess.Username)
  37. }
  38. // 5. Create new user
  39. err = mgr.CreateUser(CreateUserRequest{
  40. Username: "operator",
  41. Password: "operatorpassword",
  42. Role: RoleWrite,
  43. Comment: "NOC operator",
  44. })
  45. if err != nil {
  46. t.Fatalf("failed to create user: %v", err)
  47. }
  48. // Authenticate new user
  49. opSess, err := mgr.Authenticate("operator", "operatorpassword")
  50. if err != nil {
  51. t.Fatalf("failed to authenticate operator: %v", err)
  52. }
  53. if opSess.Role != RoleWrite {
  54. t.Fatalf("expected RoleWrite, got %s", opSess.Role)
  55. }
  56. // 6. Change password
  57. err = mgr.ChangePassword("operator", "operatorpassword", "newpassword123", false)
  58. if err != nil {
  59. t.Fatalf("failed to change password: %v", err)
  60. }
  61. if _, err := mgr.Authenticate("operator", "newpassword123"); err != nil {
  62. t.Fatalf("failed to authenticate with new password: %v", err)
  63. }
  64. // 7. Cannot delete self
  65. if err := mgr.DeleteUser("admin", "admin"); err != ErrCannotDeleteSelf {
  66. t.Fatalf("expected ErrCannotDeleteSelf, got %v", err)
  67. }
  68. // 8. Delete user
  69. if err := mgr.DeleteUser("operator", "admin"); err != nil {
  70. t.Fatalf("failed to delete operator: %v", err)
  71. }
  72. if _, err := mgr.Authenticate("operator", "newpassword123"); err != ErrInvalidCredentials {
  73. t.Fatalf("deleted user should not be able to authenticate, got %v", err)
  74. }
  75. }