|  | @@ -0,0 +1,203 @@
 | 
											
												
													
														|  | 
 |  | +package authlogger
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +import (
 | 
											
												
													
														|  | 
 |  | +	"net/http"
 | 
											
												
													
														|  | 
 |  | +	"net/url"
 | 
											
												
													
														|  | 
 |  | +	"os"
 | 
											
												
													
														|  | 
 |  | +	"testing"
 | 
											
												
													
														|  | 
 |  | +	"time"
 | 
											
												
													
														|  | 
 |  | +)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +var filePath = "./system/auth/"
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +func setupSuite(t *testing.T) func(t *testing.T) {
 | 
											
												
													
														|  | 
 |  | +	t.Log("Setting up env")
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	os.Mkdir(filePath, 0777)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	// Return a function to teardown the test
 | 
											
												
													
														|  | 
 |  | +	return func(t *testing.T) {
 | 
											
												
													
														|  | 
 |  | +		t.Log("Cleaning up")
 | 
											
												
													
														|  | 
 |  | +		err := os.RemoveAll(filePath)
 | 
											
												
													
														|  | 
 |  | +		if err != nil {
 | 
											
												
													
														|  | 
 |  | +			t.Fatalf("Failed to clean up: %v", err)
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +func TestNewLogger(t *testing.T) {
 | 
											
												
													
														|  | 
 |  | +	teardownSuite := setupSuite(t)
 | 
											
												
													
														|  | 
 |  | +	defer teardownSuite(t)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	// Test creating a new logger
 | 
											
												
													
														|  | 
 |  | +	logger, err := NewLogger()
 | 
											
												
													
														|  | 
 |  | +	if err != nil {
 | 
											
												
													
														|  | 
 |  | +		t.Fatalf("Failed to create a new logger: %v", err)
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	defer logger.Close()
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	// Ensure that the logger's database is not nil
 | 
											
												
													
														|  | 
 |  | +	if logger.database == nil {
 | 
											
												
													
														|  | 
 |  | +		t.Error("Logger's database should not be nil")
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +func TestLogAuth(t *testing.T) {
 | 
											
												
													
														|  | 
 |  | +	teardownSuite := setupSuite(t)
 | 
											
												
													
														|  | 
 |  | +	defer teardownSuite(t)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	// Setup a test HTTP request
 | 
											
												
													
														|  | 
 |  | +	request, err := http.NewRequest("POST", "/login", nil)
 | 
											
												
													
														|  | 
 |  | +	if err != nil {
 | 
											
												
													
														|  | 
 |  | +		t.Fatal(err)
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	form := url.Values{}
 | 
											
												
													
														|  | 
 |  | +	form.Add("username", "automatictest")
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	request.RemoteAddr = "8.8.8.8:8080"
 | 
											
												
													
														|  | 
 |  | +	request.PostForm = form
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	// Setup a test server to capture the response
 | 
											
												
													
														|  | 
 |  | +	//rr := httptest.NewRecorder()
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	// Create a new logger
 | 
											
												
													
														|  | 
 |  | +	logger, err := NewLogger()
 | 
											
												
													
														|  | 
 |  | +	if err != nil {
 | 
											
												
													
														|  | 
 |  | +		t.Fatalf("Failed to create a new logger: %v", err)
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	defer logger.Close()
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	// Test logging authentication with a successful login
 | 
											
												
													
														|  | 
 |  | +	err = logger.LogAuth(request, true)
 | 
											
												
													
														|  | 
 |  | +	if err != nil {
 | 
											
												
													
														|  | 
 |  | +		t.Fatalf("Failed to log authentication: %v", err)
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	if len(logger.ListSummary()) != 1 {
 | 
											
												
													
														|  | 
 |  | +		t.Fatalf("Expected list summary:1, curr: 0")
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	summary, err := logger.ListRecords(logger.ListSummary()[0])
 | 
											
												
													
														|  | 
 |  | +	if err != nil {
 | 
											
												
													
														|  | 
 |  | +		t.Fatalf("Failed to list records: %v", err)
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	// should be only 1
 | 
											
												
													
														|  | 
 |  | +	for _, record := range summary {
 | 
											
												
													
														|  | 
 |  | +		if record.AuthType != "web" {
 | 
											
												
													
														|  | 
 |  | +			t.Fatalf("AuthType expected: %v, got: %v", "web", record.AuthType)
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		if record.IpAddr != "8.8.8.8" {
 | 
											
												
													
														|  | 
 |  | +			t.Fatalf("IpAddr expected: %v, got: %v", "8.8.8.8", record.IpAddr)
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		if record.LoginSucceed != true {
 | 
											
												
													
														|  | 
 |  | +			t.Fatalf("LoginSucceed expected: %v, got: %v", true, record.LoginSucceed)
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		if record.Port != 8080 {
 | 
											
												
													
														|  | 
 |  | +			t.Fatalf("Port expected: %v, got: %v", 8080, record.LoginSucceed)
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		if record.TargetUsername != "automatictest" {
 | 
											
												
													
														|  | 
 |  | +			t.Fatalf("TargetUsername expected: %v, got: %v", "automatictest", record.TargetUsername)
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +func TestListSummary(t *testing.T) {
 | 
											
												
													
														|  | 
 |  | +	teardownSuite := setupSuite(t)
 | 
											
												
													
														|  | 
 |  | +	defer teardownSuite(t)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	// Create a new logger
 | 
											
												
													
														|  | 
 |  | +	logger, err := NewLogger()
 | 
											
												
													
														|  | 
 |  | +	if err != nil {
 | 
											
												
													
														|  | 
 |  | +		t.Fatalf("Failed to create a new logger: %v", err)
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	defer logger.Close()
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	// Test listing summary
 | 
											
												
													
														|  | 
 |  | +	summary := logger.ListSummary()
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	// Assuming there is at least one table in the test environment
 | 
											
												
													
														|  | 
 |  | +	if len(summary) != 0 {
 | 
											
												
													
														|  | 
 |  | +		t.Fatal("Expected at least one table in the summary, got none")
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +func TestListRecords(t *testing.T) {
 | 
											
												
													
														|  | 
 |  | +	teardownSuite := setupSuite(t)
 | 
											
												
													
														|  | 
 |  | +	defer teardownSuite(t)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	// Create a new logger
 | 
											
												
													
														|  | 
 |  | +	logger, err := NewLogger()
 | 
											
												
													
														|  | 
 |  | +	if err != nil {
 | 
											
												
													
														|  | 
 |  | +		t.Fatalf("Failed to create a new logger: %v", err)
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	defer logger.Close()
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	err = logger.LogAuthByRequestInfo("testUser", "192.168.1.1:8080", time.Now().Unix(), true, "custom")
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	// Assuming there is at least one table in the test environment
 | 
											
												
													
														|  | 
 |  | +	summary := logger.ListSummary()
 | 
											
												
													
														|  | 
 |  | +	if len(summary) == 0 {
 | 
											
												
													
														|  | 
 |  | +		t.Fatalf("Expected at least one record in the table, got none")
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	// Test listing records from the first table
 | 
											
												
													
														|  | 
 |  | +	records, err := logger.ListRecords(summary[0])
 | 
											
												
													
														|  | 
 |  | +	if err != nil {
 | 
											
												
													
														|  | 
 |  | +		t.Fatalf("Failed to list records: %v", err)
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	// Assuming there are records in the table
 | 
											
												
													
														|  | 
 |  | +	if len(records) == 0 {
 | 
											
												
													
														|  | 
 |  | +		t.Fatalf("Expected at least one record in the table, got none")
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +func TestLogAuthByRequestInfo(t *testing.T) {
 | 
											
												
													
														|  | 
 |  | +	teardownSuite := setupSuite(t)
 | 
											
												
													
														|  | 
 |  | +	defer teardownSuite(t)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	// Create a new logger
 | 
											
												
													
														|  | 
 |  | +	logger, err := NewLogger()
 | 
											
												
													
														|  | 
 |  | +	if err != nil {
 | 
											
												
													
														|  | 
 |  | +		t.Fatalf("Failed to create a new logger: %v", err)
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	defer logger.Close()
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	// Test logging authentication with custom request info
 | 
											
												
													
														|  | 
 |  | +	tt := time.Now().Unix()
 | 
											
												
													
														|  | 
 |  | +	err = logger.LogAuthByRequestInfo("testUser", "192.168.1.1:8080", tt, true, "custom")
 | 
											
												
													
														|  | 
 |  | +	if err != nil {
 | 
											
												
													
														|  | 
 |  | +		t.Errorf("Failed to log authentication with custom request info: %v", err)
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	if len(logger.ListSummary()) != 1 {
 | 
											
												
													
														|  | 
 |  | +		t.Fatalf("Expected list summary:1, curr: 0")
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	summary, err := logger.ListRecords(logger.ListSummary()[0])
 | 
											
												
													
														|  | 
 |  | +	if err != nil {
 | 
											
												
													
														|  | 
 |  | +		t.Fatalf("Failed to list records: %v", err)
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	// should be only 1
 | 
											
												
													
														|  | 
 |  | +	for _, record := range summary {
 | 
											
												
													
														|  | 
 |  | +		if record.AuthType != "custom" {
 | 
											
												
													
														|  | 
 |  | +			t.Fatalf("AuthType expected: %v, got: %v", "custom", record.AuthType)
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		if record.IpAddr != "192.168.1.1" {
 | 
											
												
													
														|  | 
 |  | +			t.Fatalf("IpAddr expected: %v, got: %v", "192.168.1.1", record.IpAddr)
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		if record.LoginSucceed != true {
 | 
											
												
													
														|  | 
 |  | +			t.Fatalf("LoginSucceed expected: %v, got: %v", true, record.LoginSucceed)
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		if record.Port != 8080 {
 | 
											
												
													
														|  | 
 |  | +			t.Fatalf("Port expected: %v, got: %v", 8080, record.LoginSucceed)
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		if record.TargetUsername != "testUser" {
 | 
											
												
													
														|  | 
 |  | +			t.Fatalf("TargetUsername expected: %v, got: %v", "testUser", record.TargetUsername)
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		if record.Timestamp != tt {
 | 
											
												
													
														|  | 
 |  | +			t.Fatalf("Timestamp expected: %v, got: %v", tt, record.Timestamp)
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +}
 |