Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 90f966b

Browse files
Add additional tests
Reference: mattn#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)

AltStyle によって変換されたページ (->オリジナル) /