(t *testing.T)
| 34 | ) |
| 35 | |
| 36 | func TestStorage(t *testing.T) { |
| 37 | Convey("Given a sqlite storage implementation", t, func() { |
| 38 | const passes = 1000 |
| 39 | var ( |
| 40 | fl = path.Join(testingDataDir, t.Name()) |
| 41 | st xi.Storage |
| 42 | err error |
| 43 | ) |
| 44 | st, err = NewSqlite(fmt.Sprint("file:", fl)) |
| 45 | So(err, ShouldBeNil) |
| 46 | So(st, ShouldNotBeNil) |
| 47 | Reset(func() { |
| 48 | // Clean database file after each pass |
| 49 | err = st.Close() |
| 50 | So(err, ShouldBeNil) |
| 51 | err = os.Remove(fl) |
| 52 | So(err, ShouldBeNil) |
| 53 | err = os.Remove(fmt.Sprint(fl, "-shm")) |
| 54 | So(err == nil || os.IsNotExist(err), ShouldBeTrue) |
| 55 | err = os.Remove(fmt.Sprint(fl, "-wal")) |
| 56 | So(err == nil || os.IsNotExist(err), ShouldBeTrue) |
| 57 | }) |
| 58 | Convey("When a basic KV table is created", func(c C) { |
| 59 | // Create basic table for testing |
| 60 | _, err = st.Writer().Exec(`CREATE TABLE "t1" ("k" INT, "v" TEXT, PRIMARY KEY("k"))`) |
| 61 | So(err, ShouldBeNil) |
| 62 | |
| 63 | _, err = st.Writer().Exec(`CREATE INDEX "a.b.c" ON "t1" ("v")`) |
| 64 | So(err, ShouldBeNil) |
| 65 | |
| 66 | Convey("Test custom encrypt decrypt func", func() { |
| 67 | _, err = st.Writer().Exec(`INSERT INTO "t1" ("k", "v") VALUES (?, encrypt(?, "pass", "salt"))`, 0, "v0enc") |
| 68 | So(err, ShouldBeNil) |
| 69 | _, err = st.Writer().Exec(`INSERT INTO "t1" ("k", "v") VALUES (?, encrypt(?)`, 1, "v0enc") |
| 70 | So(err.Error(), ShouldContainSubstring, "incomplete input") |
| 71 | var destStr string |
| 72 | err = st.Reader().QueryRow(`SELECT "v" FROM "t1" WHERE "k"=?`, 0).Scan(&destStr) |
| 73 | So(err, ShouldBeNil) |
| 74 | So(destStr, ShouldNotContainSubstring, "enc") |
| 75 | err = st.Reader().QueryRow(`SELECT decrypt("v", "pass", "salt") FROM "t1" WHERE "k"=?`, 0).Scan(&destStr) |
| 76 | So(err, ShouldBeNil) |
| 77 | So(destStr, ShouldEqual, "v0enc") |
| 78 | |
| 79 | var destSlice []byte |
| 80 | _, err = st.Writer().Exec(`UPDATE "t1" SET v = encrypt(@1, "pass", "salt") WHERE "k"=@2`, "", 0) |
| 81 | So(err, ShouldBeNil) |
| 82 | err = st.Reader().QueryRow(`SELECT decrypt("v", "pass", "salt") FROM "t1" WHERE "k"=?`, 0).Scan(&destSlice) |
| 83 | So(err, ShouldBeNil) |
| 84 | So(len(destSlice), ShouldEqual, 0) |
| 85 | |
| 86 | largeText := strings.Repeat("s", 10000) |
| 87 | _, err = st.Writer().Exec(`UPDATE "t1" SET v = encrypt(:1, "pass", "salt") WHERE "k"=:2`, largeText, 0) |
| 88 | So(err, ShouldBeNil) |
| 89 | err = st.Reader().QueryRow(`SELECT decrypt("v", "pass", "salt") FROM "t1" WHERE "k"=?`, 0).Scan(&destStr) |
| 90 | So(err, ShouldBeNil) |
| 91 | So(destStr, ShouldEqual, largeText) |
| 92 | }) |
| 93 | Convey("When storage is closed", func() { |
nothing calls this directly
no test coverage detected