4
4
"context"
5
5
"database/sql"
6
6
"encoding/base64"
7
- "strings"
8
7
"testing"
9
8
10
9
"github.com/google/uuid"
@@ -42,9 +41,15 @@ func TestServerDBCrypt(t *testing.T) {
42
41
})
43
42
db := database .New (sqlDB )
44
43
44
+ t .Cleanup (func () {
45
+ if t .Failed () {
46
+ t .Logf ("Dumping data due to failed test. I hope you find what you're looking for!" )
47
+ dumpUsers (t , sqlDB )
48
+ }
49
+ })
50
+
45
51
// Populate the database with some unencrypted data.
46
52
users := genData (t , db )
47
- dumpUsers (t , sqlDB , "NOT ENCRYPTED" )
48
53
49
54
// Setup an initial cipher A
50
55
keyA := mustString (t , 32 )
@@ -57,7 +62,6 @@ func TestServerDBCrypt(t *testing.T) {
57
62
58
63
// Populate the database with some encrypted data using cipher A.
59
64
newUsers := genData (t , cryptdb )
60
- dumpUsers (t , sqlDB , "PARTIALLY ENCRYPTED A" )
61
65
62
66
// Validate that newly created users were encrypted with cipher A
63
67
for _ , usr := range newUsers {
@@ -76,7 +80,6 @@ func TestServerDBCrypt(t *testing.T) {
76
80
err = inv .Run ()
77
81
require .NoError (t , err )
78
82
79
- dumpUsers (t , sqlDB , "ENCRYPTED A" )
80
83
// Validate that all existing data has been encrypted with cipher A.
81
84
for _ , usr := range users {
82
85
requireEncryptedWithCipher (ctx , t , db , cipherA [0 ], usr .ID )
@@ -89,7 +92,6 @@ func TestServerDBCrypt(t *testing.T) {
89
92
90
93
// Generate some more encrypted data using the new cipher
91
94
users = append (users , genData (t , db )... )
92
- dumpUsers (t , sqlDB , "ENCRYPTED AB" )
93
95
94
96
inv , _ = newCLI (t , "server" , "dbcrypt" , "rotate" ,
95
97
"--postgres-url" , connectionURL ,
@@ -103,7 +105,6 @@ func TestServerDBCrypt(t *testing.T) {
103
105
require .NoError (t , err )
104
106
105
107
// Validate that all data has been re-encrypted with cipher B.
106
- dumpUsers (t , sqlDB , "ENCRYPTED B" )
107
108
for _ , usr := range users {
108
109
requireEncryptedWithCipher (ctx , t , db , cipherBA [0 ], usr .ID )
109
110
}
@@ -150,7 +151,6 @@ func TestServerDBCrypt(t *testing.T) {
150
151
}
151
152
152
153
// Validate that all data has been decrypted.
153
- dumpUsers (t , sqlDB , "DECRYPTED" )
154
154
for _ , usr := range users {
155
155
requireEncryptedWithCipher (ctx , t , db , & nullCipher {}, usr .ID )
156
156
}
@@ -172,7 +172,6 @@ func TestServerDBCrypt(t *testing.T) {
172
172
require .NoError (t , err )
173
173
174
174
// Validate that all data has been re-encrypted with cipher C.
175
- dumpUsers (t , sqlDB , "ENCRYPTED C" )
176
175
for _ , usr := range users {
177
176
requireEncryptedWithCipher (ctx , t , db , cipherC [0 ], usr .ID )
178
177
}
@@ -189,7 +188,6 @@ func TestServerDBCrypt(t *testing.T) {
189
188
require .NoError (t , err )
190
189
191
190
// Assert that no user links remain.
192
- dumpUsers (t , sqlDB , "DELETED" )
193
191
for _ , usr := range users {
194
192
userLinks , err := db .GetUserLinksByUserID (ctx , usr .ID )
195
193
require .NoError (t , err , "failed to get user links for user %s" , usr .ID )
@@ -227,6 +225,9 @@ func genData(t *testing.T, db database.Store) []database.User {
227
225
OAuthAccessToken : "access-" + usr .ID .String (),
228
226
OAuthRefreshToken : "refresh-" + usr .ID .String (),
229
227
})
228
+ // Fun fact: our schema allows _all_ login types to have
229
+ // a user_link. Even though I'm not sure how it could occur
230
+ // in practice, making sure to test all combinations here.
230
231
_ = dbgen .UserLink (t , db , database.UserLink {
231
232
UserID : usr .ID ,
232
233
LoginType : usr .LoginType ,
@@ -240,8 +241,8 @@ func genData(t *testing.T, db database.Store) []database.User {
240
241
return users
241
242
}
242
243
243
- func dumpUsers (t * testing.T , db * sql.DB , header string ) {
244
- t .Logf ( "%s %s %s" , strings . Repeat ( "=" , 20 ), header , strings . Repeat ( "=" , 20 ) )
244
+ func dumpUsers (t * testing.T , db * sql.DB ) {
245
+ t .Helper ( )
245
246
rows , err := db .QueryContext (context .Background (), `SELECT
246
247
u.id,
247
248
u.login_type,
0 commit comments