gocql_test.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package gocql
  2. import (
  3. "bytes"
  4. "fmt"
  5. "testing"
  6. "time"
  7. )
  8. func TestConnect(t *testing.T) {
  9. db := NewSession(Config{
  10. Nodes: []string{
  11. "127.0.0.1",
  12. },
  13. Keyspace: "system",
  14. Consistency: ConQuorum,
  15. })
  16. defer db.Close()
  17. for i := 0; i < 5; i++ {
  18. db.Query("SELECT keyspace_name FROM schema_keyspaces WHERE keyspace_name = ?",
  19. "system_auth").Exec()
  20. }
  21. var keyspace string
  22. var durable bool
  23. iter := db.Query("SELECT keyspace_name, durable_writes FROM schema_keyspaces").Iter()
  24. for iter.Scan(&keyspace, &durable) {
  25. fmt.Println("Keyspace:", keyspace, durable)
  26. }
  27. if err := iter.Close(); err != nil {
  28. fmt.Println(err)
  29. }
  30. }
  31. type Page struct {
  32. Title string
  33. RevID int
  34. Body string
  35. Hits int
  36. Protected bool
  37. Modified time.Time
  38. Attachment []byte
  39. }
  40. var pages = []*Page{
  41. &Page{"Frontpage", 1, "Hello world!", 0, false,
  42. time.Date(2012, 8, 20, 10, 0, 0, 0, time.UTC), []byte{}},
  43. &Page{"Frontpage", 2, "Hello modified world!", 0, false,
  44. time.Date(2012, 8, 22, 10, 0, 0, 0, time.UTC), []byte("img data\x00")},
  45. &Page{"LoremIpsum", 3, "Lorem ipsum dolor sit amet", 12,
  46. true, time.Date(2012, 8, 22, 10, 0, 8, 0, time.UTC), []byte{}},
  47. }
  48. func TestWiki(t *testing.T) {
  49. db := NewSession(Config{
  50. Nodes: []string{"localhost"},
  51. Consistency: ConQuorum,
  52. })
  53. if err := db.Query("DROP KEYSPACE gocql_wiki").Exec(); err != nil {
  54. t.Log("DROP KEYSPACE:", err)
  55. }
  56. if err := db.Query(`CREATE KEYSPACE gocql_wiki
  57. WITH replication = {
  58. 'class' : 'SimpleStrategy',
  59. 'replication_factor' : 1
  60. }`).Exec(); err != nil {
  61. t.Fatal("CREATE KEYSPACE:", err)
  62. }
  63. if err := db.Query("USE gocql_wiki").Exec(); err != nil {
  64. t.Fatal("USE:", err)
  65. }
  66. if err := db.Query(`CREATE TABLE page (
  67. title varchar,
  68. revid int,
  69. body varchar,
  70. hits int,
  71. protected boolean,
  72. modified timestamp,
  73. attachment blob,
  74. PRIMARY KEY (title, revid)
  75. )`).Exec(); err != nil {
  76. t.Fatal("CREATE TABLE:", err)
  77. }
  78. for _, p := range pages {
  79. if err := db.Query(`INSERT INTO page (title, revid, body, hits,
  80. protected, modified, attachment) VALUES (?, ?, ?, ?, ?, ?, ?)`,
  81. p.Title, p.RevID, p.Body, p.Hits, p.Protected, p.Modified,
  82. p.Attachment).Exec(); err != nil {
  83. t.Fatal("INSERT:", err)
  84. }
  85. }
  86. var count int
  87. if err := db.Query("SELECT count(*) FROM page").Scan(&count); err != nil {
  88. t.Fatal("COUNT:", err)
  89. }
  90. if count != len(pages) {
  91. t.Fatalf("COUNT: expected %d got %d", len(pages), count)
  92. }
  93. for _, page := range pages {
  94. qry := db.Query(`SELECT title, revid, body, hits, protected,
  95. modified, attachment
  96. FROM page WHERE title = ? AND revid = ?`, page.Title, page.RevID)
  97. var p Page
  98. if err := qry.Scan(&p.Title, &p.RevID, &p.Body, &p.Hits, &p.Protected,
  99. &p.Modified, &p.Attachment); err != nil {
  100. t.Fatal("SELECT PAGE:", err)
  101. }
  102. p.Modified = p.Modified.In(time.UTC)
  103. if page.Title != p.Title || page.RevID != p.RevID ||
  104. page.Body != p.Body || page.Modified != p.Modified ||
  105. page.Hits != p.Hits || page.Protected != p.Protected ||
  106. !bytes.Equal(page.Attachment, p.Attachment) {
  107. t.Errorf("expected %#v got %#v", *page, p)
  108. }
  109. }
  110. }