@@ -9,7 +9,6 @@ package sqlite3
9
9
10
10
import (
11
11
"database/sql"
12
- "fmt"
13
12
"os"
14
13
"testing"
15
14
)
@@ -37,14 +36,19 @@ func TestAuthCreateDatabase(t *testing.T) {
37
36
38
37
func TestAuthorization (t * testing.T ) {
39
38
tempFilename := TempFilename (t )
40
- fmt .Println (tempFilename )
41
- //defer os.Remove(tempFilename)
39
+ defer os .Remove (tempFilename )
42
40
43
41
db , err := sql .Open ("sqlite3" , "file:" + tempFilename + "?_auth&_auth_user=admin&_auth_pass=admin" )
44
42
if err != nil {
45
43
t .Fatal ("Failed to open database:" , err )
46
44
}
47
45
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
48
52
if _ , err := db .Exec ("select auth_user_add('user', 'user', false);" ); err != nil {
49
53
t .Fatal (err )
50
54
}
@@ -53,32 +57,153 @@ func TestAuthorization(t *testing.T) {
53
57
if err := db .QueryRow ("select uname from sqlite_user where uname = 'user';" ).Scan (& uname ); err != nil {
54
58
t .Fatal (err )
55
59
}
56
-
57
60
if uname != "user" {
58
61
t .Fatal ("Failed to create normal user" )
59
62
}
60
63
db .Close ()
61
64
62
65
// Re-Open Database as User
63
- // Add User should now fail because we are not admin
64
66
db , err = sql .Open ("sqlite3" , "file:" + tempFilename + "?_auth_user=user&_auth_pass=user" )
65
67
if err != nil {
66
68
t .Fatal ("Failed to open database:" , err )
67
69
}
68
70
defer db .Close ()
69
71
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 {
73
185
t .Fatal (err )
74
186
}
75
- fmt .Printf ("RV: %v\n " , rv )
76
- // if rv != SQLITE_AUTH {
77
- // t.Fatal("Succeeded creating user while not admin")
78
- // }
79
187
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
+ }
84
209
}
0 commit comments