From 5e8a085cfb2f6df373a2a68436b1c1acacba592b Mon Sep 17 00:00:00 2001 From: Jan Mercl <0xjnml@gmail.com> Date: Sat, 1 Jul 2017 23:04:53 +0200 Subject: 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 --- all_test.go | 181 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) (limited to 'all_test.go') diff --git a/all_test.go b/all_test.go index 3406c44..f81ab5d 100644 --- a/all_test.go +++ b/all_test.go @@ -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) + } + } + } +} -- cgit v1.2.3-70-g09d2