Skip to content

Commit cd37c67

Browse files
author
mirkobrombin
committed
chore: Add logger, server handler, and middleware unit tests
1 parent cb10930 commit cd37c67

File tree

3 files changed

+187
-0
lines changed

3 files changed

+187
-0
lines changed

internal/logger/logger_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package logger
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"path/filepath"
7+
"testing"
8+
"time"
9+
10+
"github.com/mirkobrombin/goup/internal/config"
11+
)
12+
13+
func TestNewLogger(t *testing.T) {
14+
identifier := "test_identifier"
15+
16+
tmpDir := t.TempDir()
17+
config.SetCustomLogDir(tmpDir)
18+
logger, err := NewLogger(identifier)
19+
if err != nil {
20+
t.Fatalf("Error creating new logger: %v", err)
21+
}
22+
23+
if logger == nil {
24+
t.Fatalf("Logger is nil")
25+
}
26+
27+
year := time.Now().Year()
28+
month := time.Now().Month()
29+
day := time.Now().Day()
30+
31+
logDir := filepath.Join(tmpDir, identifier, fmt.Sprintf("%d", year), fmt.Sprintf("%02d", month))
32+
logFile := filepath.Join(logDir, fmt.Sprintf("%02d.log", day))
33+
if _, err := os.Stat(logFile); os.IsNotExist(err) {
34+
t.Errorf("Expected log file %s to exist", logFile)
35+
}
36+
}

internal/server/handler_test.go

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package server
2+
3+
import (
4+
"net/http"
5+
"net/http/httptest"
6+
"os"
7+
"path/filepath"
8+
"testing"
9+
10+
"github.com/mirkobrombin/goup/internal/config"
11+
log "github.com/sirupsen/logrus"
12+
)
13+
14+
func TestCreateHandler_Static(t *testing.T) {
15+
tmpDir, err := os.MkdirTemp("", "test_static")
16+
if err != nil {
17+
t.Fatalf("Error creating temp dir: %v", err)
18+
}
19+
defer os.RemoveAll(tmpDir)
20+
21+
testFilePath := filepath.Join(tmpDir, "testfile.txt")
22+
os.WriteFile(testFilePath, []byte("Test content"), 0644)
23+
24+
conf := config.SiteConfig{
25+
Domain: "example.com",
26+
RootDirectory: tmpDir,
27+
CustomHeaders: map[string]string{
28+
"X-Test-Header": "TestValue",
29+
},
30+
RequestTimeout: 60,
31+
}
32+
logger := log.New()
33+
identifier := "test"
34+
35+
handler, err := createHandler(conf, logger, identifier)
36+
if err != nil {
37+
t.Fatalf("Error creating handler: %v", err)
38+
}
39+
40+
req := httptest.NewRequest("GET", "http://example.com/testfile.txt", nil)
41+
w := httptest.NewRecorder()
42+
43+
handler.ServeHTTP(w, req)
44+
45+
if w.Code != 200 {
46+
t.Errorf("Expected status code 200, got %d", w.Code)
47+
}
48+
49+
if w.Header().Get("X-Test-Header") != "TestValue" {
50+
t.Errorf("Expected custom header X-Test-Header to be 'TestValue', got %s", w.Header().Get("X-Test-Header"))
51+
}
52+
53+
expectedBody := "Test content"
54+
if w.Body.String() != expectedBody {
55+
t.Errorf("Expected body %q, got %q", expectedBody, w.Body.String())
56+
}
57+
}
58+
59+
func TestCreateHandler_ProxyPass(t *testing.T) {
60+
backend := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
61+
w.Write([]byte("Backend Response"))
62+
}))
63+
defer backend.Close()
64+
65+
conf := config.SiteConfig{
66+
Domain: "example.com",
67+
ProxyPass: backend.URL,
68+
CustomHeaders: map[string]string{},
69+
RequestTimeout: 60,
70+
}
71+
logger := log.New()
72+
identifier := "test"
73+
74+
handler, err := createHandler(conf, logger, identifier)
75+
if err != nil {
76+
t.Fatalf("Error creating handler: %v", err)
77+
}
78+
79+
req := httptest.NewRequest("GET", "http://example.com/", nil)
80+
w := httptest.NewRecorder()
81+
82+
handler.ServeHTTP(w, req)
83+
84+
if w.Code != 200 {
85+
t.Errorf("Expected status code 200, got %d", w.Code)
86+
}
87+
88+
expectedBody := "Backend Response"
89+
if w.Body.String() != expectedBody {
90+
t.Errorf("Expected body %q, got %q", expectedBody, w.Body.String())
91+
}
92+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package middleware
2+
3+
import (
4+
"net/http"
5+
"net/http/httptest"
6+
"testing"
7+
"time"
8+
9+
log "github.com/sirupsen/logrus"
10+
)
11+
12+
func TestLoggingMiddleware(t *testing.T) {
13+
logger := log.New()
14+
logger.Out = httptest.NewRecorder() // Discard output on purpose
15+
16+
domain := "example.com"
17+
identifier := "test"
18+
19+
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
20+
w.WriteHeader(200)
21+
w.Write([]byte("OK"))
22+
})
23+
24+
middlewareHandler := LoggingMiddleware(logger, domain, identifier, handler)
25+
26+
req := httptest.NewRequest("GET", "http://example.com/test", nil)
27+
w := httptest.NewRecorder()
28+
29+
middlewareHandler.ServeHTTP(w, req)
30+
31+
if w.Code != 200 {
32+
t.Errorf("Expected status code 200, got %d", w.Code)
33+
}
34+
}
35+
36+
func TestTimeoutMiddleware(t *testing.T) {
37+
timeout := 1 * time.Second
38+
39+
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
40+
time.Sleep(2 * time.Second)
41+
w.Write([]byte("This should timeout"))
42+
})
43+
44+
middlewareHandler := TimeoutMiddleware(timeout, handler)
45+
46+
req := httptest.NewRequest("GET", "http://example.com/test", nil)
47+
w := httptest.NewRecorder()
48+
49+
middlewareHandler.ServeHTTP(w, req)
50+
51+
if w.Code != http.StatusServiceUnavailable {
52+
t.Errorf("Expected status code %d, got %d", http.StatusServiceUnavailable, w.Code)
53+
}
54+
55+
expectedBody := "Request timed out"
56+
if w.Body.String() != expectedBody {
57+
t.Errorf("Expected body %q, got %q", expectedBody, w.Body.String())
58+
}
59+
}

0 commit comments

Comments
 (0)