mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-12-24 10:07:21 +02:00
unit testing postgres, mysql. temporary workaround for backticks
This commit is contained in:
parent
2dd4d6613c
commit
7f9ef94f47
@ -1 +1 @@
|
||||
eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkExMjhHQ00ifQ.O4xkUcxY3P5xF8HpcChCbQUBJ7R-BC9wFrF698qHUvhbNmSZo9-jkrBvTG6Q4X73DHEmq9re-K6_coLIwrwjA8DW3EUny5cPpj1P0NccWwv1_HhLMfc7GToHbf2C4Sq7bDX-Omm3ghwLiw4-Gw04N5XfAxGWI0g99LsrnrhClRp6jR3pssyu0F_igZty-wgbZBc_zpTVbEEtvQoWJbF9CLIjuElFJc62BZVbqh1aNsVeYrIMJGI1vaYAWf9kGwKC4WSy9QehwggBpr3z-dNq6PG-FMuKVFSOyJubQMYTCSXM7fDoJR6497aQTKsHNncehREkJFrU4uwOAPa3QMD15A.qq6f_tSOp6Ybi46D.az1uQ5Moe9fzjckNl7wVg23LDVubURZ2hKa_rv2WnSbqPVZ89K7_m94KwDRGdSOvVrL5RJdWyk-7jWYF4RgoOkbHnhTesF18NHq4hGSan_EMagps_ZgJoBKMYsNoJaHZrr5_Jn-DJBjdRi8pjqf7RThWIpRyCtBTvlEQgBUcQqyuBZ6FA-vpBcu1VPD_7pUHVApIG3LY5ggDB4OvtJhcuYeZX76qLOMo1JAp3qRsVsFxXW1IeuIgEIKKe_bp7SOYR8L1KjZs5gDWjx9R0Q88jqAET-LHMBxedk0feb2yiRPbVEpCRfWfMbdqmHlY8mwWY71GGlYfeKvB8Q59WONsuacxCp9v.esSbar0HdGCrAjzoXapIyg
|
||||
eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkExMjhHQ00ifQ.KaxqyEtYnsyjK0qVgG9mfliQQJsTTrzWhJkv5gvHXClcMSQ7WF8ASonjDDMvQ9cfdgfb9GY9ZljfRYwKG1pkrTOzquXya_j6rPfYA0NxpJ5CQcv6w97NqW_7ZoHR3HLEqtMUomReYEFr_AGMfZJUYLCOWQZwzFQ-U1oSgpxNO0H1DaqhjcEkuPwcXnUvfKMJ1dRdvSFr0mHZAfIidkS-n1Jct5UsqAtgzORL_9g4WP7WmPDQuwqhOhxwYRd3eSg-nhhJv7B337Nnq1OcImS5WOgXf_7C_Hg_KzL6Ng4JPDF9fhXzAYCJ4-od1jlUH8-55BOPW81mG2cSe_CDUXoVgQ.kbk5v-POj3XudQhp.niD-kndAAwkNAbW_1Ew7EJTS8aKOpQ4WJ1-eS6rFLnLk0Z9my7uribsjnR-B-CzCs1AGpg2CBvWjEIFWoYuBBHqFi0_jXrDkh9JgqQM21_6hgd1FFMIsmFViuROZM2sCmai7XTKhFGs0sRT320F_-lE0lXTa7FLnwqHTzCRzjDG8wrYLuXSH0nIVbzTRUAhfiH8RzxI3n6YFqavoDfLve9d-HhJ11NsEIOzHDyCD0Lp41WBMz8BZ4-Vv5aoHLqgyn_AC03kPBweXskvXgRAM0TOTE0ko9JRVhok2CqNKW76JNveQwgZe08JIX-PHpLKkjghjeWFgtAD44FwObG7_FIb_n3gO.g_SaQlLuXLRCvfXZujgljw
|
||||
|
14
.drone.yml
14
.drone.yml
@ -8,9 +8,21 @@ build:
|
||||
commands:
|
||||
- /bin/bash contrib/setup-sqlite.sh 1> /dev/null
|
||||
- /bin/bash contrib/setup-sassc.sh 1> /dev/null
|
||||
- make deps gen test
|
||||
- make deps gen
|
||||
- make test test_postgres test_mysql
|
||||
- make build build_static deb docs
|
||||
|
||||
compose:
|
||||
postgres:
|
||||
image: postgres:9.4.5
|
||||
environment:
|
||||
- POSTGRES_USER=postgres
|
||||
mysql:
|
||||
image: mysql:5.6.27
|
||||
environment:
|
||||
- MYSQL_DATABASE=test
|
||||
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
|
||||
|
||||
publish:
|
||||
s3:
|
||||
acl: public-read
|
||||
|
8
Makefile
8
Makefile
@ -41,6 +41,14 @@ build_static:
|
||||
test:
|
||||
go test -cover $(PACKAGES)
|
||||
|
||||
# docker run --publish=3306:3306 -e MYSQL_DATABASE=test -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:5.6.27
|
||||
test_mysql:
|
||||
DATABASE_DRIVER="mysql" DATABASE_CONFIG="root@tcp(127.0.0.1:3306)/test?parseTime=true" go test github.com/drone/drone/model
|
||||
|
||||
# docker run --publish=5432:5432 postgres:9.4.5
|
||||
test_postgres:
|
||||
DATABASE_DRIVER="postgres" DATABASE_CONFIG="host=127.0.0.1 user=postgres dbname=postgres sslmode=disable" go test github.com/drone/drone/model
|
||||
|
||||
deb:
|
||||
mkdir -p contrib/debian/drone/usr/local/bin
|
||||
mkdir -p contrib/debian/drone/var/lib/drone
|
||||
|
@ -80,7 +80,7 @@ func GetBuildList(db meddler.DB, repo *Repo) ([]*Build, error) {
|
||||
|
||||
func CreateBuild(db meddler.DB, build *Build, jobs ...*Job) error {
|
||||
var number int
|
||||
db.QueryRow(buildNumberLast, build.RepoID).Scan(&number)
|
||||
db.QueryRow(database.Rebind(buildNumberLast), build.RepoID).Scan(&number)
|
||||
build.Number = number + 1
|
||||
build.Created = time.Now().UTC().Unix()
|
||||
build.Enqueued = build.Created
|
||||
|
12
model/key.go
12
model/key.go
@ -33,14 +33,6 @@ func DeleteKey(db meddler.DB, repo *Repo) error {
|
||||
|
||||
const keyTable = "keys"
|
||||
|
||||
const keyQuery = `
|
||||
SELECT *
|
||||
FROM keys
|
||||
WHERE key_repo_id=?
|
||||
LIMIT 1
|
||||
`
|
||||
const keyQuery = "SELECT * FROM `keys` WHERE key_repo_id=? LIMIT 1"
|
||||
|
||||
const keyDeleteStmt = `
|
||||
DELETE FROM keys
|
||||
WHERE key_repo_id=?
|
||||
`
|
||||
const keyDeleteStmt = "DELETE FROM `keys` WHERE key_repo_id=?"
|
||||
|
@ -17,7 +17,7 @@ func TestKey(t *testing.T) {
|
||||
// before each test be sure to purge the package
|
||||
// table data from the database.
|
||||
g.BeforeEach(func() {
|
||||
db.Exec("DELETE FROM keys")
|
||||
db.Exec(database.Rebind("DELETE FROM `keys`"))
|
||||
})
|
||||
|
||||
g.It("Should create a key", func() {
|
||||
|
@ -100,15 +100,6 @@ WHERE repo_full_name = ?
|
||||
LIMIT 1;
|
||||
`
|
||||
|
||||
const repoStarsQuery = `
|
||||
SELECT r.*
|
||||
FROM
|
||||
repos r
|
||||
,stars s
|
||||
WHERE r.repo_id = s.star_repo_id
|
||||
AND s.star_user_id = ?
|
||||
`
|
||||
|
||||
const repoListQuery = `
|
||||
SELECT *
|
||||
FROM repos
|
||||
|
@ -86,36 +86,6 @@ DELETE FROM users
|
||||
WHERE user_id=?
|
||||
`
|
||||
|
||||
// this query was referenced from
|
||||
// http://stackoverflow.com/questions/2111384/sql-join-selecting-the-last-records-in-a-one-to-many-relationship/2111420#2111420
|
||||
// const userRepoLatestQuery = `
|
||||
// SELECT
|
||||
// r.repo_owner
|
||||
// ,r.repo_name
|
||||
// ,r.repo_full_name
|
||||
// ,r.repo_avatar
|
||||
// ,b.build_number
|
||||
// ,b.build_event
|
||||
// ,b.build_status
|
||||
// ,b.build_created
|
||||
// ,b.build_started
|
||||
// ,b.build_finished
|
||||
// ,b.build_commit
|
||||
// ,b.build_branch
|
||||
// ,b.build_ref
|
||||
// ,b.build_refspec
|
||||
// ,b.build_remote
|
||||
// ,b.build_title
|
||||
// ,b.build_message
|
||||
// ,b.build_author
|
||||
// ,b.build_email
|
||||
// FROM repos r
|
||||
// JOIN builds b ON (r.repo_id = b.build_repo_id)
|
||||
// LEFT OUTER JOIN builds bb ON (r.repo_id = bb.build_repo_id AND
|
||||
// (b.build_number < bb.build_number OR b.build_number = bb.build_number AND b.build_id < bb.build_id AND b.build_author=?))
|
||||
// WHERE bb.build_id IS NULL;
|
||||
// `
|
||||
|
||||
const userFeedQuery = `
|
||||
SELECT
|
||||
repo_owner
|
||||
|
@ -18,7 +18,6 @@ func TestUserstore(t *testing.T) {
|
||||
// table data from the database.
|
||||
g.BeforeEach(func() {
|
||||
db.Exec("DELETE FROM users")
|
||||
db.Exec("DELETE FROM stars")
|
||||
db.Exec("DELETE FROM repos")
|
||||
db.Exec("DELETE FROM builds")
|
||||
db.Exec("DELETE FROM jobs")
|
||||
|
@ -13,6 +13,7 @@ import (
|
||||
_ "github.com/lib/pq"
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
"github.com/rubenv/sql-migrate"
|
||||
"github.com/russross/meddler"
|
||||
)
|
||||
|
||||
func Load(env envconfig.Env) *sql.DB {
|
||||
@ -36,6 +37,12 @@ func Open(driver, config string) *sql.DB {
|
||||
log.Errorln(err)
|
||||
log.Fatalln("database connection failed")
|
||||
}
|
||||
switch driver {
|
||||
case "mysql":
|
||||
meddler.Default = meddler.MySQL
|
||||
case "postgres":
|
||||
meddler.Default = meddler.PostgreSQL
|
||||
}
|
||||
|
||||
var migrations = &migrate.AssetMigrationSource{
|
||||
Asset: Asset,
|
||||
|
@ -37,16 +37,6 @@ CREATE TABLE repos (
|
||||
,UNIQUE(repo_full_name)
|
||||
);
|
||||
|
||||
CREATE TABLE stars (
|
||||
star_id INTEGER PRIMARY KEY AUTO_INCREMENT
|
||||
,star_repo_id INTEGER
|
||||
,star_user_id INTEGER
|
||||
|
||||
,UNIQUE(star_repo_id, star_user_id)
|
||||
);
|
||||
|
||||
CREATE INDEX ix_star_user ON stars (star_user_id);
|
||||
|
||||
CREATE TABLE `keys` (
|
||||
key_id INTEGER PRIMARY KEY AUTO_INCREMENT
|
||||
,key_repo_id INTEGER
|
||||
@ -82,8 +72,7 @@ CREATE TABLE builds (
|
||||
,UNIQUE(build_number, build_repo_id)
|
||||
);
|
||||
|
||||
CREATE INDEX ix_build_repo ON builds (build_repo_id);
|
||||
CREATE INDEX ix_build_author ON builds (build_author);
|
||||
CREATE INDEX ix_build_repo ON builds (build_repo_id);
|
||||
|
||||
CREATE TABLE jobs (
|
||||
job_id INTEGER PRIMARY KEY AUTO_INCREMENT
|
||||
|
@ -37,16 +37,6 @@ CREATE TABLE repos (
|
||||
,UNIQUE(repo_full_name)
|
||||
);
|
||||
|
||||
CREATE TABLE stars (
|
||||
star_id SERIAL PRIMARY KEY
|
||||
,star_repo_id INTEGER
|
||||
,star_user_id INTEGER
|
||||
|
||||
,UNIQUE(star_repo_id, star_user_id)
|
||||
);
|
||||
|
||||
CREATE INDEX ix_star_user ON builds (star_user_id);
|
||||
|
||||
CREATE TABLE keys (
|
||||
key_id SERIAL PRIMARY KEY
|
||||
,key_repo_id INTEGER
|
||||
@ -82,8 +72,7 @@ CREATE TABLE builds (
|
||||
,UNIQUE(build_number, build_repo_id)
|
||||
);
|
||||
|
||||
CREATE INDEX ix_build_repo ON builds (build_repo_id);
|
||||
CREATE INDEX ix_build_author ON builds (build_author);
|
||||
CREATE INDEX ix_build_repo ON builds (build_repo_id);
|
||||
|
||||
CREATE TABLE jobs (
|
||||
job_id SERIAL PRIMARY KEY
|
||||
@ -121,8 +110,9 @@ CREATE TABLE IF NOT EXISTS nodes (
|
||||
);
|
||||
|
||||
|
||||
INSERT INTO nodes VALUES(null, 'unix:///var/run/docker.sock', 'linux_amd64', '', '', '');
|
||||
INSERT INTO nodes VALUES(null, 'unix:///var/run/docker.sock', 'linux_amd64', '', '', '');
|
||||
INSERT INTO nodes (node_addr, node_arch, node_cert, node_key, node_ca) VALUES
|
||||
('unix:///var/run/docker.sock', 'linux_amd64', '', '', ''),
|
||||
('unix:///var/run/docker.sock', 'linux_amd64', '', '', '');
|
||||
|
||||
-- +migrate Down
|
||||
|
||||
|
@ -18,13 +18,16 @@ func Rebind(query string) string {
|
||||
rqb := make([]byte, 0, len(qb)+5)
|
||||
j := 1
|
||||
for _, b := range qb {
|
||||
if b == '?' {
|
||||
switch b {
|
||||
case '?':
|
||||
rqb = append(rqb, '$')
|
||||
for _, b := range strconv.Itoa(j) {
|
||||
rqb = append(rqb, byte(b))
|
||||
}
|
||||
j++
|
||||
} else {
|
||||
case '`':
|
||||
rqb = append(rqb, ' ')
|
||||
default:
|
||||
rqb = append(rqb, b)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user