aboutsummaryrefslogtreecommitdiff
path: root/sqlite3_test.go
diff options
context:
space:
mode:
authorJesse Rittner <rittneje@gmail.com>2018-12-08 08:31:45 -0500
committerJesse Rittner <rittneje@gmail.com>2018-12-08 08:31:45 -0500
commit5846e1aa228f58bf6abec89d5a665b9375af2d47 (patch)
treeef564b7551f633cf62ad098815fdeb2996b8e120 /sqlite3_test.go
parentRevert "SQLITE_OPEN_CREATE should be specified for sqlite3_open_v2 if mode is... (diff)
downloadgolite-5846e1aa228f58bf6abec89d5a665b9375af2d47.tar.gz
golite-5846e1aa228f58bf6abec89d5a665b9375af2d47.tar.xz
adding unit test
Diffstat (limited to 'sqlite3_test.go')
-rw-r--r--sqlite3_test.go58
1 files changed, 58 insertions, 0 deletions
diff --git a/sqlite3_test.go b/sqlite3_test.go
index 0667893..11ac19a 100644
--- a/sqlite3_test.go
+++ b/sqlite3_test.go
@@ -87,6 +87,64 @@ func TestOpen(t *testing.T) {
}
}
+func TestOpenNoCreate(t *testing.T) {
+ filename := t.Name() + ".sqlite"
+
+ if err := os.Remove(filename); err != nil && !os.IsNotExist(err) {
+ t.Fatal(err)
+ }
+ defer os.Remove(filename)
+
+ // https://golang.org/pkg/database/sql/#Open
+ // "Open may just validate its arguments without creating a connection
+ // to the database. To verify that the data source name is valid, call Ping."
+ db, err := sql.Open("sqlite3", fmt.Sprintf("file:%s?mode=rw", filename))
+ if err == nil {
+ defer db.Close()
+
+ err = db.Ping()
+ if err == nil {
+ t.Fatal("expected error from Open or Ping")
+ }
+ }
+
+ sqlErr, ok := err.(Error)
+ if !ok {
+ t.Fatalf("expected *Error, but got %T", err)
+ }
+
+ if sqlErr.Code != ErrCantOpen {
+ t.Fatalf("expected SQLITE_CANTOPEN, but got %v", sqlErr)
+ }
+
+ // make sure database file truly was not created
+ if _, err := os.Stat(filename); !os.IsNotExist(err) {
+ if err != nil {
+ t.Fatal(err)
+ }
+ t.Fatal("expected database file to not exist")
+ }
+
+ // verify that it works if the mode is "rwc" instead
+ db, err = sql.Open("sqlite3", fmt.Sprintf("file:%s?mode=rwc", filename))
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer db.Close()
+
+ if err := db.Ping(); err != nil {
+ t.Fatal(err)
+ }
+
+ // make sure database file truly was created
+ if _, err := os.Stat(filename); err != nil {
+ if !os.IsNotExist(err) {
+ t.Fatal(err)
+ }
+ t.Fatal("expected database file to exist")
+ }
+}
+
func TestReadonly(t *testing.T) {
tempFilename := TempFilename(t)
defer os.Remove(tempFilename)