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  }