github.com/etecs-ru/gnomock@v0.13.2/preset/cockroachdb/README.md (about)

     1  # Gnomock CockroachDB
     2  
     3  Gnomock CockroachDB is a [Gnomock](https://github.com/orlangure/gnomock) preset for running tests against a real
     4  CockroachDB container, without mocks.
     5  
     6  ```go
     7  package cockroachdb_test
     8  
     9  import (
    10  	"database/sql"
    11  	"fmt"
    12  	"testing"
    13  
    14  	"github.com/orlangure/gnomock"
    15  	"github.com/orlangure/gnomock/preset/cockroachdb"
    16  	"github.com/stretchr/testify/require"
    17  )
    18  
    19  func TestPreset(t *testing.T) {
    20  	t.Parallel()
    21  
    22  	for _, version := range []string{"v19.2.11", "v20.1.10"} {
    23  		t.Run(version, testPreset(version))
    24  	}
    25  }
    26  
    27  func testPreset(version string) func(t *testing.T) {
    28  	return func(t *testing.T) {
    29  		queries := `
    30  			insert into t (a) values (1);
    31  			insert into t (a) values (2);
    32  		`
    33  		query := `insert into t (a) values (3);`
    34  		p := cockroachdb.Preset(
    35  			cockroachdb.WithDatabase("gnomock"),
    36  			cockroachdb.WithQueries(queries, query),
    37  			cockroachdb.WithQueriesFile("./testdata/queries.sql"),
    38  			cockroachdb.WithVersion(version),
    39  		)
    40  
    41  		container, err := gnomock.Start(p)
    42  		require.NoError(t, err)
    43  
    44  		defer func() { require.NoError(t, gnomock.Stop(container)) }()
    45  
    46  		connStr := fmt.Sprintf(
    47  			"host=%s port=%d user=root dbname=%s sslmode=disable",
    48  			container.Host, container.DefaultPort(), "gnomock",
    49  		)
    50  
    51  		db, err := sql.Open("postgres", connStr)
    52  		require.NoError(t, err)
    53  
    54  		var max, avg, min, count float64
    55  
    56  		rows := db.QueryRow("select max(a), avg(a), min(a), count(a) from t")
    57  		require.NoError(t, rows.Scan(&max, &avg, &min, &count))
    58  
    59  		require.Equal(t, float64(3), max)
    60  		require.Equal(t, float64(2), avg)
    61  		require.Equal(t, float64(1), min)
    62  		require.Equal(t, float64(3), count)
    63  	}
    64  }
    65  
    66  func TestPreset_withDefaults(t *testing.T) {
    67  	t.Parallel()
    68  
    69  	container, err := gnomock.Start(cockroachdb.Preset())
    70  
    71  	defer func() { require.NoError(t, gnomock.Stop(container)) }()
    72  
    73  	require.NoError(t, err)
    74  
    75  	connStr := fmt.Sprintf(
    76  		"host=%s port=%d user=root dbname=%s sslmode=disable",
    77  		container.Host, container.DefaultPort(), "mydb",
    78  	)
    79  
    80  	db, err := sql.Open("postgres", connStr)
    81  	require.NoError(t, err)
    82  	require.NoError(t, db.Close())
    83  }
    84  
    85  func TestPreset_wrongQueriesFile(t *testing.T) {
    86  	t.Parallel()
    87  
    88  	p := cockroachdb.Preset(
    89  		cockroachdb.WithQueriesFile("./invalid"),
    90  	)
    91  	c, err := gnomock.Start(p)
    92  	require.Error(t, err)
    93  	require.Contains(t, err.Error(), "can't read queries file")
    94  	require.NoError(t, gnomock.Stop(c))
    95  }
    96  ```
    97