server/internal/database/database_test.go (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
package database import ( "context" "log" "testing" "time" "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/modules/postgres" "github.com/testcontainers/testcontainers-go/wait" ) func mustStartPostgresContainer() (func(context.Context) error, error) { var ( dbName = "database" dbPwd = "password" dbUser = "user" ) dbContainer, err := postgres.Run( context.Background(), "postgres:latest", postgres.WithDatabase(dbName), postgres.WithUsername(dbUser), postgres.WithPassword(dbPwd), testcontainers.WithWaitStrategy( wait.ForLog("database system is ready to accept connections"). WithOccurrence(2). WithStartupTimeout(5*time.Second)), ) if err != nil { return nil, err } database = dbName password = dbPwd username = dbUser dbHost, err := dbContainer.Host(context.Background()) if err != nil { return dbContainer.Terminate, err } dbPort, err := dbContainer.MappedPort(context.Background(), "5432/tcp") if err != nil { return dbContainer.Terminate, err } host = dbHost port = dbPort.Port() return dbContainer.Terminate, err } func TestMain(m *testing.M) { teardown, err := mustStartPostgresContainer() if err != nil { log.Fatalf("could not start postgres container: %v", err) } m.Run() if teardown != nil && teardown(context.Background()) != nil { log.Fatalf("could not teardown postgres container: %v", err) } } func TestNew(t *testing.T) { srv := New() if srv == nil { t.Fatal("New() returned nil") } } func TestHealth(t *testing.T) { srv := New() stats := srv.Health() if stats["status"] != "up" { t.Fatalf("expected status to be up, got %s", stats["status"]) } if _, ok := stats["error"]; ok { t.Fatalf("expected error not to be present") } if stats["message"] != "It's healthy" { t.Fatalf("expected message to be 'It's healthy', got %s", stats["message"]) } } func TestClose(t *testing.T) { srv := New() if srv.Close() != nil { t.Fatalf("expected Close() to return nil") } } |