github.com/kvattikuti/drone@v0.2.1-0.20140603034306-d400229a327a/pkg/database/testing/testing.go (about) 1 package database 2 3 import ( 4 "crypto/aes" 5 "database/sql" 6 "fmt" 7 "log" 8 "os" 9 "strings" 10 11 "github.com/drone/drone/pkg/database" 12 "github.com/drone/drone/pkg/database/encrypt" 13 . "github.com/drone/drone/pkg/model" 14 15 _ "github.com/mattn/go-sqlite3" 16 "github.com/russross/meddler" 17 ) 18 19 const ( 20 pubkey = `sh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClp9+xjhYj2Wz0nwLNhUiR1RkqfoVZwlJoxdubQy8GskZtY7C7YGa/PeKfdfaKOWtVgg37r/OYS3kc7bIKVup4sx/oW59FMwCZYQ2nxoaPZpPwUJs8D0Wy0b2VSP+vAnJ6jZQEIEiClrzyYafSfqN6L9T/BTkn28ktWalOHqWVKejKeD6M0uhlpyIZFsQ1K2wNt32ACwT/rbanx/r/jfczqxSkLzvIKXXs/RdKQgwRRUYnKkl4Lh6r22n9n3m2VwRor5wdsPK8sr57OsqdRpnvsFs3lxwM8w5ZiAZV3T0xTMGVs3W8Uy5HexAD6TgWBWFjSrgdXF1pE83wmUtJtVBf` 21 privkey = `-----BEGIN RSA PRIVATE KEY----- 22 MIIEogIBAAKCAQEApaffsY4WI9ls9J8CzYVIkdUZKn6FWcJSaMXbm0MvBrJGbWOw 23 u2Bmvz3in3X2ijlrVYIN+6/zmEt5HO2yClbqeLMf6FufRTMAmWENp8aGj2aT8FCb 24 PA9FstG9lUj/rwJyeo2UBCBIgpa88mGn0n6jei/U/wU5J9vJLVmpTh6llSnoyng+ 25 jNLoZaciGRbENStsDbd9gAsE/622p8f6/433M6sUpC87yCl17P0XSkIMEUVGJypJ 26 eC4eq9tp/Z95tlcEaK+cHbDyvLK+ezrKnUaZ77BbN5ccDPMOWYgGVd09MUzBlbN1 27 vFMuR3sQA+k4FgVhY0q4HVxdaRPN8JlLSbVQXwIDAQABAoIBAA3EqSPxwkdSf+rI 28 +IuqY0CzrHbKszylmQHaSAlciSEOWionWf4I4iFM/HPycv5EDXa663yawC1NQJC1 29 9NFFLhHAGYvPaapvtcIJvf/O0UpD5VHY8T4JqupU4mPxAEdEdc1XzRCWulAYRTYE 30 BdXJ7r5uEU7s2TZF3y+kvxyeEXcXNWK1I4kGBSgH4KI5WIODtNJ6vaIk5Yugqt1N 31 cg5Sprk4bUMRTBH6GmSiJUleA0f/k6MCCmhETKXGt9mmfJ1PXpVlfDn5m26MX6vZ 32 XgaoIHUCy4sh1Fq6vbEI831JcO4kdvl4TtX90SzSadHjewNHy0V2gjAysvqbEDhw 33 Hn8D+MkCgYEA00tTKPp3AUTxT9ZgfPBD3DY7tk7+xp2R2lA6H9TUWe79TRfncFtS 34 8bCfEXd8xALL5cFyzi4q4YJ77mJjlWE7AMYdsFoAW1l3Q71JRRBSwsyIwp4hU8AV 35 K48SDjqecDzY42UvuKGp3opPWb0PzJixJNUgawU/ZGPxqN8jlr0o+K0CgYEAyLSO 36 rZqOvyE5wu8yadHLlQC4usoYtnyDC8PG2SgnZnlnZnkgNy3yLmHYvTvYSQsAv7rA 37 fFsKMt2MJhlclx+sTds/LLHKj/RfVDFenFf6ajBNZ1k+KRcwrV1A4iWinWmBxiEi 38 A8aM9rGs7WRBkqaCONSUQHcmLRRz7hqDtsBpkrsCgYBY2FJ2Z6LEmN2zCVx3DHws 39 S22eQeclUroyhwt5uP81daVy1jtN5kihMfgg2xJORTLBQC9q/MSxIDHGUf63oDO0 40 JpnzPlTqFFtu01fMv4ldOa3Dz8QJuDnun/EipIlcfmlgbHq9ctS/q36kKDhNemL6 41 Lte7yHAYYWIK9RC84Hsq3QKBgAfDbC1s6A6ek2Rl6jZLpitKTtryzEfqwwrmdL+b 42 nQKKuaQuFT/tKAwBPuf685/HrCy+ZYmp39gd17j1jC5QTFLqoyPwcJxm4HUaP8We 43 ZZJL8gKIYi4mtnxOOh9FQ2gBV8K5L16kBHnaX40DLsIkbK8UEfP4Z+Kggud34RZl 44 lO/XAoGAFFZdolsVbSieFhJt7ypzp/19dKJ8Sk6QGCk3uQpTuLJMvwcBT8X5XCTD 45 zFfYARarx87mbD2k5GZ7F0fmGYTUV14qlxJCGMythLM/xZ6EJuJWBz69puNj4yhn 46 exWM7t1BDHy2zIoPfIQLDH2h1zNTRjismMeErOCy0Uha7jrZhW8= 47 -----END RSA PRIVATE KEY-----` 48 ) 49 50 var ( 51 dbname, driver, dsn, login string 52 db *sql.DB 53 ) 54 55 func init() { 56 // create a cipher for ecnrypting and decrypting 57 // database fields 58 cipher, err := aes.NewCipher([]byte("38B241096B8DA08131563770F4CDDFAC")) 59 if err != nil { 60 log.Fatal(err) 61 } 62 63 // register function with meddler to encrypt and 64 // decrypt database fields. 65 meddler.Register("gobencrypt", &encrypt.EncryptedField{cipher}) 66 67 // Check for $DB_ENV 68 dbenv := os.Getenv("DB_ENV") 69 if dbenv == "mysql" { 70 driver = dbenv 71 dbname = "drone_test" 72 login = os.Getenv("MYSQL_LOGIN") 73 if len(login) == 0 { 74 login = "root" 75 } 76 log.Println("Using mysql database ...") 77 } else { 78 driver = "sqlite3" 79 dsn = ":memory:" 80 log.Println("Using sqlite3 database ...") 81 } 82 83 } 84 85 func Setup() { 86 // create an in-memory database 87 if driver == "mysql" { 88 idsn := fmt.Sprintf("%s@/?parseTime=true", login) 89 db, dsn = createDB(dbname, idsn) 90 } 91 database.Init(driver, dsn) 92 93 // create dummy user data 94 user1 := User{ 95 Password: "$2a$10$b8d63QsTL38vx7lj0HEHfOdbu1PCAg6Gfca74UavkXooIBx9YxopS", 96 Name: "Brad Rydzewski", 97 Email: "brad.rydzewski@gmail.com", 98 Gravatar: "8c58a0be77ee441bb8f8595b7f1b4e87", 99 Token: "123", 100 GitlabToken: "123", 101 Admin: true} 102 user2 := User{ 103 Password: "$2a$10$b8d63QsTL38vx7lj0HEHfOdbu1PCAg6Gfca74UavkXooIBx9YxopS", 104 Name: "Thomas Burke", 105 Email: "cavepig@gmail.com", 106 Gravatar: "c62f7126273f7fa786274274a5dec8ce", 107 Token: "456", 108 GitlabToken: "456", 109 Admin: false} 110 user3 := User{ 111 Password: "$2a$10$b8d63QsTL38vx7lj0HEHfOdbu1PCAg6Gfca74UavkXooIBx9YxopS", 112 Name: "Carlos Morales", 113 Email: "ytsejammer@gmail.com", 114 Gravatar: "c2180a539620d90d68eaeb848364f1c2", 115 Token: "789", 116 GitlabToken: "789", 117 Admin: false} 118 user4 := User{ 119 Password: "$2a$10$b8d63QsTL38vx7lj0HEHfOdbu1PCAg6Gfca74UavkXooIBx9YxopS", 120 Name: "Rick El Toro", 121 Email: "rick@el.to.ro", 122 Gravatar: "c2180a539620d90d68eaeb848364f1c2", 123 Token: "987", 124 GitlabToken: "987", 125 Admin: false} 126 127 128 database.SaveUser(&user1) 129 database.SaveUser(&user2) 130 database.SaveUser(&user3) 131 database.SaveUser(&user4) 132 133 // create dummy team data 134 team1 := Team{ 135 Slug: "drone", 136 Name: "Drone", 137 Email: "support@drone.io", 138 Gravatar: "8c58a0be77ee441bb8f8595b7f1b4e87"} 139 team2 := Team{ 140 Slug: "github", 141 Name: "Github", 142 Email: "support@github.com", 143 Gravatar: "61024896f291303615bcd4f7a0dcfb74"} 144 team3 := Team{ 145 Slug: "golang", 146 Name: "Golang", 147 Email: "support@golang.org", 148 Gravatar: "991695cc770c6b8354b68cd18c280b95"} 149 150 database.SaveTeam(&team1) 151 database.SaveTeam(&team2) 152 database.SaveTeam(&team3) 153 154 // create team membership data 155 database.SaveMember(user1.ID, team1.ID, RoleOwner) 156 database.SaveMember(user2.ID, team1.ID, RoleAdmin) 157 database.SaveMember(user3.ID, team1.ID, RoleWrite) 158 database.SaveMember(user1.ID, team2.ID, RoleOwner) 159 database.SaveMember(user2.ID, team2.ID, RoleAdmin) 160 database.SaveMember(user3.ID, team2.ID, RoleWrite) 161 database.SaveMember(user1.ID, team3.ID, RoleRead) 162 163 // create dummy repo data 164 repo1 := Repo{ 165 Slug: "github.com/drone/drone", 166 Host: "github.com", 167 Owner: "drone", 168 Name: "drone", 169 Private: true, 170 Disabled: false, 171 SCM: "git", 172 URL: "git@github.com:drone/drone.git", 173 Username: "no username", 174 Password: "no password", 175 PublicKey: pubkey, 176 PrivateKey: privkey, 177 UserID: user1.ID, 178 TeamID: team1.ID, 179 } 180 repo2 := Repo{ 181 Slug: "bitbucket.org/drone/test", 182 Host: "bitbucket.org", 183 Owner: "drone", 184 Name: "test", 185 Private: false, 186 Disabled: false, 187 SCM: "hg", 188 URL: "https://bitbucket.org/drone/test", 189 Username: "no username", 190 Password: "no password", 191 PublicKey: pubkey, 192 PrivateKey: privkey, 193 UserID: user1.ID, 194 TeamID: team1.ID, 195 } 196 repo3 := Repo{ 197 Slug: "bitbucket.org/brydzewski/test", 198 Host: "bitbucket.org", 199 Owner: "brydzewski", 200 Name: "test", 201 Private: false, 202 Disabled: false, 203 SCM: "hg", 204 URL: "https://bitbucket.org/brydzewski/test", 205 Username: "no username", 206 Password: "no password", 207 PublicKey: pubkey, 208 PrivateKey: privkey, 209 UserID: user2.ID, 210 } 211 212 database.SaveRepo(&repo1) 213 database.SaveRepo(&repo2) 214 database.SaveRepo(&repo3) 215 216 commit1 := Commit{ 217 RepoID: repo1.ID, 218 Status: "Success", 219 Hash: "4f4c4594be6d6ddbc1c0dd521334f7ecba92b608", 220 Branch: "master", 221 Author: user1.Email, 222 Gravatar: user1.Gravatar, 223 Message: "commit message", 224 } 225 commit2 := Commit{ 226 RepoID: repo1.ID, 227 Status: "Failure", 228 Hash: "0eb2fa13e9f4139e803b6ad37831708d4786c74a", 229 Branch: "master", 230 Author: user1.Email, 231 Gravatar: user1.Gravatar, 232 Message: "commit message", 233 } 234 commit3 := Commit{ 235 RepoID: repo1.ID, 236 Status: "Failure", 237 Hash: "60a7fe87ccf01d0152e53242528399e05acaf047", 238 Branch: "dev", 239 Author: user1.Email, 240 Gravatar: user1.Gravatar, 241 Message: "commit message", 242 } 243 commit4 := Commit{ 244 RepoID: repo2.ID, 245 Status: "Success", 246 Hash: "a4078d1e9a0842cdd214adbf0512578799a4f2ba", 247 Branch: "master", 248 Author: user1.Email, 249 Gravatar: user1.Gravatar, 250 Message: "commit message", 251 } 252 commit5 := Commit{ 253 RepoID: repo2.ID, 254 Status: "Success", 255 Hash: "5f32ec7b08dfe3a097c1a5316de5b5069fb35ff9", 256 Branch: "develop", 257 Author: user1.Email, 258 Gravatar: user1.Gravatar, 259 Message: "commit message", 260 } 261 262 // create dummy commit data 263 database.SaveCommit(&commit1) 264 database.SaveCommit(&commit2) 265 database.SaveCommit(&commit3) 266 database.SaveCommit(&commit4) 267 database.SaveCommit(&commit5) 268 269 // create dummy build data 270 database.SaveBuild(&Build{CommitID: commit1.ID, Slug: "node_0.10", Status: "Success", Duration: 60}) 271 database.SaveBuild(&Build{CommitID: commit1.ID, Slug: "node_0.09", Status: "Success", Duration: 70}) 272 database.SaveBuild(&Build{CommitID: commit2.ID, Slug: "node_0.10", Status: "Success", Duration: 10}) 273 database.SaveBuild(&Build{CommitID: commit2.ID, Slug: "node_0.09", Status: "Failure", Duration: 65}) 274 database.SaveBuild(&Build{CommitID: commit3.ID, Slug: "node_0.10", Status: "Failure", Duration: 50}) 275 database.SaveBuild(&Build{CommitID: commit3.ID, Slug: "node_0.09", Status: "Failure", Duration: 55}) 276 } 277 278 func Teardown() { 279 database.Close() 280 if driver == "mysql" { 281 db.Exec(fmt.Sprintf("DROP DATABASE %s", dbname)) 282 } 283 } 284 285 func createDB(name, datasource string) (*sql.DB, string) { 286 db, err := sql.Open(driver, datasource) 287 if err != nil { 288 panic("Can't connect to database") 289 } 290 if _, err := db.Exec(fmt.Sprintf("CREATE DATABASE %s", name)); err != nil { 291 panic("Can't create database") 292 } 293 dsn := strings.Replace(datasource, "/", fmt.Sprintf("/%s", name), 1) 294 return db, dsn 295 }