Ai
1 Star 1 Fork 0

zheng.cui/go-oauth2-server

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
database.go 2.78 KB
一键复制 编辑 原始数据 按行查看 历史
package testutil
import (
"fmt"
"os"
"github.com/RichardKnop/go-fixtures"
"github.com/RichardKnop/go-oauth2-server/util/migrations"
"github.com/jinzhu/gorm"
// Drivers
_ "github.com/lib/pq"
_ "github.com/mattn/go-sqlite3"
)
// CreateTestDatabase recreates the test database and
// runs migrations and fixtures as passed in, returning
// a pointer to the database
func CreateTestDatabase(dbPath string, migrationFunctions []func(*gorm.DB) error, fixtureFiles []string) (*gorm.DB, error) {
// Init in-memory test database
inMemoryDB, err := rebuildDatabase(dbPath)
if err != nil {
return nil, err
}
// Run all migrations
migrations.MigrateAll(inMemoryDB, migrationFunctions)
// Load data from data
if err = fixtures.LoadFiles(fixtureFiles, inMemoryDB.DB(), "sqlite"); err != nil {
return nil, err
}
return inMemoryDB, nil
}
// CreateTestDatabasePostgres is similar to CreateTestDatabase but it uses
// Postgres instead of sqlite, this is needed for testing packages that rely
// on some Postgres specifuc features (such as table inheritance)
func CreateTestDatabasePostgres(dbHost, dbUser, dbName string, migrationFunctions []func(*gorm.DB) error, fixtureFiles []string) (*gorm.DB, error) {
// Postgres test database
db, err := rebuildDatabasePostgres(dbHost, dbUser, dbName)
if err != nil {
return nil, err
}
// Run all migrations
migrations.MigrateAll(db, migrationFunctions)
// Load data from data
if err = fixtures.LoadFiles(fixtureFiles, db.DB(), "postgres"); err != nil {
return nil, err
}
return db, nil
}
// rebuildDatabase attempts to delete an existing in memory
// database and rebuild it, returning a pointer to it
func rebuildDatabase(dbPath string) (*gorm.DB, error) {
// Delete the current database if it exists
os.Remove(dbPath)
// Init a new in-memory test database connection
inMemoryDB, err := gorm.Open("sqlite3", dbPath)
if err != nil {
return nil, err
}
return inMemoryDB, nil
}
// rebuildDatabase attempts to delete an existing Postgres
// database and rebuild it, returning a pointer to it
func rebuildDatabasePostgres(dbHost, dbUser, dbName string) (*gorm.DB, error) {
db, err := openPostgresDB(dbHost, dbUser, "template1")
if err != nil {
return nil, err
}
if err := db.Exec(fmt.Sprintf("DROP DATABASE IF EXISTS %s;", dbName)).Error; err != nil {
return nil, err
}
if err := db.Exec(fmt.Sprintf("CREATE DATABASE %s;", dbName)).Error; err != nil {
return nil, err
}
return openPostgresDB(dbHost, dbUser, dbName)
}
func openPostgresDB(dbHost, dbUser, dbName string) (*gorm.DB, error) {
// Init a new postgres test database connection
db, err := gorm.Open("postgres",
fmt.Sprintf(
"sslmode=disable host=%s port=5432 user=%s password='' dbname=%s",
dbHost,
dbUser,
dbName,
),
)
if err != nil {
return nil, err
}
return db, nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/ongo360/go-oauth2-server.git
git@gitee.com:ongo360/go-oauth2-server.git
ongo360
go-oauth2-server
go-oauth2-server
master

搜索帮助