diff --git a/drivers/drivers_test.go b/drivers/drivers_test.go index 3cd807ddb4d..ead41f786ee 100644 --- a/drivers/drivers_test.go +++ b/drivers/drivers_test.go @@ -116,7 +116,8 @@ var ( DockerPort: "8080/tcp", }, "csvq": { - DSN: "csvq://" + os.TempDir(), + // go test sets working directory to current package regardless of initial working directory + DSN: "csvq://./testdata/csvq", }, } cleanup bool @@ -147,31 +148,7 @@ func TestMain(m *testing.M) { } for dbName, db := range dbs { - dsn := db.DSN - var hostPort string - if db.RunOptions != nil { - var ok bool - db.Resource, ok = pool.ContainerByName(db.RunOptions.Name) - if ok && !db.Resource.Container.State.Running { - err = db.Resource.Close() - if err != nil { - log.Fatalf("Could clean up stale container %s: %s", dbName, err) - } - ok = false - } - if !ok { - buildOpts := &dt.BuildOptions{ - ContextDir: "./testdata/docker", - BuildArgs: db.BuildArgs, - } - db.Resource, err = pool.BuildAndRunWithBuildOptions(buildOpts, db.RunOptions) - if err != nil { - log.Fatalf("Could not start %s: %s", dbName, err) - } - } - hostPort = db.Resource.GetPort(db.DockerPort) - dsn = fmt.Sprintf(db.DSN, hostPort) - } + dsn, hostPort := getConnInfo(dbName, db, pool) db.URL, err = dburl.Parse(dsn) if err != nil { log.Fatalf("Failed to parse %s URL %s: %v", dbName, db.DSN, err) @@ -234,6 +211,35 @@ func TestMain(m *testing.M) { os.Exit(code) } +func getConnInfo(dbName string, db *Database, pool *dt.Pool) (string, string) { + if db.RunOptions == nil { + return db.DSN, "" + } + + var ok bool + db.Resource, ok = pool.ContainerByName(db.RunOptions.Name) + if ok && !db.Resource.Container.State.Running { + err := db.Resource.Close() + if err != nil { + log.Fatalf("Failed to clean up stale container %s: %s", dbName, err) + } + ok = false + } + if !ok { + buildOpts := &dt.BuildOptions{ + ContextDir: "./testdata/docker", + BuildArgs: db.BuildArgs, + } + var err error + db.Resource, err = pool.BuildAndRunWithBuildOptions(buildOpts, db.RunOptions) + if err != nil { + log.Fatalf("Failed to start %s: %s", dbName, err) + } + } + hostPort := db.Resource.GetPort(db.DockerPort) + return fmt.Sprintf(db.DSN, hostPort), hostPort +} + func TestWriter(t *testing.T) { type testFunc struct { label string @@ -490,18 +496,7 @@ func TestCopy(t *testing.T) { { dbName: "csvq", setupQueries: []setupQuery{ - {query: "DROP TABLE IF EXISTS staff_copy"}, - {query: ` -CREATE TABLE IF NOT EXISTS staff_copy ( - first_name, - last_name, - address_id, - email, - store_id, - active, - username, - password, - last_update);`, check: true}, + {query: "CREATE TABLE IF NOT EXISTS staff_copy AS SELECT * FROM `staff.csv` WHERE 0=1", check: true}, }, src: "select first_name, last_name, address_id, email, store_id, active, username, password, last_update from staff", dest: "staff_copy", diff --git a/drivers/testdata/csvq/.gitignore b/drivers/testdata/csvq/.gitignore new file mode 100644 index 00000000000..8ad2a688ce3 --- /dev/null +++ b/drivers/testdata/csvq/.gitignore @@ -0,0 +1 @@ +*_copy diff --git a/drivers/testdata/csvq/staff.csv b/drivers/testdata/csvq/staff.csv new file mode 100644 index 00000000000..454999dfe7e --- /dev/null +++ b/drivers/testdata/csvq/staff.csv @@ -0,0 +1,2 @@ +first_name,last_name,address_id,email,store_id,active,username,password,last_update +John,Doe,1,john@invalid.com,1,true,jdoe,abc,2024-05-10T08:12:05.46875Z