github.com/etecs-ru/gnomock@v0.13.2/preset/mssql/preset_test.go (about) 1 package mssql_test 2 3 import ( 4 "database/sql" 5 "fmt" 6 "os" 7 "testing" 8 9 "github.com/etecs-ru/gnomock" 10 "github.com/etecs-ru/gnomock/preset/mssql" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestPreset(t *testing.T) { 15 t.Parallel() 16 17 for _, version := range []string{"2017-latest", "2019-latest"} { 18 t.Run(version, testPreset(version)) 19 } 20 } 21 22 func testPreset(version string) func(t *testing.T) { 23 return func(t *testing.T) { 24 queries := ` 25 insert into t (a) values (1); 26 insert into t (a) values (2); 27 ` 28 query := `insert into t (a) values (3);` 29 p := mssql.Preset( 30 mssql.WithLicense(true), 31 mssql.WithAdminPassword("Passw0rd-"), 32 mssql.WithQueries(queries, query), 33 mssql.WithDatabase("foobar"), 34 mssql.WithVersion(version), 35 mssql.WithQueriesFile("./testdata/queries.sql"), 36 ) 37 38 container, err := gnomock.Start(p, gnomock.WithLogWriter(os.Stdout)) 39 40 defer func() { _ = gnomock.Stop(container) }() 41 42 require.NoError(t, err) 43 44 addr := container.DefaultAddress() 45 connStr := fmt.Sprintf("sqlserver://sa:Passw0rd-@%s?database=foobar", addr) 46 47 db, err := sql.Open("sqlserver", connStr) 48 require.NoError(t, err) 49 50 var max, avg, min, count float64 51 52 rows := db.QueryRow("select max(a), avg(a), min(a), count(a) from t") 53 54 err = rows.Scan(&max, &avg, &min, &count) 55 require.NoError(t, err) 56 57 require.Equal(t, float64(3), max) 58 require.Equal(t, float64(2), avg) 59 require.Equal(t, float64(1), min) 60 require.Equal(t, float64(3), count) 61 } 62 } 63 64 func TestPreset_withDefaults(t *testing.T) { 65 t.Parallel() 66 67 p := mssql.Preset(mssql.WithLicense(true)) 68 container, err := gnomock.Start(p) 69 70 defer func() { require.NoError(t, gnomock.Stop(container)) }() 71 72 require.NoError(t, err) 73 74 addr := container.DefaultAddress() 75 connStr := fmt.Sprintf("sqlserver://sa:Gn0m!ck~@%s?database=mydb", addr) 76 77 db, err := sql.Open("sqlserver", connStr) 78 require.NoError(t, err) 79 require.NoError(t, db.Close()) 80 } 81 82 func TestPreset_wrongQueriesFile(t *testing.T) { 83 t.Parallel() 84 85 p := mssql.Preset( 86 mssql.WithLicense(true), 87 mssql.WithQueriesFile("./invalid"), 88 ) 89 c, err := gnomock.Start(p) 90 require.Error(t, err) 91 require.Contains(t, err.Error(), "can't read queries file") 92 require.NoError(t, gnomock.Stop(c)) 93 }