-
Notifications
You must be signed in to change notification settings - Fork 369
Expand file tree
/
Copy pathdisk_entitlements_migration_test.go
More file actions
111 lines (96 loc) · 3.37 KB
/
Copy pathdisk_entitlements_migration_test.go
File metadata and controls
111 lines (96 loc) · 3.37 KB
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
101
102
103
104
105
106
107
108
109
110
111
package tests
import (
"database/sql"
"testing"
"github.com/google/uuid"
"github.com/stretchr/testify/require"
"github.com/e2b-dev/infra/packages/db/pkg/testutils"
testqueries "github.com/e2b-dev/infra/packages/db/pkg/testutils/queries"
)
func TestDiskEntitlementsMigration(t *testing.T) {
t.Parallel()
db := testutils.SetupDatabase(t)
ctx := t.Context()
sqlDB, err := sql.Open("pgx", db.ConnStr())
require.NoError(t, err)
t.Cleanup(func() { require.NoError(t, sqlDB.Close()) })
var columnCount int64
var nullableWithoutDefaults bool
err = sqlDB.QueryRowContext(ctx, `
SELECT COUNT(*), BOOL_AND(data_type = 'bigint' AND is_nullable = 'YES' AND column_default IS NULL)
FROM information_schema.columns
WHERE table_schema = 'public'
AND (table_name, column_name) IN (
('tiers', 'default_free_disk_size_mb'),
('tiers', 'max_disk_size_mb'),
('addons', 'extra_max_disk_size_mb')
)
`).Scan(&columnCount, &nullableWithoutDefaults)
require.NoError(t, err)
require.Equal(t, int64(3), columnCount)
require.True(t, nullableWithoutDefaults)
var tierCount, invalidTierCount int64
err = sqlDB.QueryRowContext(ctx, `
SELECT COUNT(*), COUNT(*) FILTER (
WHERE default_free_disk_size_mb IS DISTINCT FROM disk_mb
OR max_disk_size_mb IS DISTINCT FROM disk_mb + 25000
)
FROM public.tiers
`).Scan(&tierCount, &invalidTierCount)
require.NoError(t, err)
require.NotZero(t, tierCount)
require.Zero(t, invalidTierCount)
var viewColumns string
err = sqlDB.QueryRowContext(ctx, `
SELECT string_agg(column_name, ',' ORDER BY ordinal_position)
FROM information_schema.columns
WHERE table_schema = 'public' AND table_name = 'team_limits'
`).Scan(&viewColumns)
require.NoError(t, err)
const legacyColumns = "id,max_length_hours,concurrent_sandboxes,concurrent_template_builds," +
"max_vcpu,max_ram_mb,disk_mb,events_ttl_days"
require.Equal(t, legacyColumns+",default_free_disk_size_mb,max_disk_size_mb", viewColumns)
var securityInvoker bool
err = sqlDB.QueryRowContext(ctx, `
SELECT COALESCE(reloptions @> ARRAY['security_invoker=on']::text[], false)
FROM pg_class
WHERE oid = 'public.team_limits'::regclass
`).Scan(&securityInvoker)
require.NoError(t, err)
require.True(t, securityInvoker)
_, err = sqlDB.ExecContext(ctx, `
INSERT INTO public.tiers (
id, name, disk_mb, concurrent_instances, max_length_hours,
default_free_disk_size_mb, max_disk_size_mb
)
VALUES ('en-1038-test', 'EN-1038 test', 10240, 1, 24, 8000, 30000)
`)
require.NoError(t, err)
teamID := uuid.New()
err = db.TestQueries.InsertTestTeam(ctx, testqueries.InsertTestTeamParams{
ID: teamID,
Name: "EN-1038 migration test",
Tier: "en-1038-test",
Email: "en-1038-migration@example.com",
Slug: "en-1038-migration",
})
require.NoError(t, err)
_, err = sqlDB.ExecContext(ctx, `
INSERT INTO public.addons (
team_id, name, extra_disk_mb, extra_max_disk_size_mb, added_by
)
VALUES ($1, 'EN-1038 test add-on', 1000, 3000,
'00000000-0000-0000-0000-000000000000')
`, teamID)
require.NoError(t, err)
var disk, defaultFree, maximum int64
err = sqlDB.QueryRowContext(ctx, `
SELECT disk_mb, default_free_disk_size_mb, max_disk_size_mb
FROM public.team_limits
WHERE id = $1
`, teamID).Scan(&disk, &defaultFree, &maximum)
require.NoError(t, err)
require.Equal(t, int64(11240), disk)
require.Equal(t, int64(9000), defaultFree)
require.Equal(t, int64(33000), maximum)
}