2018-09-19 18:57:15 +02:00
|
|
|
// Copyright Project Harbor Authors
|
2017-10-01 23:03:53 +02:00
|
|
|
//
|
|
|
|
// licensed under the apache license, version 2.0 (the "license");
|
|
|
|
// you may not use this file except in compliance with the license.
|
|
|
|
// you may obtain a copy of the license at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/license-2.0
|
|
|
|
//
|
|
|
|
// unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the license is distributed on an "as is" basis,
|
|
|
|
// without warranties or conditions of any kind, either express or implied.
|
|
|
|
// see the license for the specific language governing permissions and
|
|
|
|
// limitations under the license.
|
|
|
|
|
|
|
|
package dao
|
|
|
|
|
|
|
|
import (
|
2018-03-15 06:31:37 +01:00
|
|
|
"fmt"
|
2017-10-01 23:03:53 +02:00
|
|
|
"os"
|
|
|
|
"strconv"
|
|
|
|
|
2018-08-23 09:02:20 +02:00
|
|
|
"github.com/goharbor/harbor/src/common/models"
|
|
|
|
"github.com/goharbor/harbor/src/common/utils/log"
|
2017-10-01 23:03:53 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
var defaultRegistered = false
|
|
|
|
|
|
|
|
// PrepareTestForMySQL is for test only.
|
|
|
|
func PrepareTestForMySQL() {
|
2018-04-27 11:27:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// PrepareTestForSQLite is for test only.
|
|
|
|
func PrepareTestForSQLite() {
|
|
|
|
}
|
|
|
|
|
|
|
|
// PrepareTestForPostgresSQL is for test only.
|
|
|
|
func PrepareTestForPostgresSQL() {
|
|
|
|
dbHost := os.Getenv("POSTGRESQL_HOST")
|
2017-10-01 23:03:53 +02:00
|
|
|
if len(dbHost) == 0 {
|
2018-04-27 11:27:12 +02:00
|
|
|
log.Fatalf("environment variable POSTGRESQL_HOST is not set")
|
2017-10-01 23:03:53 +02:00
|
|
|
}
|
2018-04-27 11:27:12 +02:00
|
|
|
dbUser := os.Getenv("POSTGRESQL_USR")
|
2017-10-01 23:03:53 +02:00
|
|
|
if len(dbUser) == 0 {
|
2018-04-27 11:27:12 +02:00
|
|
|
log.Fatalf("environment variable POSTGRESQL_USR is not set")
|
2017-10-01 23:03:53 +02:00
|
|
|
}
|
2018-04-27 11:27:12 +02:00
|
|
|
dbPortStr := os.Getenv("POSTGRESQL_PORT")
|
2017-10-01 23:03:53 +02:00
|
|
|
if len(dbPortStr) == 0 {
|
2018-04-27 11:27:12 +02:00
|
|
|
log.Fatalf("environment variable POSTGRESQL_PORT is not set")
|
2017-10-01 23:03:53 +02:00
|
|
|
}
|
|
|
|
dbPort, err := strconv.Atoi(dbPortStr)
|
|
|
|
if err != nil {
|
2018-04-27 11:27:12 +02:00
|
|
|
log.Fatalf("invalid POSTGRESQL_PORT: %v", err)
|
2017-10-01 23:03:53 +02:00
|
|
|
}
|
|
|
|
|
2018-04-27 11:27:12 +02:00
|
|
|
dbPassword := os.Getenv("POSTGRESQL_PWD")
|
|
|
|
dbDatabase := os.Getenv("POSTGRESQL_DATABASE")
|
2017-10-01 23:03:53 +02:00
|
|
|
if len(dbDatabase) == 0 {
|
2018-04-27 11:27:12 +02:00
|
|
|
log.Fatalf("environment variable POSTGRESQL_DATABASE is not set")
|
2017-10-01 23:03:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
database := &models.Database{
|
2018-04-27 11:27:12 +02:00
|
|
|
Type: "postgresql",
|
|
|
|
PostGreSQL: &models.PostGreSQL{
|
2017-10-01 23:03:53 +02:00
|
|
|
Host: dbHost,
|
|
|
|
Port: dbPort,
|
|
|
|
Username: dbUser,
|
|
|
|
Password: dbPassword,
|
|
|
|
Database: dbDatabase,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2018-04-27 11:27:12 +02:00
|
|
|
log.Infof("POSTGRES_HOST: %s, POSTGRES_USR: %s, POSTGRES_PORT: %d, POSTGRES_PWD: %s\n", dbHost, dbUser, dbPort, dbPassword)
|
2017-10-01 23:03:53 +02:00
|
|
|
initDatabaseForTest(database)
|
|
|
|
}
|
|
|
|
|
|
|
|
func initDatabaseForTest(db *models.Database) {
|
|
|
|
database, err := getDatabase(db)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Infof("initializing database: %s", database.String())
|
|
|
|
|
|
|
|
alias := database.Name()
|
|
|
|
if !defaultRegistered {
|
|
|
|
defaultRegistered = true
|
|
|
|
alias = "default"
|
|
|
|
}
|
|
|
|
if err := database.Register(alias); err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2018-06-27 11:49:46 +02:00
|
|
|
if err := database.UpgradeSchema(); err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2017-10-01 23:03:53 +02:00
|
|
|
|
|
|
|
if alias != "default" {
|
|
|
|
if err = globalOrm.Using(alias); err != nil {
|
|
|
|
log.Fatalf("failed to create new orm: %v", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-03-15 06:31:37 +01:00
|
|
|
|
|
|
|
// PrepareTestData -- Clean and Create data
|
|
|
|
func PrepareTestData(clearSqls []string, initSqls []string) {
|
|
|
|
o := GetOrmer()
|
|
|
|
|
|
|
|
for _, sql := range clearSqls {
|
|
|
|
fmt.Printf("Exec sql:%v\n", sql)
|
|
|
|
_, err := o.Raw(sql).Exec()
|
|
|
|
if err != nil {
|
|
|
|
fmt.Printf("failed to clear database, sql:%v, error: %v", sql, err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, sql := range initSqls {
|
|
|
|
_, err := o.Raw(sql).Exec()
|
|
|
|
if err != nil {
|
|
|
|
fmt.Printf("failed to init database, sql:%v, error: %v", sql, err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-04-19 07:52:18 +02:00
|
|
|
|
|
|
|
// ArrayEqual ...
|
|
|
|
func ArrayEqual(arrayA, arrayB []int) bool {
|
|
|
|
if len(arrayA) != len(arrayB) {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
size := len(arrayA)
|
|
|
|
for i := 0; i < size; i++ {
|
|
|
|
if arrayA[i] != arrayB[i] {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
2019-03-01 07:11:14 +01:00
|
|
|
|
|
|
|
// ClearHTTPAuthProxyUsers remove the records from harbor_users to delete all user imported via
|
|
|
|
// HTTP Auth Proxy
|
|
|
|
func ClearHTTPAuthProxyUsers() error {
|
|
|
|
o := GetOrmer()
|
|
|
|
sql := "DELETE FROM harbor_user WHERE comment='By Authproxy'"
|
|
|
|
_, err := o.Raw(sql).Exec()
|
|
|
|
return err
|
|
|
|
}
|