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