gocqlxtest: test helpers extracted to separate package

This commit is contained in:
Michał Matczuk
2018-05-24 10:48:37 +02:00
parent e74702cb6a
commit 9cfd46fcdd
4 changed files with 59 additions and 60 deletions

View File

@@ -13,6 +13,7 @@ import (
"github.com/gocql/gocql" "github.com/gocql/gocql"
"github.com/scylladb/gocqlx" "github.com/scylladb/gocqlx"
. "github.com/scylladb/gocqlx/gocqlxtest"
"github.com/scylladb/gocqlx/qb" "github.com/scylladb/gocqlx/qb"
) )
@@ -64,10 +65,10 @@ func loadFixtures() []*benchPerson {
// BenchmarkE2EGocqlInsert performs standard insert. // BenchmarkE2EGocqlInsert performs standard insert.
func BenchmarkE2EGocqlInsert(b *testing.B) { func BenchmarkE2EGocqlInsert(b *testing.B) {
people := loadFixtures() people := loadFixtures()
session := createSession(b) session := CreateSession(b)
defer session.Close() defer session.Close()
if err := createTable(session, benchPersonSchema); err != nil { if err := ExecStmt(session, benchPersonSchema); err != nil {
b.Fatal(err) b.Fatal(err)
} }
@@ -92,10 +93,10 @@ func BenchmarkE2EGocqlInsert(b *testing.B) {
// BenchmarkE2EGocqlInsert performs insert with struct binding. // BenchmarkE2EGocqlInsert performs insert with struct binding.
func BenchmarkE2EGocqlxInsert(b *testing.B) { func BenchmarkE2EGocqlxInsert(b *testing.B) {
people := loadFixtures() people := loadFixtures()
session := createSession(b) session := CreateSession(b)
defer session.Close() defer session.Close()
if err := createTable(session, benchPersonSchema); err != nil { if err := ExecStmt(session, benchPersonSchema); err != nil {
b.Fatal(err) b.Fatal(err)
} }
@@ -120,7 +121,7 @@ func BenchmarkE2EGocqlxInsert(b *testing.B) {
// BenchmarkE2EGocqlGet performs standard scan. // BenchmarkE2EGocqlGet performs standard scan.
func BenchmarkE2EGocqlGet(b *testing.B) { func BenchmarkE2EGocqlGet(b *testing.B) {
people := loadFixtures() people := loadFixtures()
session := createSession(b) session := CreateSession(b)
defer session.Close() defer session.Close()
initTable(b, session, people) initTable(b, session, people)
@@ -145,7 +146,7 @@ func BenchmarkE2EGocqlGet(b *testing.B) {
// BenchmarkE2EGocqlxGet performs get. // BenchmarkE2EGocqlxGet performs get.
func BenchmarkE2EGocqlxGet(b *testing.B) { func BenchmarkE2EGocqlxGet(b *testing.B) {
people := loadFixtures() people := loadFixtures()
session := createSession(b) session := CreateSession(b)
defer session.Close() defer session.Close()
initTable(b, session, people) initTable(b, session, people)
@@ -170,7 +171,7 @@ func BenchmarkE2EGocqlxGet(b *testing.B) {
// BenchmarkE2EGocqlSelect performs standard loop scan. // BenchmarkE2EGocqlSelect performs standard loop scan.
func BenchmarkE2EGocqlSelect(b *testing.B) { func BenchmarkE2EGocqlSelect(b *testing.B) {
people := loadFixtures() people := loadFixtures()
session := createSession(b) session := CreateSession(b)
defer session.Close() defer session.Close()
initTable(b, session, people) initTable(b, session, people)
@@ -200,7 +201,7 @@ func BenchmarkE2EGocqlSelect(b *testing.B) {
// BenchmarkE2EGocqlSelect performs select. // BenchmarkE2EGocqlSelect performs select.
func BenchmarkE2EGocqlxSelect(b *testing.B) { func BenchmarkE2EGocqlxSelect(b *testing.B) {
people := loadFixtures() people := loadFixtures()
session := createSession(b) session := CreateSession(b)
defer session.Close() defer session.Close()
initTable(b, session, people) initTable(b, session, people)
@@ -220,7 +221,7 @@ func BenchmarkE2EGocqlxSelect(b *testing.B) {
} }
func initTable(b *testing.B, session *gocql.Session, people []*benchPerson) { func initTable(b *testing.B, session *gocql.Session, people []*benchPerson) {
if err := createTable(session, benchPersonSchema); err != nil { if err := ExecStmt(session, benchPersonSchema); err != nil {
b.Fatal(err) b.Fatal(err)
} }

View File

@@ -11,6 +11,7 @@ import (
"time" "time"
"github.com/scylladb/gocqlx" "github.com/scylladb/gocqlx"
. "github.com/scylladb/gocqlx/gocqlxtest"
"github.com/scylladb/gocqlx/qb" "github.com/scylladb/gocqlx/qb"
) )
@@ -31,10 +32,10 @@ type Person struct {
} }
func TestExample(t *testing.T) { func TestExample(t *testing.T) {
session := createSession(t) session := CreateSession(t)
defer session.Close() defer session.Close()
if err := createTable(session, personSchema); err != nil { if err := ExecStmt(session, personSchema); err != nil {
t.Fatal("create table:", err) t.Fatal("create table:", err)
} }

View File

@@ -2,9 +2,7 @@
// Use of this source code is governed by a ALv2-style // Use of this source code is governed by a ALv2-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// +build all integration package gocqlxtest
package gocqlx_test
import ( import (
"flag" "flag"
@@ -38,13 +36,10 @@ func init() {
var initOnce sync.Once var initOnce sync.Once
func createTable(s *gocql.Session, table string) error { // CreateSession creates a new gocql session from flags.
if err := s.Query(table).RetryPolicy(nil).Exec(); err != nil { func CreateSession(tb testing.TB) *gocql.Session {
log.Printf("error creating table table=%q err=%v\n", table, err) cluster := createCluster()
return err return createSessionFromCluster(cluster, tb)
}
return nil
} }
func createCluster() *gocql.ClusterConfig { func createCluster() *gocql.ClusterConfig {
@@ -69,32 +64,6 @@ func createCluster() *gocql.ClusterConfig {
return cluster return cluster
} }
func createKeyspace(tb testing.TB, cluster *gocql.ClusterConfig, keyspace string) {
c := *cluster
c.Keyspace = "system"
c.Timeout = 30 * time.Second
session, err := c.CreateSession()
if err != nil {
panic(err)
}
defer session.Close()
err = createTable(session, `DROP KEYSPACE IF EXISTS `+keyspace)
if err != nil {
panic(fmt.Sprintf("unable to drop keyspace: %v", err))
}
err = createTable(session, fmt.Sprintf(`CREATE KEYSPACE %s
WITH replication = {
'class' : 'SimpleStrategy',
'replication_factor' : %d
}`, keyspace, *flagRF))
if err != nil {
panic(fmt.Sprintf("unable to create keyspace: %v", err))
}
}
func createSessionFromCluster(cluster *gocql.ClusterConfig, tb testing.TB) *gocql.Session { func createSessionFromCluster(cluster *gocql.ClusterConfig, tb testing.TB) *gocql.Session {
// Drop and re-create the keyspace once. Different tests should use their own // Drop and re-create the keyspace once. Different tests should use their own
// individual tables, but can assume that the table does not exist before. // individual tables, but can assume that the table does not exist before.
@@ -105,13 +74,41 @@ func createSessionFromCluster(cluster *gocql.ClusterConfig, tb testing.TB) *gocq
cluster.Keyspace = "gocqlx_test" cluster.Keyspace = "gocqlx_test"
session, err := cluster.CreateSession() session, err := cluster.CreateSession()
if err != nil { if err != nil {
tb.Fatal("createSession:", err) tb.Fatal("CreateSession:", err)
} }
return session return session
} }
func createSession(tb testing.TB) *gocql.Session { func createKeyspace(tb testing.TB, cluster *gocql.ClusterConfig, keyspace string) {
cluster := createCluster() c := *cluster
return createSessionFromCluster(cluster, tb) c.Keyspace = "system"
c.Timeout = 30 * time.Second
session, err := c.CreateSession()
if err != nil {
panic(err)
}
defer session.Close()
err = ExecStmt(session, `DROP KEYSPACE IF EXISTS `+keyspace)
if err != nil {
panic(fmt.Sprintf("unable to drop keyspace: %v", err))
}
err = ExecStmt(session, fmt.Sprintf(`CREATE KEYSPACE %s
WITH replication = {
'class' : 'SimpleStrategy',
'replication_factor' : %d
}`, keyspace, *flagRF))
if err != nil {
panic(fmt.Sprintf("unable to create keyspace: %v", err))
}
}
// ExecStmt executes a statement string.
func ExecStmt(s *gocql.Session, stmt string) error {
q := s.Query(stmt).RetryPolicy(nil)
defer q.Release()
return q.Exec()
} }

View File

@@ -15,7 +15,7 @@ import (
"github.com/gocql/gocql" "github.com/gocql/gocql"
"github.com/scylladb/gocqlx" "github.com/scylladb/gocqlx"
. "github.com/scylladb/gocqlx/gocqlxtest"
"gopkg.in/inf.v0" "gopkg.in/inf.v0"
) )
@@ -35,9 +35,9 @@ func (n *FullName) UnmarshalCQL(info gocql.TypeInfo, data []byte) error {
} }
func TestStruct(t *testing.T) { func TestStruct(t *testing.T) {
session := createSession(t) session := CreateSession(t)
defer session.Close() defer session.Close()
if err := createTable(session, `CREATE TABLE gocqlx_test.struct_table ( if err := ExecStmt(session, `CREATE TABLE gocqlx_test.struct_table (
testuuid timeuuid PRIMARY KEY, testuuid timeuuid PRIMARY KEY,
testtimestamp timestamp, testtimestamp timestamp,
testvarchar varchar, testvarchar varchar,
@@ -165,9 +165,9 @@ func TestStruct(t *testing.T) {
} }
func TestScannable(t *testing.T) { func TestScannable(t *testing.T) {
session := createSession(t) session := CreateSession(t)
defer session.Close() defer session.Close()
if err := createTable(session, `CREATE TABLE gocqlx_test.scannable_table (testfullname text PRIMARY KEY)`); err != nil { if err := ExecStmt(session, `CREATE TABLE gocqlx_test.scannable_table (testfullname text PRIMARY KEY)`); err != nil {
t.Fatal("create table:", err) t.Fatal("create table:", err)
} }
m := FullName{"John", "Doe"} m := FullName{"John", "Doe"}
@@ -219,9 +219,9 @@ func TestScannable(t *testing.T) {
} }
func TestUnsafe(t *testing.T) { func TestUnsafe(t *testing.T) {
session := createSession(t) session := CreateSession(t)
defer session.Close() defer session.Close()
if err := createTable(session, `CREATE TABLE gocqlx_test.unsafe_table (testtext text PRIMARY KEY, testtextunbound text)`); err != nil { if err := ExecStmt(session, `CREATE TABLE gocqlx_test.unsafe_table (testtext text PRIMARY KEY, testtextunbound text)`); err != nil {
t.Fatal("create table:", err) t.Fatal("create table:", err)
} }
if err := session.Query(`INSERT INTO unsafe_table (testtext, testtextunbound) values (?, ?)`, "test", "test").Exec(); err != nil { if err := session.Query(`INSERT INTO unsafe_table (testtext, testtextunbound) values (?, ?)`, "test", "test").Exec(); err != nil {
@@ -278,9 +278,9 @@ func TestUnsafe(t *testing.T) {
} }
func TestNotFound(t *testing.T) { func TestNotFound(t *testing.T) {
session := createSession(t) session := CreateSession(t)
defer session.Close() defer session.Close()
if err := createTable(session, `CREATE TABLE gocqlx_test.not_found_table (testtext text PRIMARY KEY)`); err != nil { if err := ExecStmt(session, `CREATE TABLE gocqlx_test.not_found_table (testtext text PRIMARY KEY)`); err != nil {
t.Fatal("create table:", err) t.Fatal("create table:", err)
} }