Fix the dolt harness for sqllogictest to correctly reinitialize the dolt repo for each file. This was previously unnecessary because we were not persisting the working set on commit and had autocommit disabled

This commit is contained in:
Zach Musgrave
2021-06-09 16:06:18 -07:00
parent bcafd4b548
commit 35dcc9fe13
2 changed files with 43 additions and 23 deletions
@@ -21,7 +21,9 @@ import (
"math/rand"
"strconv"
"strings"
"time"
"github.com/dolthub/dolt/go/store/types"
sqle "github.com/dolthub/go-mysql-server"
"github.com/dolthub/go-mysql-server/sql"
"github.com/dolthub/sqllogictest/go/logictest"
@@ -38,6 +40,11 @@ import (
var _ logictest.Harness = &DoltHarness{}
const (
name = "sqllogictest runner"
email = "sqllogictestrunner@dolthub.com"
)
type DoltHarness struct {
Version string
engine *sqle.Engine
@@ -53,10 +60,6 @@ func (h *DoltHarness) EngineStr() string {
func (h *DoltHarness) Init() error {
dEnv := env.Load(context.Background(), env.GetCurrentUserHomeDir, filesys.LocalFS, doltdb.LocalDirDoltDB, "test")
if !dEnv.HasDoltDir() {
panic("Current directory must be a valid dolt repository")
}
return innerInit(h, dEnv)
}
@@ -116,6 +119,18 @@ func (h *DoltHarness) ExecuteQuery(statement string) (schema string, results []s
}
func innerInit(h *DoltHarness, dEnv *env.DoltEnv) error {
if !dEnv.HasDoltDir() {
err := dEnv.InitRepoWithTime(context.Background(), types.Format_Default, name, email, time.Now())
if err != nil {
return err
}
} else {
err := dEnv.InitDBAndRepoState(context.Background(), types.Format_Default, name, email, time.Now())
if err != nil {
return err
}
}
var err error
h.engine, err = sqlNewEngine(dEnv)
@@ -16,6 +16,7 @@ package dolt
import (
"context"
"fmt"
"path/filepath"
"testing"
@@ -97,26 +98,30 @@ func TestDoltHarness(t *testing.T) {
},
}
t.Run("should execute simple sql queries against Dolt", func(t *testing.T) {
h := &DoltHarness{}
fs := filesys.NewInMemFS([]string{}, nil, tmp)
dEnv := createTestEnvWithFS(fs, wd)
fs := filesys.NewInMemFS([]string{}, nil, tmp)
dEnv := createTestEnvWithFS(fs, wd)
err := innerInit(h, dEnv)
assert.Equal(t, nil, err)
// We run this several times in a row to make sure that the same dolt env can be used in multiple setup / teardown
// cycles
for i := 0; i < 10; i++ {
t.Run(fmt.Sprintf("dolt harness runner %d", i), func(t *testing.T) {
h := &DoltHarness{}
err := innerInit(h, dEnv)
assert.Equal(t, nil, err)
// setup repo with statements
for _, test := range statementTests {
err = h.ExecuteStatement(test.statement)
assert.Equal(t, test.expErr, err)
}
// setup repo with statements
for _, test := range statementTests {
err = h.ExecuteStatement(test.statement)
assert.Equal(t, test.expErr, err)
}
// test queries
for _, test := range queryTests {
schema, results, err := h.ExecuteQuery(test.query)
assert.Equal(t, test.expErr, err)
assert.Equal(t, test.expSchema, schema)
assert.Equal(t, test.expResults, results)
}
})
// test queries
for _, test := range queryTests {
schema, results, err := h.ExecuteQuery(test.query)
assert.Equal(t, test.expErr, err)
assert.Equal(t, test.expSchema, schema)
assert.Equal(t, test.expResults, results)
}
})
}
}