diff options
author | Jan Mercl <0xjnml@gmail.com> | 2017-07-01 23:04:53 +0200 |
---|---|---|
committer | Jan Mercl <0xjnml@gmail.com> | 2017-07-01 23:04:53 +0200 |
commit | 5e8a085cfb2f6df373a2a68436b1c1acacba592b (patch) | |
tree | 6cd0e355f252b4e45331b7e476904c9b588ddce5 /all_test.go | |
parent | 8370d1a12ed5bbad6630675316ee3985d8372a7b (diff) |
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
Diffstat (limited to 'all_test.go')
-rw-r--r-- | all_test.go | 181 |
1 files changed, 181 insertions, 0 deletions
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) + } + } + } +} |