Skip to content

Commit 0321f1e

Browse files
committed
test(mssql): add test for WithInitSQL
1 parent 49d3ae3 commit 0321f1e

File tree

2 files changed

+91
-1
lines changed

2 files changed

+91
-1
lines changed

modules/mssql/mssql_test.go

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package mssql_test
22

33
import (
4+
"bytes"
45
"context"
56
"database/sql"
67
"testing"
78

9+
_ "embed"
10+
811
_ "github.com/microsoft/go-mssqldb"
912
"github.com/stretchr/testify/require"
10-
1113
"github.com/testcontainers/testcontainers-go"
1214
"github.com/testcontainers/testcontainers-go/modules/mssql"
1315
"github.com/testcontainers/testcontainers-go/wait"
@@ -128,3 +130,77 @@ func TestMSSQLServerWithInvalidPassword(t *testing.T) {
128130
testcontainers.CleanupContainer(t, ctr)
129131
require.NoError(t, err)
130132
}
133+
134+
//go:embed testdata/seed.sql
135+
var seedSQLContent []byte
136+
137+
// tests that a container can be created with a DDL script
138+
func TestMSSQLServerWithScriptsDDL(t *testing.T) {
139+
const password = "MyCustom@Passw0rd"
140+
141+
// assertContainer contains the logic for asserting the test
142+
assertContainer := func(t *testing.T, ctx context.Context, options ...testcontainers.ContainerCustomizer) {
143+
ctr, err := mssql.Run(ctx,
144+
"mcr.microsoft.com/mssql/server:2022-CU17-ubuntu-22.04",
145+
append([]testcontainers.ContainerCustomizer{
146+
mssql.WithAcceptEULA(),
147+
testcontainers.CustomizeRequest(testcontainers.GenericContainerRequest{
148+
ProviderType: testcontainers.ProviderPodman,
149+
}),
150+
}, options...)...,
151+
)
152+
testcontainers.CleanupContainer(t, ctr)
153+
require.NoError(t, err)
154+
155+
connectionString, err := ctr.ConnectionString(ctx)
156+
require.NoError(t, err)
157+
158+
db, err := sql.Open("sqlserver", connectionString)
159+
require.NoError(t, err)
160+
defer db.Close()
161+
162+
err = db.PingContext(ctx)
163+
require.NoError(t, err)
164+
165+
rows, err := db.QueryContext(ctx, "SELECT * FROM pizza_palace.pizzas")
166+
require.NoError(t, err)
167+
defer rows.Close()
168+
169+
type Pizza struct {
170+
ID int
171+
ToppingName string
172+
Deliciousness string
173+
}
174+
175+
want := []Pizza{
176+
{1, "Pineapple", "Controversial but tasty"},
177+
{2, "Pepperoni", "Classic never fails"},
178+
}
179+
got := make([]Pizza, 0, len(want))
180+
181+
for rows.Next() {
182+
var p Pizza
183+
err := rows.Scan(&p.ID, &p.ToppingName, &p.Deliciousness)
184+
require.NoError(t, err)
185+
got = append(got, p)
186+
}
187+
188+
require.EqualValues(t, want, got)
189+
}
190+
191+
ctx := context.Background()
192+
193+
t.Run("WithPassword/beforeWithScripts", func(t *testing.T) {
194+
assertContainer(t, ctx,
195+
mssql.WithPassword(password),
196+
mssql.WithInitSQL(bytes.NewReader(seedSQLContent)),
197+
)
198+
})
199+
200+
t.Run("WithPassword/afterWithScripts", func(t *testing.T) {
201+
assertContainer(t, ctx,
202+
mssql.WithInitSQL(bytes.NewReader(seedSQLContent)),
203+
mssql.WithPassword(password),
204+
)
205+
})
206+
}

modules/mssql/testdata/seed.sql

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
CREATE SCHEMA pizza_palace;
2+
GO
3+
4+
CREATE TABLE pizza_palace.pizzas (
5+
ID INT PRIMARY KEY IDENTITY,
6+
ToppingName NVARCHAR(100),
7+
Deliciousness NVARCHAR(100) UNIQUE
8+
);
9+
GO
10+
11+
INSERT INTO pizza_palace.pizzas (ToppingName, Deliciousness) VALUES
12+
('Pineapple', 'Controversial but tasty'),
13+
('Pepperoni', 'Classic never fails')
14+
GO

0 commit comments

Comments
 (0)