Browse Source

Add a method to create tables to let the schema propogate to other nodes

Chris Bannister 11 years ago
parent
commit
ebcbc994de
2 changed files with 33 additions and 24 deletions
  1. 31 22
      cassandra_test.go
  2. 2 2
      wiki_test.go

+ 31 - 22
cassandra_test.go

@@ -37,6 +37,15 @@ func init() {
 
 var initOnce sync.Once
 
+func createTable(s *Session, table string) error {
+	err := s.Query(table).Consistency(All).Exec()
+	if clusterSize > 1 {
+		// wait for table definition to propogate
+		time.Sleep(250 * time.Millisecond)
+	}
+	return err
+}
+
 func createSession(tb testing.TB) *Session {
 	cluster := NewCluster(clusterHosts...)
 	cluster.ProtoVersion = *flagProto
@@ -117,7 +126,7 @@ func TestTracing(t *testing.T) {
 	session := createSession(t)
 	defer session.Close()
 
-	if err := session.Query(`CREATE TABLE trace (id int primary key)`).Exec(); err != nil {
+	if err := createTable(session, `CREATE TABLE trace (id int primary key)`); err != nil {
 		t.Fatal("create:", err)
 	}
 
@@ -149,7 +158,7 @@ func TestPaging(t *testing.T) {
 	session := createSession(t)
 	defer session.Close()
 
-	if err := session.Query("CREATE TABLE paging (id int primary key)").Exec(); err != nil {
+	if err := createTable(session, "CREATE TABLE paging (id int primary key)"); err != nil {
 		t.Fatal("create table:", err)
 	}
 	for i := 0; i < 100; i++ {
@@ -180,11 +189,11 @@ func TestCAS(t *testing.T) {
 	session := createSession(t)
 	defer session.Close()
 
-	if err := session.Query(`CREATE TABLE cas_table (
+	if err := createTable(session, `CREATE TABLE cas_table (
 			title   varchar,
 			revid   timeuuid,
 			PRIMARY KEY (title, revid)
-		)`).Exec(); err != nil {
+		)`); err != nil {
 		t.Fatal("create:", err)
 	}
 
@@ -219,7 +228,7 @@ func TestBatch(t *testing.T) {
 	session := createSession(t)
 	defer session.Close()
 
-	if err := session.Query(`CREATE TABLE batch_table (id int primary key)`).Exec(); err != nil {
+	if err := createTable(session, `CREATE TABLE batch_table (id int primary key)`); err != nil {
 		t.Fatal("create table:", err)
 	}
 
@@ -248,7 +257,7 @@ func TestBatchLimit(t *testing.T) {
 	session := createSession(t)
 	defer session.Close()
 
-	if err := session.Query(`CREATE TABLE batch_table2 (id int primary key)`).Exec(); err != nil {
+	if err := createTable(session, `CREATE TABLE batch_table2 (id int primary key)`); err != nil {
 		t.Fatal("create table:", err)
 	}
 
@@ -271,7 +280,7 @@ func TestTooManyQueryArgs(t *testing.T) {
 	session := createSession(t)
 	defer session.Close()
 
-	if err := session.Query(`CREATE TABLE too_many_query_args (id int primary key, value int)`).Exec(); err != nil {
+	if err := createTable(session, `CREATE TABLE too_many_query_args (id int primary key, value int)`); err != nil {
 		t.Fatal("create table:", err)
 	}
 
@@ -308,7 +317,7 @@ func TestNotEnoughQueryArgs(t *testing.T) {
 	session := createSession(t)
 	defer session.Close()
 
-	if err := session.Query(`CREATE TABLE not_enough_query_args (id int, cluster int, value int, primary key (id, cluster))`).Exec(); err != nil {
+	if err := createTable(session, `CREATE TABLE not_enough_query_args (id int, cluster int, value int, primary key (id, cluster))`); err != nil {
 		t.Fatal("create table:", err)
 	}
 
@@ -356,7 +365,7 @@ func TestCreateSessionTimeout(t *testing.T) {
 func TestSliceMap(t *testing.T) {
 	session := createSession(t)
 	defer session.Close()
-	if err := session.Query(`CREATE TABLE slice_map_table (
+	if err := createTable(session, `CREATE TABLE slice_map_table (
 			testuuid       timeuuid PRIMARY KEY,
 			testtimestamp  timestamp,
 			testvarchar    varchar,
@@ -369,7 +378,7 @@ func TestSliceMap(t *testing.T) {
 			testdecimal    decimal,
 			testset        set<int>,
 			testmap        map<varchar, varchar>
-		)`).Exec(); err != nil {
+		)`); err != nil {
 		t.Fatal("create table:", err)
 	}
 	m := make(map[string]interface{})
@@ -488,11 +497,11 @@ func TestScanWithNilArguments(t *testing.T) {
 	session := createSession(t)
 	defer session.Close()
 
-	if err := session.Query(`CREATE TABLE scan_with_nil_arguments (
+	if err := createTable(session, `CREATE TABLE scan_with_nil_arguments (
 			foo   varchar,
 			bar   int,
 			PRIMARY KEY (foo, bar)
-	)`).Exec(); err != nil {
+	)`); err != nil {
 		t.Fatal("create:", err)
 	}
 	for i := 1; i <= 20; i++ {
@@ -524,11 +533,11 @@ func TestScanCASWithNilArguments(t *testing.T) {
 	session := createSession(t)
 	defer session.Close()
 
-	if err := session.Query(`CREATE TABLE scan_cas_with_nil_arguments (
+	if err := createTable(session, `CREATE TABLE scan_cas_with_nil_arguments (
 		foo   varchar,
 		bar   varchar,
 		PRIMARY KEY (foo, bar)
-	)`).Exec(); err != nil {
+	)`); err != nil {
 		t.Fatal("create:", err)
 	}
 
@@ -568,7 +577,7 @@ func TestRebindQueryInfo(t *testing.T) {
 	session := createSession(t)
 	defer session.Close()
 
-	if err := session.Query("CREATE TABLE rebind_query (id int, value text, PRIMARY KEY (id))").Exec(); err != nil {
+	if err := createTable(session, "CREATE TABLE rebind_query (id int, value text, PRIMARY KEY (id))"); err != nil {
 		t.Fatalf("failed to create table with error '%v'", err)
 	}
 
@@ -608,7 +617,7 @@ func TestStaticQueryInfo(t *testing.T) {
 	session := createSession(t)
 	defer session.Close()
 
-	if err := session.Query("CREATE TABLE static_query_info (id int, value text, PRIMARY KEY (id))").Exec(); err != nil {
+	if err := createTable(session, "CREATE TABLE static_query_info (id int, value text, PRIMARY KEY (id))"); err != nil {
 		t.Fatalf("failed to create table with error '%v'", err)
 	}
 
@@ -677,7 +686,7 @@ func TestBoundQueryInfo(t *testing.T) {
 	session := createSession(t)
 	defer session.Close()
 
-	if err := session.Query("CREATE TABLE clustered_query_info (id int, cluster int, value text, PRIMARY KEY (id, cluster))").Exec(); err != nil {
+	if err := createTable(session, "CREATE TABLE clustered_query_info (id int, cluster int, value text, PRIMARY KEY (id, cluster))"); err != nil {
 		t.Fatalf("failed to create table with error '%v'", err)
 	}
 
@@ -720,7 +729,7 @@ func TestBatchQueryInfo(t *testing.T) {
 	session := createSession(t)
 	defer session.Close()
 
-	if err := session.Query("CREATE TABLE batch_query_info (id int, cluster int, value text, PRIMARY KEY (id, cluster))").Exec(); err != nil {
+	if err := createTable(session, "CREATE TABLE batch_query_info (id int, cluster int, value text, PRIMARY KEY (id, cluster))"); err != nil {
 		t.Fatalf("failed to create table with error '%v'", err)
 	}
 
@@ -765,11 +774,11 @@ func TestBatchQueryInfo(t *testing.T) {
 }
 
 func injectInvalidPreparedStatement(t *testing.T, session *Session, table string) (string, *Conn) {
-	if err := session.Query(`CREATE TABLE ` + table + ` (
+	if err := createTable(session, `CREATE TABLE `+table+` (
 			foo   varchar,
 			bar   int,
 			PRIMARY KEY (foo, bar)
-	)`).Exec(); err != nil {
+	)`); err != nil {
 		t.Fatal("create:", err)
 	}
 	stmt := "INSERT INTO " + table + " (foo, bar) VALUES (?, 7)"
@@ -847,7 +856,7 @@ func TestPreparedCacheEviction(t *testing.T) {
 	stmtsLRU.Max(4)
 	stmtsLRU.mu.Unlock()
 
-	if err := session.Query("CREATE TABLE prepcachetest (id int,mod int,PRIMARY KEY (id))").Exec(); err != nil {
+	if err := createTable(session, "CREATE TABLE prepcachetest (id int,mod int,PRIMARY KEY (id))"); err != nil {
 		t.Fatalf("failed to create table with error '%v'", err)
 	}
 	//Fill the table
@@ -929,7 +938,7 @@ func TestMarshalFloat64Ptr(t *testing.T) {
 	session := createSession(t)
 	defer session.Close()
 
-	if err := session.Query("CREATE TABLE float_test (id double, test double, primary key (id))").Exec(); err != nil {
+	if err := createTable(session, "CREATE TABLE float_test (id double, test double, primary key (id))"); err != nil {
 		t.Fatal("create table:", err)
 	}
 	testNum := float64(7500)

+ 2 - 2
wiki_test.go

@@ -58,7 +58,7 @@ func (w *WikiTest) CreateSchema() {
 	if err := w.session.Query(`DROP TABLE wiki_page`).Exec(); err != nil && err.Error() != "unconfigured columnfamily wiki_page" {
 		w.tb.Fatal("CreateSchema:", err)
 	}
-	if err := w.session.Query(`CREATE TABLE wiki_page (
+	if err := createTable(w.session, `CREATE TABLE wiki_page (
 			title       varchar,
 			revid       timeuuid,
 			body        varchar,
@@ -69,7 +69,7 @@ func (w *WikiTest) CreateSchema() {
 			tags        set<varchar>,
 			attachments map<varchar, blob>,
 			PRIMARY KEY (title, revid)
-		)`).Exec(); err != nil {
+		)`); err != nil {
 		w.tb.Fatal("CreateSchema:", err)
 	}
 }