func TestCAS(t *testing.T) { if *flagProto == 1 { t.Skip("lightweight transactions not supported. Please use Cassandra >= 2.0") } session := createSession(t) defer session.Close() if err := session.Query(`CREATE TABLE cas_table ( title varchar, revid timeuuid, PRIMARY KEY (title, revid) )`).Exec(); err != nil { t.Fatal("create:", err) } title, revid := "baz", uuid.TimeUUID() var titleCAS string var revidCAS uuid.UUID if applied, err := session.Query(`INSERT INTO cas_table (title, revid) VALUES (?, ?) IF NOT EXISTS`, title, revid).ScanCAS(&titleCAS, &revidCAS); err != nil { t.Fatal("insert:", err) } else if !applied { t.Fatal("insert should have been applied") } if applied, err := session.Query(`INSERT INTO cas_table (title, revid) VALUES (?, ?) IF NOT EXISTS`, title, revid).ScanCAS(&titleCAS, &revidCAS); err != nil { t.Fatal("insert:", err) } else if applied { t.Fatal("insert should not have been applied") } else if title != titleCAS || revid != revidCAS { t.Fatalf("expected %s/%v but got %s/%v", title, revid, titleCAS, revidCAS) } }
Title string RevId uuid.UUID Body string Views int64 Protected bool Modified time.Time Tags []string Attachments map[string]Attachment } type Attachment []byte var pageTestData = []*Page{ &Page{ Title: "Frontpage", RevId: uuid.TimeUUID(), Body: "Welcome to this wiki page!", Modified: time.Date(2013, time.August, 13, 9, 52, 3, 0, time.UTC), Tags: []string{"start", "important", "test"}, Attachments: map[string]Attachment{ "logo": Attachment("\x00company logo\x00"), "favicon": Attachment("favicon.ico"), }, }, &Page{ Title: "Foobar", RevId: uuid.TimeUUID(), Body: "foo::Foo f = new foo::Foo(foo::Foo::INIT);", Modified: time.Date(2013, time.August, 13, 9, 52, 3, 0, time.UTC), }, }