mirror of
https://github.com/yusing/godoxy.git
synced 2026-04-24 09:48:49 +02:00
fix(rules): simplify and correct tests
This commit is contained in:
@@ -5,8 +5,6 @@ import (
|
||||
"maps"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
@@ -44,18 +42,14 @@ func TestLogCommand_TemporaryFile(t *testing.T) {
|
||||
"Content-Type": []string{"application/json"},
|
||||
})
|
||||
|
||||
// Create a temporary file for logging
|
||||
tempFile, err := os.CreateTemp("", "test-log-*.log")
|
||||
require.NoError(t, err)
|
||||
tempFile.Close()
|
||||
defer os.Remove(tempFile.Name())
|
||||
logFile := TestRandomFileName()
|
||||
|
||||
var rules Rules
|
||||
err = parseRules(fmt.Sprintf(`
|
||||
err := parseRules(fmt.Sprintf(`
|
||||
- name: log-request-response
|
||||
do: |
|
||||
log info %q '$req_method $req_url $status_code $resp_header(Content-Type)'
|
||||
`, tempFile.Name()), &rules)
|
||||
`, logFile), &rules)
|
||||
require.NoError(t, err)
|
||||
|
||||
handler := rules.BuildHandler(upstream)
|
||||
@@ -70,8 +64,7 @@ func TestLogCommand_TemporaryFile(t *testing.T) {
|
||||
assert.Equal(t, "success response", w.Body.String())
|
||||
|
||||
// Read and verify log content
|
||||
content, err := os.ReadFile(tempFile.Name())
|
||||
require.NoError(t, err)
|
||||
content := TestFileContent(logFile)
|
||||
logContent := string(content)
|
||||
|
||||
assert.Equal(t, "POST /api/users 200 application/json\n", logContent)
|
||||
@@ -106,24 +99,12 @@ func TestLogCommand_StdoutAndStderr(t *testing.T) {
|
||||
func TestLogCommand_DifferentLogLevels(t *testing.T) {
|
||||
upstream := mockUpstream(404, "not found")
|
||||
|
||||
// Create temporary files for different log levels
|
||||
infoFile, err := os.CreateTemp("", "test-info-*.log")
|
||||
require.NoError(t, err)
|
||||
infoFile.Close()
|
||||
defer os.Remove(infoFile.Name())
|
||||
|
||||
warnFile, err := os.CreateTemp("", "test-warn-*.log")
|
||||
require.NoError(t, err)
|
||||
warnFile.Close()
|
||||
defer os.Remove(warnFile.Name())
|
||||
|
||||
errorFile, err := os.CreateTemp("", "test-error-*.log")
|
||||
require.NoError(t, err)
|
||||
errorFile.Close()
|
||||
defer os.Remove(errorFile.Name())
|
||||
infoFile := TestRandomFileName()
|
||||
warnFile := TestRandomFileName()
|
||||
errorFile := TestRandomFileName()
|
||||
|
||||
var rules Rules
|
||||
err = parseRules(fmt.Sprintf(`
|
||||
err := parseRules(fmt.Sprintf(`
|
||||
- name: log-info
|
||||
do: |
|
||||
log info %s "INFO: $req_method $status_code"
|
||||
@@ -133,7 +114,7 @@ func TestLogCommand_DifferentLogLevels(t *testing.T) {
|
||||
- name: log-error
|
||||
do: |
|
||||
log error %s "ERROR: $req_method $req_path $status_code"
|
||||
`, infoFile.Name(), warnFile.Name(), errorFile.Name()), &rules)
|
||||
`, infoFile, warnFile, errorFile), &rules)
|
||||
require.NoError(t, err)
|
||||
|
||||
handler := rules.BuildHandler(upstream)
|
||||
@@ -146,16 +127,13 @@ func TestLogCommand_DifferentLogLevels(t *testing.T) {
|
||||
assert.Equal(t, 404, w.Code)
|
||||
|
||||
// Verify each log file
|
||||
infoContent, err := os.ReadFile(infoFile.Name())
|
||||
require.NoError(t, err)
|
||||
infoContent := TestFileContent(infoFile)
|
||||
assert.Equal(t, "INFO: DELETE 404", strings.TrimSpace(string(infoContent)))
|
||||
|
||||
warnContent, err := os.ReadFile(warnFile.Name())
|
||||
require.NoError(t, err)
|
||||
warnContent := TestFileContent(warnFile)
|
||||
assert.Equal(t, "WARN: /api/resource/123 404", strings.TrimSpace(string(warnContent)))
|
||||
|
||||
errorContent, err := os.ReadFile(errorFile.Name())
|
||||
require.NoError(t, err)
|
||||
errorContent := TestFileContent(errorFile)
|
||||
assert.Equal(t, "ERROR: DELETE /api/resource/123 404", strings.TrimSpace(string(errorContent)))
|
||||
}
|
||||
|
||||
@@ -167,18 +145,14 @@ func TestLogCommand_TemplateVariables(t *testing.T) {
|
||||
w.Write([]byte("created"))
|
||||
})
|
||||
|
||||
// Create temporary file
|
||||
tempFile, err := os.CreateTemp("", "test-template-*.log")
|
||||
require.NoError(t, err)
|
||||
tempFile.Close()
|
||||
defer os.Remove(tempFile.Name())
|
||||
tempFile := TestRandomFileName()
|
||||
|
||||
var rules Rules
|
||||
err = parseRules(fmt.Sprintf(`
|
||||
err := parseRules(fmt.Sprintf(`
|
||||
- name: log-with-templates
|
||||
do: |
|
||||
log info %s 'Request: $req_method $req_url Host: $req_host User-Agent: $header(User-Agent) Response: $status_code Custom-Header: $resp_header(X-Custom-Header) Content-Length: $resp_header(Content-Length)'
|
||||
`, tempFile.Name()), &rules)
|
||||
`, tempFile), &rules)
|
||||
require.NoError(t, err)
|
||||
|
||||
handler := rules.BuildHandler(upstream)
|
||||
@@ -193,8 +167,7 @@ func TestLogCommand_TemplateVariables(t *testing.T) {
|
||||
assert.Equal(t, 201, w.Code)
|
||||
|
||||
// Verify log content
|
||||
content, err := os.ReadFile(tempFile.Name())
|
||||
require.NoError(t, err)
|
||||
content := TestFileContent(tempFile)
|
||||
logContent := strings.TrimSpace(string(content))
|
||||
|
||||
assert.Equal(t, "Request: PUT /api/resource Host: example.com User-Agent: test-client/1.0 Response: 201 Custom-Header: custom-value Content-Length: 42", logContent)
|
||||
@@ -215,19 +188,11 @@ func TestLogCommand_ConditionalLogging(t *testing.T) {
|
||||
}
|
||||
})
|
||||
|
||||
// Create temporary files
|
||||
successFile, err := os.CreateTemp("", "test-success-*.log")
|
||||
require.NoError(t, err)
|
||||
successFile.Close()
|
||||
defer os.Remove(successFile.Name())
|
||||
|
||||
errorFile, err := os.CreateTemp("", "test-error-*.log")
|
||||
require.NoError(t, err)
|
||||
errorFile.Close()
|
||||
defer os.Remove(errorFile.Name())
|
||||
successFile := TestRandomFileName()
|
||||
errorFile := TestRandomFileName()
|
||||
|
||||
var rules Rules
|
||||
err = parseRules(fmt.Sprintf(`
|
||||
err := parseRules(fmt.Sprintf(`
|
||||
- name: log-success
|
||||
on: status 2xx
|
||||
do: |
|
||||
@@ -236,7 +201,7 @@ func TestLogCommand_ConditionalLogging(t *testing.T) {
|
||||
on: status 4xx | status 5xx
|
||||
do: |
|
||||
log error %q "ERROR: $req_method $req_path $status_code"
|
||||
`, successFile.Name(), errorFile.Name()), &rules)
|
||||
`, successFile, errorFile), &rules)
|
||||
require.NoError(t, err)
|
||||
|
||||
handler := rules.BuildHandler(upstream)
|
||||
@@ -260,15 +225,13 @@ func TestLogCommand_ConditionalLogging(t *testing.T) {
|
||||
assert.Equal(t, 500, w3.Code)
|
||||
|
||||
// Verify success log
|
||||
successContent, err := os.ReadFile(successFile.Name())
|
||||
require.NoError(t, err)
|
||||
successContent := TestFileContent(successFile)
|
||||
successLines := strings.Split(strings.TrimSpace(string(successContent)), "\n")
|
||||
assert.Len(t, successLines, 1)
|
||||
assert.Equal(t, "SUCCESS: GET /success 200", successLines[0])
|
||||
|
||||
// Verify error log
|
||||
errorContent, err := os.ReadFile(errorFile.Name())
|
||||
require.NoError(t, err)
|
||||
errorContent := TestFileContent(errorFile)
|
||||
errorLines := strings.Split(strings.TrimSpace(string(errorContent)), "\n")
|
||||
require.Len(t, errorLines, 2)
|
||||
assert.Equal(t, "ERROR: GET /notfound 404", errorLines[0])
|
||||
@@ -278,17 +241,13 @@ func TestLogCommand_ConditionalLogging(t *testing.T) {
|
||||
func TestLogCommand_MultipleLogEntries(t *testing.T) {
|
||||
upstream := mockUpstream(200, "response")
|
||||
|
||||
// Create temporary file
|
||||
tempFile, err := os.CreateTemp("", "test-multiple-*.log")
|
||||
require.NoError(t, err)
|
||||
tempFile.Close()
|
||||
defer os.Remove(tempFile.Name())
|
||||
tempFile := TestRandomFileName()
|
||||
|
||||
var rules Rules
|
||||
err = parseRules(fmt.Sprintf(`
|
||||
err := parseRules(fmt.Sprintf(`
|
||||
- name: log-multiple
|
||||
do: |
|
||||
log info %q "$req_method $req_path $status_code"`, tempFile.Name()), &rules)
|
||||
log info %q "$req_method $req_path $status_code"`, tempFile), &rules)
|
||||
require.NoError(t, err)
|
||||
|
||||
handler := rules.BuildHandler(upstream)
|
||||
@@ -312,8 +271,7 @@ func TestLogCommand_MultipleLogEntries(t *testing.T) {
|
||||
}
|
||||
|
||||
// Verify all requests were logged
|
||||
content, err := os.ReadFile(tempFile.Name())
|
||||
require.NoError(t, err)
|
||||
content := TestFileContent(tempFile)
|
||||
logContent := strings.TrimSpace(string(content))
|
||||
lines := strings.Split(logContent, "\n")
|
||||
|
||||
@@ -325,54 +283,6 @@ func TestLogCommand_MultipleLogEntries(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestLogCommand_FilePermissions(t *testing.T) {
|
||||
upstream := mockUpstream(200, "success")
|
||||
|
||||
// Create a temporary directory
|
||||
tempDir, err := os.MkdirTemp("", "test-log-dir")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(tempDir)
|
||||
|
||||
// Create a log file path within the temp directory
|
||||
logFilePath := filepath.Join(tempDir, "test.log")
|
||||
|
||||
var rules Rules
|
||||
err = parseRules(fmt.Sprintf(`
|
||||
- on: status 2xx
|
||||
do: log info %q "$req_method $status_code"`, logFilePath), &rules)
|
||||
require.NoError(t, err)
|
||||
|
||||
handler := rules.BuildHandler(upstream)
|
||||
|
||||
req := httptest.NewRequest("GET", "/test", nil)
|
||||
w := httptest.NewRecorder()
|
||||
|
||||
handler.ServeHTTP(w, req)
|
||||
|
||||
assert.Equal(t, 200, w.Code)
|
||||
|
||||
// Verify file was created and is writable
|
||||
_, err = os.Stat(logFilePath)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Test writing to the file again to ensure it's not closed
|
||||
req2 := httptest.NewRequest("POST", "/test2", nil)
|
||||
w2 := httptest.NewRecorder()
|
||||
handler.ServeHTTP(w2, req2)
|
||||
|
||||
assert.Equal(t, 200, w2.Code)
|
||||
|
||||
// Verify both entries are in the file
|
||||
content, err := os.ReadFile(logFilePath)
|
||||
require.NoError(t, err)
|
||||
logContent := strings.TrimSpace(string(content))
|
||||
lines := strings.Split(logContent, "\n")
|
||||
|
||||
require.Len(t, lines, 2)
|
||||
assert.Equal(t, "GET 200", lines[0])
|
||||
assert.Equal(t, "POST 200", lines[1])
|
||||
}
|
||||
|
||||
func TestLogCommand_InvalidTemplate(t *testing.T) {
|
||||
var rules Rules
|
||||
|
||||
|
||||
Reference in New Issue
Block a user