mirror of https://github.com/jlelse/GoBlog
107 lines
2.1 KiB
Go
107 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func (a *goBlog) setInMemoryDatabase() {
|
|
a.db, _ = a.openDatabase(":memory:", false)
|
|
}
|
|
|
|
func Test_database(t *testing.T) {
|
|
t.Run("Basic Database Test", func(t *testing.T) {
|
|
app := &goBlog{
|
|
cfg: &config{},
|
|
}
|
|
|
|
db, err := app.openDatabase(":memory:", false)
|
|
if err != nil {
|
|
t.Fatalf("Error: %v", err)
|
|
}
|
|
|
|
_, err = db.exec("create table test(test text);")
|
|
if err != nil {
|
|
t.Fatalf("Error: %v", err)
|
|
}
|
|
|
|
_, err = db.exec("insert into test (test) values ('Test')")
|
|
if err != nil {
|
|
t.Fatalf("Error: %v", err)
|
|
}
|
|
|
|
row, err := db.queryRow("select count(test) from test")
|
|
if err != nil {
|
|
t.Fatalf("Error: %v", err)
|
|
}
|
|
var test1 int
|
|
err = row.Scan(&test1)
|
|
if err != nil {
|
|
t.Fatalf("Error: %v", err)
|
|
}
|
|
if test1 != 1 {
|
|
t.Error("Wrong result")
|
|
}
|
|
|
|
rows, err := db.query("select count(test), test from test")
|
|
if err != nil {
|
|
t.Fatalf("Error: %v", err)
|
|
}
|
|
var test2 int
|
|
var testStr string
|
|
if !rows.Next() {
|
|
t.Error("No result row")
|
|
}
|
|
err = rows.Scan(&test2, &testStr)
|
|
if err != nil {
|
|
t.Fatalf("Error: %v", err)
|
|
}
|
|
if test2 != 1 || testStr != "Test" {
|
|
t.Error("Wrong result")
|
|
}
|
|
|
|
err = db.close()
|
|
if err != nil {
|
|
t.Fatalf("Error: %v", err)
|
|
}
|
|
})
|
|
}
|
|
|
|
func Test_parallelDatabase(t *testing.T) {
|
|
t.Run("Test parallel db access", func(t *testing.T) {
|
|
// Test that parallel database access works without problems
|
|
|
|
t.Parallel()
|
|
|
|
app := &goBlog{
|
|
cfg: &config{},
|
|
}
|
|
app.setInMemoryDatabase()
|
|
|
|
_, err := app.db.exec("create table test(test text);")
|
|
require.NoError(t, err)
|
|
|
|
t.Run("1", func(t *testing.T) {
|
|
for i := 0; i < 10000; i++ {
|
|
_, e := app.db.exec("insert into test (test) values ('Test')")
|
|
require.NoError(t, e)
|
|
}
|
|
})
|
|
|
|
t.Run("2", func(t *testing.T) {
|
|
for i := 0; i < 10000; i++ {
|
|
_, e := app.db.exec("insert into test (test) values ('Test')")
|
|
require.NoError(t, e)
|
|
}
|
|
})
|
|
|
|
t.Run("3", func(t *testing.T) {
|
|
for i := 0; i < 10000; i++ {
|
|
_, e := app.db.queryRow("select count(test) from test")
|
|
require.NoError(t, e)
|
|
}
|
|
})
|
|
})
|
|
}
|