diff options
author | Jan Mercl <0xjnml@gmail.com> | 2017-07-03 23:36:03 +0200 |
---|---|---|
committer | Jan Mercl <0xjnml@gmail.com> | 2017-07-03 23:36:03 +0200 |
commit | 2aa5e95243d7c8dca1acf8439d8a9da0225242cb (patch) | |
tree | 999d7b00caa67eab6e99efae9d5b16c8db1a53e2 /all_test.go | |
parent | 481e652f27a8ccebf301ff73a65fa7f38bd204d5 (diff) |
Add TestThread3 (does not yet pass). Updates #15.
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/threadtest3/threadtest3_linux_386.go
new file: internal/threadtest3/threadtest3_linux_amd64.go
Diffstat (limited to 'all_test.go')
-rw-r--r-- | all_test.go | 109 |
1 files changed, 90 insertions, 19 deletions
diff --git a/all_test.go b/all_test.go index 39925b5..697e066 100644 --- a/all_test.go +++ b/all_test.go @@ -484,7 +484,7 @@ func TestThread2(t *testing.T) { } } -func TestThread4(t *testing.T) { +func TestThread3(t *testing.T) { dir, err := ioutil.TempDir("", "sqlite-test-") if err != nil { t.Fatal(err) @@ -511,36 +511,107 @@ func TestThread4(t *testing.T) { t.Fatal(err) } - s := []string{"build", "-o", "threadtest4"} + s := []string{"build", "-o", "threadtest3"} if *memTrace { s = append(s, "-tags", "memory.trace", "-race") } - if out, err := exec.Command("go", append(s, "github.com/cznic/sqlite/internal/threadtest4")...).CombinedOutput(); err != nil { + if out, err := exec.Command("go", append(s, "github.com/cznic/sqlite/internal/threadtest3")...).CombinedOutput(); err != nil { t.Fatalf("go build mptest: %s\n%s", err, out) } for _, opts := range [][]string{ - {}, - {"-wal"}, - {"-serialized"}, - {"-serialized", "-wal"}, - {"--multithread"}, - {"--multithread", "-wal"}, - {"--multithread", "-serialized"}, - {"--multithread", "-serialized", "-wal"}, + {"walthread1"}, + {"walthread2"}, + {"walthread3"}, + {"walthread4"}, + {"walthread5"}, + {"cgt_pager_1"}, + {"dynamic_triggers"}, + {"checkpoint_starvation_1"}, + {"checkpoint_starvation_2"}, + {"create_drop_index_1"}, + {"lookaside1"}, + {"vacuum1"}, + {"stress1"}, + {"stress2"}, } { - for i := 2; i <= 10; i++ { - out, err := exec.Command("./threadtest4", append(opts, strconv.Itoa(i))...).CombinedOutput() - t.Logf("%v: %v\n%s", i, opts, out) - if err != nil { + out, err := exec.Command("./threadtest3", opts...).CombinedOutput() + dbg("%v\n%s", opts, out) + t.Logf("%v\n%s", opts, out) + if err != nil { + t.Fatal(err) + } + + if bytes.Contains(out, []byte("fault address")) || + bytes.Contains(out, []byte("data race")) || + bytes.Contains(out, []byte("RACE")) { + t.Fatal("fault") + } + } +} + +func TestThread4(t *testing.T) { + cases := 0 + for i := 0; i < 10; i++ { + 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) + } + + s := []string{"build", "-o", "threadtest4"} + if *memTrace { + s = append(s, "-tags", "memory.trace", "-race") + } + if out, err := exec.Command("go", append(s, "github.com/cznic/sqlite/internal/threadtest4")...).CombinedOutput(); err != nil { + t.Fatalf("go build mptest: %s\n%s", err, out) + } - if bytes.Contains(out, []byte("fault address")) || - bytes.Contains(out, []byte("data race")) || - bytes.Contains(out, []byte("RACE")) { - t.Fatal("fault") + for _, opts := range [][]string{ + {}, + {"-wal"}, + {"-serialized"}, + {"-serialized", "-wal"}, + {"--multithread"}, + {"--multithread", "-wal"}, + {"--multithread", "-serialized"}, + {"--multithread", "-serialized", "-wal"}, + } { + for j := 2; j <= 20; j++ { + out, err := exec.Command("./threadtest4", append(opts, strconv.Itoa(j))...).CombinedOutput() + t.Logf("%v %v: %v\n%s", i, j, opts, out) + if err != nil { + t.Fatal(err) + } + + if bytes.Contains(out, []byte("fault address")) || + bytes.Contains(out, []byte("data race")) || + bytes.Contains(out, []byte("RACE")) { + t.Fatalf("case %v: fault", cases) + } + cases++ } } } + t.Logf("cases: %v", cases) } |