Add a couple of tests. Build only on linux, do not pass.

modified:   Makefile
	modified:   all_test.go
	modified:   generator.go
	modified:   internal/bin/bin_linux_386.go
	modified:   internal/bin/bin_linux_amd64.go
	new file:   internal/mptest/mptest_linux_386.go
	new file:   internal/mptest/mptest_linux_amd64.go
	new file:   internal/threadtest1/threadtest1_linux_386.go
	new file:   internal/threadtest1/threadtest1_linux_amd64.go
	new file:   internal/threadtest2/threadtest2_linux_386.go
	new file:   internal/threadtest2/threadtest2_linux_amd64.go
	new file:   internal/threadtest4/threadtest4_linux_386.go
	new file:   internal/threadtest4/threadtest4_linux_amd64.go
	modified:   main.c
	new file:   sqlite.h
	new file:   testdata/mptest/config01.test
	new file:   testdata/mptest/config02.test
	new file:   testdata/mptest/crash01.test
	new file:   testdata/mptest/crash02.subtest
	new file:   testdata/mptest/multiwrite01.test
This commit is contained in:
Jan Mercl
2017-07-01 23:04:53 +02:00
parent 8370d1a12e
commit 5e8a085cfb
20 changed files with 104222 additions and 141570 deletions

View File

@@ -11,9 +11,11 @@ import (
"fmt"
"io/ioutil"
"os"
"os/exec"
"path"
"path/filepath"
"runtime"
"strconv"
"strings"
"testing"
"time"
@@ -348,3 +350,182 @@ func TestMemDB(t *testing.T) {
t.Fatal(err)
}
}
func TestMP(t *testing.T) {
dir, err := ioutil.TempDir("", "sqlite-test-")
if err != nil {
t.Fatal(err)
}
defer func() {
if err := os.RemoveAll(dir); err != nil {
t.Fatal(err)
}
}()
wd, err := os.Getwd()
if err != nil {
t.Fatal(err)
}
defer func() {
if err := os.Chdir(wd); err != nil {
t.Fatal(err)
}
}()
if err := os.Chdir(dir); err != nil {
t.Fatal(err)
}
if out, err := exec.Command("go", "build", "-o", "mptest", "github.com/cznic/sqlite/internal/mptest").CombinedOutput(); err != nil {
t.Fatalf("go build mptest: %s\n%s", err, out)
}
pat := filepath.Join(wd, filepath.FromSlash("testdata/mptest"), "*.test")
m, err := filepath.Glob(pat)
if err != nil {
t.Fatal(err)
}
if len(m) == 0 {
t.Fatalf("%s: no files", pat)
}
cmd := filepath.FromSlash("./mptest")
for _, v := range m {
os.Remove("db")
out, err := exec.Command(cmd, "db", v).CombinedOutput()
t.Logf("%s", out)
if err != nil {
t.Fatal(err)
}
}
}
func TestThread1(t *testing.T) {
dir, err := ioutil.TempDir("", "sqlite-test-")
if err != nil {
t.Fatal(err)
}
defer func() {
if err := os.RemoveAll(dir); err != nil {
t.Fatal(err)
}
}()
wd, err := os.Getwd()
if err != nil {
t.Fatal(err)
}
defer func() {
if err := os.Chdir(wd); err != nil {
t.Fatal(err)
}
}()
if err := os.Chdir(dir); err != nil {
t.Fatal(err)
}
if out, err := exec.Command("go", "build", "-o", "threadtest1", "github.com/cznic/sqlite/internal/threadtest1").CombinedOutput(); err != nil {
t.Fatalf("go build mptest: %s\n%s", err, out)
}
for i := 1; i <= 10; i++ {
out, err := exec.Command("./threadtest1", strconv.Itoa(i), "-v").CombinedOutput()
t.Logf("%v: %s", i, out)
if err != nil {
t.Fatal(err)
}
}
}
func TestThread2(t *testing.T) {
dir, err := ioutil.TempDir("", "sqlite-test-")
if err != nil {
t.Fatal(err)
}
defer func() {
if err := os.RemoveAll(dir); err != nil {
t.Fatal(err)
}
}()
wd, err := os.Getwd()
if err != nil {
t.Fatal(err)
}
defer func() {
if err := os.Chdir(wd); err != nil {
t.Fatal(err)
}
}()
if err := os.Chdir(dir); err != nil {
t.Fatal(err)
}
if out, err := exec.Command("go", "build", "-o", "threadtest2", "github.com/cznic/sqlite/internal/threadtest2").CombinedOutput(); err != nil {
t.Fatalf("go build mptest: %s\n%s", err, out)
}
out, err := exec.Command("./threadtest2").CombinedOutput()
t.Logf("%s", out)
if err != nil {
t.Fatal(err)
}
}
func TestThread4(t *testing.T) {
dir, err := ioutil.TempDir("", "sqlite-test-")
if err != nil {
t.Fatal(err)
}
defer func() {
if err := os.RemoveAll(dir); err != nil {
t.Fatal(err)
}
}()
wd, err := os.Getwd()
if err != nil {
t.Fatal(err)
}
defer func() {
if err := os.Chdir(wd); err != nil {
t.Fatal(err)
}
}()
if err := os.Chdir(dir); err != nil {
t.Fatal(err)
}
if out, err := exec.Command("go", "build", "-o", "threadtest4", "github.com/cznic/sqlite/internal/threadtest4").CombinedOutput(); err != nil {
t.Fatalf("go build mptest: %s\n%s", err, out)
}
for _, opts := range [][]string{
{},
{"-serialized", "-wal"},
{"-serialized"},
{"-multithread"},
{"-multithread", "-wal"},
{"-wal"},
} {
for i := 2; i <= 10; i++ {
out, err := exec.Command("./threadtest4", append(opts, strconv.Itoa(i))...).CombinedOutput()
t.Logf("%v: %s", i, out)
if err != nil {
t.Fatal(err)
}
}
}
}