Skip to content

Commit d664d10

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

File tree

2 files changed

+86
-1
lines changed

2 files changed

+86
-1
lines changed

modules/mssql/mssql_test.go

Lines changed: 72 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,72 @@ 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{mssql.WithAcceptEULA()}, options...)...,
146+
)
147+
testcontainers.CleanupContainer(t, ctr)
148+
require.NoError(t, err)
149+
150+
connectionString, err := ctr.ConnectionString(ctx)
151+
require.NoError(t, err)
152+
153+
db, err := sql.Open("sqlserver", connectionString)
154+
require.NoError(t, err)
155+
defer db.Close()
156+
157+
err = db.PingContext(ctx)
158+
require.NoError(t, err)
159+
160+
rows, err := db.QueryContext(ctx, "SELECT * FROM pizza_palace.pizzas")
161+
require.NoError(t, err)
162+
defer rows.Close()
163+
164+
type Pizza struct {
165+
ID int
166+
ToppingName string
167+
Deliciousness string
168+
}
169+
170+
want := []Pizza{
171+
{1, "Pineapple", "Controversial but tasty"},
172+
{2, "Pepperoni", "Classic never fails"},
173+
}
174+
got := make([]Pizza, 0, len(want))
175+
176+
for rows.Next() {
177+
var p Pizza
178+
err := rows.Scan(&p.ID, &p.ToppingName, &p.Deliciousness)
179+
require.NoError(t, err)
180+
got = append(got, p)
181+
}
182+
183+
require.EqualValues(t, want, got)
184+
}
185+
186+
ctx := t.Context()
187+
188+
t.Run("WithPassword/beforeWithScripts", func(t *testing.T) {
189+
assertContainer(t, ctx,
190+
mssql.WithPassword(password),
191+
mssql.WithInitSQL(bytes.NewReader(seedSQLContent)),
192+
)
193+
})
194+
195+
t.Run("WithPassword/afterWithScripts", func(t *testing.T) {
196+
assertContainer(t, ctx,
197+
mssql.WithInitSQL(bytes.NewReader(seedSQLContent)),
198+
mssql.WithPassword(password),
199+
)
200+
})
201+
}

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)