aboutsummaryrefslogtreecommitdiff
path: root/all_test.go
diff options
context:
space:
mode:
authorJan Mercl <0xjnml@gmail.com>2017-07-01 23:04:53 +0200
committerJan Mercl <0xjnml@gmail.com>2017-07-01 23:04:53 +0200
commit5e8a085cfb2f6df373a2a68436b1c1acacba592b (patch)
tree6cd0e355f252b4e45331b7e476904c9b588ddce5 /all_test.go
parent8370d1a12ed5bbad6630675316ee3985d8372a7b (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.go181
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)
+ }
+ }
+ }
+}