woodpecker/server/store/datastore/engine_test.go
6543 0aefdc9978
Add tests framework for storage migration (#630)
* add test sqlite db

* migration tests for sqlite

* fix pipeline config

* fix tests to other dbms

* fix postgres & mysql
2021-12-20 16:15:21 +01:00

66 lines
1.6 KiB
Go

// Copyright 2021 Woodpecker Authors
//
// 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 datastore
import (
"os"
"testing"
"xorm.io/xorm"
"github.com/stretchr/testify/assert"
)
func testDriverConfig() (driver, config string) {
driver = "sqlite3"
config = ":memory:"
if os.Getenv("WOODPECKER_DATABASE_DRIVER") != "" {
driver = os.Getenv("WOODPECKER_DATABASE_DRIVER")
config = os.Getenv("WOODPECKER_DATABASE_DATASOURCE")
}
return
}
// newTestStore creates a new database connection for testing purposes.
// The database driver and connection string are provided by
// environment variables, with fallback to in-memory sqlite.
func newTestStore(t *testing.T, tables ...interface{}) (*storage, func()) {
engine, err := xorm.NewEngine(testDriverConfig())
if !assert.NoError(t, err) {
t.FailNow()
}
for _, table := range tables {
if err := engine.Sync2(table); err != nil {
t.Error(err)
t.FailNow()
}
}
return &storage{
engine: engine,
}, func() {
if err := engine.DropTables(tables...); err != nil {
t.Error(err)
t.FailNow()
}
if err := engine.Close(); err != nil {
t.Error(err)
t.FailNow()
}
}
}