mirror of
https://git.sr.ht/~ashkeel/strimertul
synced 2024-09-18 01:50:50 +00:00
99 lines
2.1 KiB
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
|
||
|
}
|
||
|
}
|