1package backup
2
3import (
4 "testing"
5
6 "github.com/bnema/gordon/internal/domain"
7 "github.com/stretchr/testify/assert"
8 "github.com/stretchr/testify/require"
9)
10
11func TestDetectDatabaseFromAttachment_ExtractsPostgresVersion(t *testing.T) {
12 db, ok := detectDatabaseFromAttachment("app.example.com", domain.Attachment{
13 Name: "postgres",
14 Image: "postgres:17.4-alpine",
15 ContainerID: "abc123",
16 Ports: []int{55432},
17 })
18
19 require.True(t, ok)
20 assert.Equal(t, domain.DBTypePostgreSQL, db.Type)
21 assert.Equal(t, "17", db.Version)
22 assert.Equal(t, 55432, db.Port)
23}
24
25func TestDetectDatabaseFromAttachment_DefaultPort(t *testing.T) {
26 db, ok := detectDatabaseFromAttachment("app.example.com", domain.Attachment{
27 Name: "postgres",
28 Image: "postgres:16",
29 ContainerID: "xyz789",
30 Ports: []int{},
31 })
32
33 require.True(t, ok)
34 assert.Equal(t, 5432, db.Port)
35 assert.Equal(t, "16", db.Version)
36}
37
38func TestDetectDatabaseFromAttachment_PrefersPostgresPort(t *testing.T) {
39 db, ok := detectDatabaseFromAttachment("app.example.com", domain.Attachment{
40 Name: "postgres",
41 Image: "postgres:16",
42 ContainerID: "xyz789",
43 Ports: []int{15432, 5432, 25432},
44 })
45
46 require.True(t, ok)
47 assert.Equal(t, 5432, db.Port)
48}
49
50func TestDetectDatabaseFromAttachment_UsesFirstPositivePortWhen5432Missing(t *testing.T) {
51 db, ok := detectDatabaseFromAttachment("app.example.com", domain.Attachment{
52 Name: "postgres",
53 Image: "postgres:16",
54 ContainerID: "xyz789",
55 Ports: []int{0, -1, 15432, 25432},
56 })
57
58 require.True(t, ok)
59 assert.Equal(t, 15432, db.Port)
60}
61
62func TestPostgresVersionFromImage(t *testing.T) {
63 assert.Equal(t, "18", postgresVersionFromImage("postgres:18"))
64 assert.Equal(t, "17", postgresVersionFromImage("postgres:17.4-alpine"))
65 assert.Equal(t, "", postgresVersionFromImage("postgres:latest"))
66 assert.Equal(t, "", postgresVersionFromImage("postgres:alpine"))
67 assert.Equal(t, "", postgresVersionFromImage("postgres"))
68}
69
70func TestDetectDatabaseFromAttachment_NonPostgres(t *testing.T) {
71 _, ok := detectDatabaseFromAttachment("app.example.com", domain.Attachment{
72 Name: "mysql",
73 Image: "mysql:8.0",
74 ContainerID: "def456",
75 Ports: []int{3306},
76 })
77 assert.False(t, ok)
78}