diff options
author | Jan Mercl <0xjnml@gmail.com> | 2020-07-26 22:36:18 +0200 |
---|---|---|
committer | Jan Mercl <0xjnml@gmail.com> | 2020-07-26 22:36:18 +0200 |
commit | b406626c64313ae348996c243a0a05d3f6ed2c3c (patch) | |
tree | 0eaae4fa6348b150568725e6f2ec0b4c4203b5f8 /all_test.go | |
parent | d8d9f40ce80062793349c0ea47520b6878312f4a (diff) |
release v1.4.0-beta1v1.4.0-beta1
Diffstat (limited to 'all_test.go')
-rw-r--r-- | all_test.go | 205 |
1 files changed, 201 insertions, 4 deletions
diff --git a/all_test.go b/all_test.go index 2836dd9..3fa9af5 100644 --- a/all_test.go +++ b/all_test.go @@ -26,6 +26,8 @@ import ( "time" "modernc.org/mathutil" + "modernc.org/sqlite/internal/testfixture" + "modernc.org/tcl" ) func caller(s string, va ...interface{}) { @@ -80,15 +82,28 @@ func stack() string { return string(debug.Stack()) } func use(...interface{}) {} func init() { - use(caller, dbg, TODO, trace) //TODOOK + use(caller, dbg, TODO, trace, stack) //TODOOK } // ============================================================================ var ( + oMaxError = flag.Uint("maxerror", 0, "argument of -maxerror passed to the Tcl test suite") + oStart = flag.String("start", "", "argument of -start passed to the Tcl test suite (--start=[$permutation:]$testfile)") + oVerbose = flag.String("verbose", "0", "argument of -verbose passed to the Tcl test suite, must be set to a boolean (0, 1) or to \"file\"") recsPerSec = flag.Bool("recs_per_sec_as_mbps", false, "Show records per second as MB/s.") ) +func TestMain(m *testing.M) { + oTestFixture := flag.Bool("testfixture", false, "emulate running the testfixture binary produced by sqlite3 '$ make tcltest'") + flag.Parse() + if !*oTestFixture { + os.Exit(m.Run()) + } + + tclTestMain() +} + func tempDB(t testing.TB) (string, *sql.DB) { dir, err := ioutil.TempDir("", "sqlite-test-") if err != nil { @@ -296,7 +311,7 @@ func BenchmarkNextMemory(b *testing.B) { r, err := db.Query("select * from t") if err != nil { - + b.Fatal(err) } defer r.Close() @@ -416,11 +431,11 @@ func TestConcurrentGoroutines(t *testing.T) { lim := ngoroutines * nrows rng, err := mathutil.NewFC32(0, lim-1, false) if err != nil { - t.Fatal(err) + panic(fmt.Errorf("internal error: %v", err)) } for i := 0; i < lim; i++ { - rnd <- int(rng.Next()) + rnd <- rng.Next() } }() @@ -770,3 +785,185 @@ func TestNoRows(t *testing.T) { t.Fatal(err) } } + +// 630 errors out of 200177 tests on Linux 64-bit little-endian +func TestTclTest(t *testing.T) { + blacklist := []string{ + //TODO crashers + "exists.test", + "index.test", + // "mallocK.test", + "misc1.test", + "quota2.test", + // "sortfault.test", + // "swarmvtabfault.test", + "multiplex2.test", + "symlink.test", + "pager1.test", + "printf.test", + // "walfault.test", + // "walfault2.test", + // "walhook.test", + // "walmode.test", + // "walnoshm.test", + // "waloverwrite.test", + // "walvfs.test", + "rowallock.test", + "savepoint.test", + "schema2.test", + "schema3.test", + "shared2.test", + "superlock.test", + "syscall.test", + "tkt-5d863f876e.test", + "tkt-fc62af4523.test", + "unixexcl.test", + "wal.test", + "wal5.test", + "walro.test", + "walro2.test", + "walsetlk.test", + + // // Needs fork. + // "crash.test", + // "crash1.test", + // "crash2.test", + // "crash3.test", + // "crash4.test", + // "crash6.test", + // "crash7.test", + // "malloc.test", + // "mmap1.test", + // "mmap3.test", + // "mmap4.test", + // "pagerfault.test", + // "tkt-54844eea3f.test", + // "wal3.test", + // "walslow.test", + + // //TODO needs fts_open + // "misc7.test", + + //TODO hangs + "corruptL.test", + "e_walckpt.test", + "gencol1.test", + // "savepoint4.test", + + //TODO OOM + "csv01.test", + + // //TODO scanf + } + if testing.Short() { + blacklist = append(blacklist, []string{ + "altermalloc.test", + "altermalloc2.test", + "attachmalloc.test", + "backup_ioerr.test", + "backup_malloc.test", + "corruptC.test", + "fkey_malloc.test", + "fuzz.test", + "fuzz3.test", + "incrvacuum_ioerr.test", + "pagerfault2.test", + "savepoint6.test", + "savepointfault.test", + "securedel2.test", + "shared_err.test", + "sort3.test", + "tempfault.test", + "vacuum3.test", + "vtab_err.test", + "walprotocol.test", + }...) + } + + m, err := filepath.Glob(filepath.FromSlash("testdata/tcl/*")) + if err != nil { + t.Fatal(err) + } + + dir, err := ioutil.TempDir("", "sqlite-test-") + if err != nil { + t.Fatal(err) + } + + defer os.RemoveAll(dir) + + wd, err := os.Getwd() + if err != nil { + t.Fatal(err) + } + + defer os.Chdir(wd) + + if err := os.Chdir(dir); err != nil { + t.Fatal(err) + } + + blacklisted := map[string]struct{}{} + for _, v := range blacklist { + blacklisted[v] = struct{}{} + } + for _, v := range m { + if _, ok := blacklisted[filepath.Base(v)]; ok { + continue + } + + s := filepath.Join(wd, v) + d := filepath.Join(dir, filepath.Base(v)) + f, err := ioutil.ReadFile(s) + if err != nil { + t.Fatal(err) + } + if err := ioutil.WriteFile(d, f, 0660); err != nil { + t.Fatal(err) + } + } + + library := filepath.Join(dir, "library") + if err := tcl.Library(library); err != nil { + t.Fatal(err) + } + + os.Setenv("TCL_LIBRARY", library) + f, err := os.Create(filepath.Join(wd, "testdata", fmt.Sprintf("tcltest_%s_%s.golden", runtime.GOOS, runtime.GOARCH))) + if err != nil { + t.Fatal(err) + } + + defer f.Close() + + //args := []string{"-testfixture", "all.test"} + args := []string{"-testfixture", "permutations.test", "extraquick"} + if *oVerbose != "" { + args = append(args, fmt.Sprintf("-verbose=%s", *oVerbose)) + } + if *oMaxError != 0 { + args = append(args, fmt.Sprintf("-maxerror=%d", *oMaxError)) + } + if *oStart != "" { + args = append(args, fmt.Sprintf("-start=%s", *oStart)) + } + cmd := exec.Command(os.Args[0], args...) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + t.Fatal(err) + } +} + +func tclTestMain() { + var argv []string + for _, v := range os.Args { + if !strings.HasPrefix(v, "-test.") && v != "-testfixture" { + argv = append(argv, v) + } + } + os.Args = argv + fmt.Printf("testfixture %q\n", os.Args) + testfixture.Main() + panic("unreachable") +} |