authlogger_test.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. package authlogger
  2. import (
  3. "net/http"
  4. "net/url"
  5. "os"
  6. "testing"
  7. "time"
  8. )
  9. var filePath = "./system/auth/"
  10. func setupSuite(t *testing.T) func(t *testing.T) {
  11. t.Log("Setting up env")
  12. os.Mkdir(filePath, 0777)
  13. // Return a function to teardown the test
  14. return func(t *testing.T) {
  15. t.Log("Cleaning up")
  16. err := os.RemoveAll(filePath)
  17. os.RemoveAll("./system/")
  18. if err != nil {
  19. t.Fatalf("Failed to clean up: %v", err)
  20. }
  21. }
  22. }
  23. func TestNewLogger(t *testing.T) {
  24. teardownSuite := setupSuite(t)
  25. defer teardownSuite(t)
  26. // Test creating a new logger
  27. logger, err := NewLogger()
  28. if err != nil {
  29. t.Fatalf("Failed to create a new logger: %v", err)
  30. }
  31. defer logger.Close()
  32. // Ensure that the logger's database is not nil
  33. if logger.database == nil {
  34. t.Error("Logger's database should not be nil")
  35. }
  36. }
  37. func TestLogAuth(t *testing.T) {
  38. teardownSuite := setupSuite(t)
  39. defer teardownSuite(t)
  40. // Setup a test HTTP request
  41. request, err := http.NewRequest("POST", "/login", nil)
  42. if err != nil {
  43. t.Fatal(err)
  44. }
  45. form := url.Values{}
  46. form.Add("username", "automatictest")
  47. request.RemoteAddr = "8.8.8.8:8080"
  48. request.PostForm = form
  49. // Setup a test server to capture the response
  50. //rr := httptest.NewRecorder()
  51. // Create a new logger
  52. logger, err := NewLogger()
  53. if err != nil {
  54. t.Fatalf("Failed to create a new logger: %v", err)
  55. }
  56. defer logger.Close()
  57. // Test logging authentication with a successful login
  58. err = logger.LogAuth(request, true)
  59. if err != nil {
  60. t.Fatalf("Failed to log authentication: %v", err)
  61. }
  62. if len(logger.ListSummary()) != 1 {
  63. t.Fatalf("Expected list summary:1, curr: 0")
  64. }
  65. summary, err := logger.ListRecords(logger.ListSummary()[0])
  66. if err != nil {
  67. t.Fatalf("Failed to list records: %v", err)
  68. }
  69. // should be only 1
  70. for _, record := range summary {
  71. if record.AuthType != "web" {
  72. t.Fatalf("AuthType expected: %v, got: %v", "web", record.AuthType)
  73. }
  74. if record.IpAddr != "8.8.8.8" {
  75. t.Fatalf("IpAddr expected: %v, got: %v", "8.8.8.8", record.IpAddr)
  76. }
  77. if record.LoginSucceed != true {
  78. t.Fatalf("LoginSucceed expected: %v, got: %v", true, record.LoginSucceed)
  79. }
  80. if record.Port != 8080 {
  81. t.Fatalf("Port expected: %v, got: %v", 8080, record.LoginSucceed)
  82. }
  83. if record.TargetUsername != "automatictest" {
  84. t.Fatalf("TargetUsername expected: %v, got: %v", "automatictest", record.TargetUsername)
  85. }
  86. }
  87. }
  88. func TestListSummary(t *testing.T) {
  89. teardownSuite := setupSuite(t)
  90. defer teardownSuite(t)
  91. // Create a new logger
  92. logger, err := NewLogger()
  93. if err != nil {
  94. t.Fatalf("Failed to create a new logger: %v", err)
  95. }
  96. defer logger.Close()
  97. // Test listing summary
  98. summary := logger.ListSummary()
  99. // Assuming there is at least one table in the test environment
  100. if len(summary) != 0 {
  101. t.Fatal("Expected at least one table in the summary, got none")
  102. }
  103. }
  104. func TestListRecords(t *testing.T) {
  105. teardownSuite := setupSuite(t)
  106. defer teardownSuite(t)
  107. // Create a new logger
  108. logger, err := NewLogger()
  109. if err != nil {
  110. t.Fatalf("Failed to create a new logger: %v", err)
  111. }
  112. defer logger.Close()
  113. err = logger.LogAuthByRequestInfo("testUser", "192.168.1.1:8080", time.Now().Unix(), true, "custom")
  114. // Assuming there is at least one table in the test environment
  115. summary := logger.ListSummary()
  116. if len(summary) == 0 {
  117. t.Fatalf("Expected at least one record in the table, got none")
  118. }
  119. // Test listing records from the first table
  120. records, err := logger.ListRecords(summary[0])
  121. if err != nil {
  122. t.Fatalf("Failed to list records: %v", err)
  123. }
  124. // Assuming there are records in the table
  125. if len(records) == 0 {
  126. t.Fatalf("Expected at least one record in the table, got none")
  127. }
  128. }
  129. func TestLogAuthByRequestInfo(t *testing.T) {
  130. teardownSuite := setupSuite(t)
  131. defer teardownSuite(t)
  132. // Create a new logger
  133. logger, err := NewLogger()
  134. if err != nil {
  135. t.Fatalf("Failed to create a new logger: %v", err)
  136. }
  137. defer logger.Close()
  138. // Test logging authentication with custom request info
  139. tt := time.Now().Unix()
  140. err = logger.LogAuthByRequestInfo("testUser", "192.168.1.1:8080", tt, true, "custom")
  141. if err != nil {
  142. t.Errorf("Failed to log authentication with custom request info: %v", err)
  143. }
  144. if len(logger.ListSummary()) != 1 {
  145. t.Fatalf("Expected list summary:1, curr: 0")
  146. }
  147. summary, err := logger.ListRecords(logger.ListSummary()[0])
  148. if err != nil {
  149. t.Fatalf("Failed to list records: %v", err)
  150. }
  151. // should be only 1
  152. for _, record := range summary {
  153. if record.AuthType != "custom" {
  154. t.Fatalf("AuthType expected: %v, got: %v", "custom", record.AuthType)
  155. }
  156. if record.IpAddr != "192.168.1.1" {
  157. t.Fatalf("IpAddr expected: %v, got: %v", "192.168.1.1", record.IpAddr)
  158. }
  159. if record.LoginSucceed != true {
  160. t.Fatalf("LoginSucceed expected: %v, got: %v", true, record.LoginSucceed)
  161. }
  162. if record.Port != 8080 {
  163. t.Fatalf("Port expected: %v, got: %v", 8080, record.LoginSucceed)
  164. }
  165. if record.TargetUsername != "testUser" {
  166. t.Fatalf("TargetUsername expected: %v, got: %v", "testUser", record.TargetUsername)
  167. }
  168. if record.Timestamp != tt {
  169. t.Fatalf("Timestamp expected: %v, got: %v", tt, record.Timestamp)
  170. }
  171. }
  172. }