Skip to content

Commit 90f966b

Browse files
committed
Add additional tests
Reference: #580
1 parent 0e28943 commit 90f966b

File tree

1 file changed

+141
-16
lines changed

1 file changed

+141
-16
lines changed

sqlite3_opt_userauth_test.go

Lines changed: 141 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ package sqlite3
99

1010
import (
1111
"database/sql"
12-
"fmt"
1312
"os"
1413
"testing"
1514
)
@@ -37,14 +36,19 @@ func TestAuthCreateDatabase(t *testing.T) {
3736

3837
func TestAuthorization(t *testing.T) {
3938
tempFilename := TempFilename(t)
40-
fmt.Println(tempFilename)
41-
//defer os.Remove(tempFilename)
39+
defer os.Remove(tempFilename)
4240

4341
db, err := sql.Open("sqlite3", "file:"+tempFilename+"?_auth&_auth_user=admin&_auth_pass=admin")
4442
if err != nil {
4543
t.Fatal("Failed to open database:", err)
4644
}
4745

46+
// Dummy Query to force connection
47+
if _, err := db.Exec("SELECT 1;"); err != nil {
48+
t.Fatalf("Failed to connect: %s", err)
49+
}
50+
51+
// Add normal user to database
4852
if _, err := db.Exec("select auth_user_add('user', 'user', false);"); err != nil {
4953
t.Fatal(err)
5054
}
@@ -53,32 +57,153 @@ func TestAuthorization(t *testing.T) {
5357
if err := db.QueryRow("select uname from sqlite_user where uname = 'user';").Scan(&uname); err != nil {
5458
t.Fatal(err)
5559
}
56-
5760
if uname != "user" {
5861
t.Fatal("Failed to create normal user")
5962
}
6063
db.Close()
6164

6265
// Re-Open Database as User
63-
// Add User should now fail because we are not admin
6466
db, err = sql.Open("sqlite3", "file:"+tempFilename+"?_auth_user=user&_auth_pass=user")
6567
if err != nil {
6668
t.Fatal("Failed to open database:", err)
6769
}
6870
defer db.Close()
6971

70-
// Try to create normal user
71-
var rv string
72-
if err := db.QueryRow("select auth_user_add('user2', 'user2', false);").Scan(&rv); err != nil {
72+
// Add User should now fail because we are not admin
73+
var rv int
74+
if err := db.QueryRow("select auth_user_add('user2', 'user2', false);").Scan(&rv); err != nil || rv == 0 {
75+
if err != nil {
76+
t.Fatal(err)
77+
}
78+
t.Fatal("Succeeded creating user, while not being admin, this is not supposed to work")
79+
}
80+
81+
// Try to create admin user
82+
// Should also fail because we are not admin
83+
if err := db.QueryRow("select auth_user_add('admin2', 'admin2', true);").Scan(&rv); err != nil || rv == 0 {
84+
if err != nil {
85+
t.Fatal(err)
86+
}
87+
t.Fatal("Succeeded creating admin, while not being admin, this is not supposed to work")
88+
}
89+
}
90+
91+
func TestAuthorizationFailed(t *testing.T) {
92+
tempFilename := TempFilename(t)
93+
defer os.Remove(tempFilename)
94+
95+
db, err := sql.Open("sqlite3", "file:"+tempFilename+"?_auth&_auth_user=admin&_auth_pass=admin")
96+
if err != nil {
97+
t.Fatal("Failed to open database:", err)
98+
}
99+
100+
// Dummy Query to force connection
101+
if _, err := db.Exec("SELECT 1;"); err != nil {
102+
t.Fatalf("Failed to connect: %s", err)
103+
}
104+
db.Close()
105+
106+
db, err = sql.Open("sqlite3", "file:"+tempFilename+"?_auth&_auth_user=admin&_auth_pass=invalid")
107+
if err != nil {
108+
t.Fatal("Failed to open database:", err)
109+
}
110+
defer db.Close()
111+
112+
// Dummy Query to issue connection
113+
if _, err := db.Exec("SELECT 1;"); err != nil && err != ErrUnauthorized {
114+
t.Fatalf("Failed to connect: %s", err)
115+
}
116+
}
117+
118+
func TestAuthUserModify(t *testing.T) {
119+
tempFilename := TempFilename(t)
120+
defer os.Remove(tempFilename)
121+
122+
var rv int
123+
124+
db, err := sql.Open("sqlite3", "file:"+tempFilename+"?_auth&_auth_user=admin&_auth_pass=admin")
125+
if err != nil {
126+
t.Fatal("Failed to open database:", err)
127+
}
128+
129+
// Dummy Query to force connection
130+
if _, err := db.Exec("SELECT 1;"); err != nil {
131+
t.Fatalf("Failed to connect: %s", err)
132+
}
133+
134+
if err := db.QueryRow("select auth_user_add('user', 'user', false);").Scan(&rv); err != nil || rv != 0 {
135+
if err != nil {
136+
t.Fatal(err)
137+
}
138+
t.Fatal("Failed to create normal user")
139+
}
140+
141+
if err := db.QueryRow("select auth_user_change('admin', 'nimda', true);").Scan(&rv); err != nil || rv != 0 {
142+
if err != nil {
143+
t.Fatal(err)
144+
}
145+
t.Fatal("Failed to change password")
146+
}
147+
db.Close()
148+
149+
// Re-Connect with new credentials
150+
db, err = sql.Open("sqlite3", "file:"+tempFilename+"?_auth_user=admin&_auth_pass=nimda")
151+
if err != nil {
152+
t.Fatal("Failed to open database:", err)
153+
}
154+
155+
if err := db.QueryRow("select count(uname) from sqlite_user where uname = 'admin';").Scan(&rv); err != nil {
156+
t.Fatal(err)
157+
}
158+
defer db.Close()
159+
160+
// Dummy Query to force connection to test authorization
161+
if _, err := db.Exec("SELECT 1;"); err != nil && err != ErrUnauthorized {
162+
t.Fatalf("Failed to connect: %s", err)
163+
}
164+
}
165+
166+
func TestAuthUserDelete(t *testing.T) {
167+
tempFilename := TempFilename(t)
168+
defer os.Remove(tempFilename)
169+
170+
var rv int
171+
172+
db, err := sql.Open("sqlite3", "file:"+tempFilename+"?_auth&_auth_user=admin&_auth_pass=admin")
173+
if err != nil {
174+
t.Fatal("Failed to open database:", err)
175+
}
176+
defer db.Close()
177+
178+
// Dummy Query to force connection to test authorization
179+
if _, err := db.Exec("SELECT 1;"); err != nil {
180+
t.Fatalf("Failed to connect: %s", err)
181+
}
182+
183+
// Add User
184+
if _, err := db.Exec("select auth_user_add('user', 'user', false);"); err != nil {
73185
t.Fatal(err)
74186
}
75-
fmt.Printf("RV: %v\n", rv)
76-
// if rv != SQLITE_AUTH {
77-
// t.Fatal("Succeeded creating user while not admin")
78-
// }
79187

80-
// // Try to create admin user
81-
// if _, err := db.Exec("select auth_user_add('admin2', 'admin2', true);"); err != nil {
82-
// t.Fatal(err)
83-
// }
188+
// Verify, their should be now 2 users
189+
var users int
190+
if err := db.QueryRow("select count(uname) from sqlite_user;").Scan(&users); err != nil {
191+
t.Fatal(err)
192+
}
193+
if users != 2 {
194+
t.Fatal("Failed to add user")
195+
}
196+
197+
// Delete User
198+
if _, err := db.Exec("select auth_user_delete('user');"); err != nil {
199+
t.Fatal(err)
200+
}
201+
202+
// Verify their should now only be 1 user remaining, the current logged in admin user
203+
if err := db.QueryRow("select count(uname) from sqlite_user;").Scan(&users); err != nil {
204+
t.Fatal(err)
205+
}
206+
if users != 1 {
207+
t.Fatal("Failed to delete user")
208+
}
84209
}

0 commit comments

Comments
 (0)