1
0
Fork 0
mirror of https://git.sr.ht/~ashkeel/strimertul synced 2024-09-18 01:50:50 +00:00
strimertul/webserver/server_test.go

99 lines
2.1 KiB
Go

package webserver
import (
"fmt"
"testing"
"time"
"go.uber.org/zap/zaptest"
"github.com/strimertul/strimertul/database"
)
func TestNewServer(t *testing.T) {
logger := zaptest.NewLogger(t)
client, _ := database.CreateInMemoryLocalClient(t)
defer database.CleanupLocalClient(client)
_, err := NewServer(client, logger, DefaultServerFactory)
if err != nil {
t.Fatal(err)
}
}
func TestNewServerWithTestFactory(t *testing.T) {
logger := zaptest.NewLogger(t)
client, _ := database.CreateInMemoryLocalClient(t)
defer database.CleanupLocalClient(client)
testServer := NewTestServer()
_, err := NewServer(client, logger, testServer.Factory())
if err != nil {
t.Fatal(err)
}
}
func TestListen(t *testing.T) {
logger := zaptest.NewLogger(t)
client, _ := database.CreateInMemoryLocalClient(t)
defer database.CleanupLocalClient(client)
// Create a test server
testServer := NewTestServer()
server, err := NewServer(client, logger, testServer.Factory())
if err != nil {
t.Fatal(err)
}
// Start the server
finished := make(chan struct{})
go func() {
err := server.Listen()
if err != nil {
t.Error(err)
}
finished <- struct{}{}
}()
// Wait for the server to start up so we can get the client
testServer.Wait()
// Make a request to the server
httpClient := testServer.Client()
resp, err := httpClient.Get(fmt.Sprintf("%s/health", testServer.URL()))
if err != nil {
t.Fatal(err)
}
if resp.StatusCode != 200 {
t.Fatalf("Expected 200, got %d", resp.StatusCode)
}
// Close the server
err = server.Close()
if err != nil {
t.Fatal(err)
}
// Make sure the related goroutines have terminated
select {
case <-finished:
case <-time.After(time.Second * 2):
t.Fatal("Server did not shut down in time")
}
}
func TestGeneratePassword(t *testing.T) {
// Generate a bunch of passwords and make sure they are different and sufficiently long
passwords := make(map[string]bool)
for i := 0; i < 100; i++ {
password := generatePassword()
if len(password) < 8 {
t.Fatalf("Password '%s' is empty or too short", password)
}
if passwords[password] {
t.Fatal("Duplicate password")
}
passwords[password] = true
}
}