mirror of
https://github.com/dolthub/dolt.git
synced 2026-01-06 00:39:40 -06:00
integration-tests/go-sql-server-driver: Move Server definitions to TestRepo/MultiRepo, instead of a separate top-level field.
This commit is contained in:
@@ -170,6 +170,7 @@ type SqlServer struct {
|
||||
Cmd *exec.Cmd
|
||||
Port int
|
||||
Output *bytes.Buffer
|
||||
DBName string
|
||||
RecreateCmd func(args ...string) *exec.Cmd
|
||||
}
|
||||
|
||||
@@ -276,8 +277,8 @@ func (s *SqlServer) Restart(newargs *[]string) error {
|
||||
return s.Cmd.Start()
|
||||
}
|
||||
|
||||
func (s *SqlServer) DB(dbname string) (*sql.DB, error) {
|
||||
db, err := sql.Open("mysql", fmt.Sprintf("root@tcp(127.0.0.1:%d)/%s", s.Port, dbname))
|
||||
func (s *SqlServer) DB() (*sql.DB, error) {
|
||||
db, err := sql.Open("mysql", fmt.Sprintf("root@tcp(127.0.0.1:%d)/%s", s.Port, s.DBName))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -31,13 +31,13 @@ type TestDef struct {
|
||||
Tests []Test `yaml:"tests"`
|
||||
}
|
||||
|
||||
// Test is a single test to run, with steup in the form of |Repos|,
|
||||
// |MultiRepos| and |Servers|, and assertions in the form of |Conns|.
|
||||
// Test is a single test to run. The Repos and MultiRepos will be created, and
|
||||
// any Servers defined within them will be started. The interactions and
|
||||
// assertions defined in Conns will be run.
|
||||
type Test struct {
|
||||
Name string `yaml:"name"`
|
||||
Repos []TestRepo `yaml:"repos"`
|
||||
MultiRepos []MultiRepo `yaml:"multi_repos"`
|
||||
Servers []Server `yaml:"servers"`
|
||||
Conns []Connection `yaml:"connections"`
|
||||
}
|
||||
|
||||
@@ -67,6 +67,11 @@ type TestRepo struct {
|
||||
Name string `yaml:"name"`
|
||||
WithFiles []WithFile `yaml:"with_files"`
|
||||
WithRemotes []WithRemote `yaml:"with_remotes"`
|
||||
|
||||
// Only valid on Test.Repos, not in Test.MultiRepos.Repos. If set, a
|
||||
// sql-server process will be run against this TestRepo. It will be
|
||||
// available as TestRepo.Name.
|
||||
Server *Server `yaml:"server"`
|
||||
}
|
||||
|
||||
// |MultiRepo| is a subdirectory where many |TestRepo|s can be defined. You can
|
||||
@@ -76,6 +81,10 @@ type MultiRepo struct {
|
||||
Name string `yaml:"name"`
|
||||
Repos []TestRepo `yaml:"repos"`
|
||||
WithFiles []WithFile `yaml:"with_files"`
|
||||
|
||||
// If set, a sql-server process will be run against this TestRepo. It
|
||||
// will be available as MultiRepo.Name.
|
||||
Server *Server `yaml:"server"`
|
||||
}
|
||||
|
||||
// |WithRemote| defines remotes which should be defined on the repository
|
||||
@@ -173,6 +182,36 @@ func MakeRepo(t *testing.T, rs RepoStore, r TestRepo) Repo {
|
||||
return repo
|
||||
}
|
||||
|
||||
func MakeServer(t *testing.T, dc DoltCmdable, s *Server) (*SqlServer, func()) {
|
||||
if s == nil {
|
||||
return nil, nil
|
||||
}
|
||||
opts := []SqlServerOpt{WithArgs(s.Args...)}
|
||||
if s.Port != 0 {
|
||||
opts = append(opts, WithPort(s.Port))
|
||||
}
|
||||
server, err := StartSqlServer(dc, opts...)
|
||||
require.NoError(t, err)
|
||||
if len(s.ErrorMatches) > 0 {
|
||||
err := server.ErrorStop()
|
||||
require.Error(t, err)
|
||||
output := string(server.Output.Bytes())
|
||||
for _, a := range s.ErrorMatches {
|
||||
require.Regexp(t, a, output)
|
||||
}
|
||||
return nil, nil
|
||||
} else {
|
||||
return server, func() {
|
||||
err := server.GracefulStop()
|
||||
require.NoError(t, err)
|
||||
output := string(server.Output.Bytes())
|
||||
for _, a := range s.LogMatches {
|
||||
require.Regexp(t, a, output)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func RunTestsFile(t *testing.T, path string) {
|
||||
def, err := ParseTestsFile(path)
|
||||
require.NoError(t, err)
|
||||
@@ -182,9 +221,19 @@ func RunTestsFile(t *testing.T, path string) {
|
||||
require.NoError(t, err)
|
||||
rs, err := u.MakeRepoStore()
|
||||
require.NoError(t, err)
|
||||
|
||||
doltlocs := make(map[string]DoltCmdable)
|
||||
servers := make(map[string]*SqlServer)
|
||||
for _, r := range test.Repos {
|
||||
doltlocs[r.Name] = MakeRepo(t, rs, r)
|
||||
repo := MakeRepo(t, rs, r)
|
||||
doltlocs[r.Name] = repo
|
||||
|
||||
server, close := MakeServer(t, repo, r.Server)
|
||||
if server != nil {
|
||||
server.DBName = r.Name
|
||||
servers[r.Name] = server
|
||||
defer close()
|
||||
}
|
||||
}
|
||||
for _, mr := range test.MultiRepos {
|
||||
// Each MultiRepo gets its own dolt config --global.
|
||||
@@ -199,53 +248,26 @@ func RunTestsFile(t *testing.T, path string) {
|
||||
require.NoError(t, rs.WriteFile(f.Name, f.Contents))
|
||||
}
|
||||
doltlocs[mr.Name] = rs
|
||||
}
|
||||
servers := make(map[string]*SqlServer)
|
||||
for _, sl := range test.Servers {
|
||||
s := sl
|
||||
var server *SqlServer
|
||||
opts := []SqlServerOpt{WithArgs(s.Args...)}
|
||||
if sl.Port != 0 {
|
||||
opts = append(opts, WithPort(sl.Port))
|
||||
}
|
||||
server, err = StartSqlServer(doltlocs[s.Name], opts...)
|
||||
require.NoError(t, err)
|
||||
if len(s.ErrorMatches) > 0 {
|
||||
err := server.ErrorStop()
|
||||
require.Error(t, err)
|
||||
output := string(server.Output.Bytes())
|
||||
for _, a := range s.ErrorMatches {
|
||||
require.Regexp(t, a, output)
|
||||
}
|
||||
} else {
|
||||
servers[s.Name] = server
|
||||
defer func() {
|
||||
err := server.GracefulStop()
|
||||
require.NoError(t, err)
|
||||
output := string(server.Output.Bytes())
|
||||
for _, a := range s.LogMatches {
|
||||
require.Regexp(t, a, output)
|
||||
}
|
||||
}()
|
||||
|
||||
server, close := MakeServer(t, rs, mr.Server)
|
||||
if server != nil {
|
||||
servers[mr.Name] = server
|
||||
defer close()
|
||||
}
|
||||
}
|
||||
|
||||
dbs := make(map[string]*sql.DB)
|
||||
defer func() {
|
||||
for _, db := range dbs {
|
||||
db.Close()
|
||||
}
|
||||
}()
|
||||
for nl, s := range servers {
|
||||
n := nl
|
||||
dbname := n
|
||||
_, ismultirepo := doltlocs[n].(RepoStore)
|
||||
if ismultirepo {
|
||||
dbname = ""
|
||||
}
|
||||
db, err := s.DB(dbname)
|
||||
for n, s := range servers {
|
||||
db, err := s.DB()
|
||||
require.NoError(t, err)
|
||||
dbs[n] = db
|
||||
}
|
||||
|
||||
for i, c := range test.Conns {
|
||||
db := dbs[c.On]
|
||||
require.NotNilf(t, db, "error in test spec: could not find database %s for connection %d", c.On, i)
|
||||
@@ -268,12 +290,7 @@ func RunTestsFile(t *testing.T, path string) {
|
||||
require.NotNilf(t, s, "error in test spec: could not find server %s for connection %d", c.On, i)
|
||||
err := s.Restart(c.RestartServer.Args)
|
||||
require.NoError(t, err)
|
||||
dbname := c.On
|
||||
_, ismultirepo := doltlocs[c.On].(RepoStore)
|
||||
if ismultirepo {
|
||||
dbname = ""
|
||||
}
|
||||
db, err := s.DB(dbname)
|
||||
db, err := s.DB()
|
||||
require.NoError(t, err)
|
||||
dbs[c.On] = db
|
||||
}
|
||||
|
||||
@@ -40,10 +40,9 @@ tests:
|
||||
bootstrap_epoch: 15
|
||||
remotesapi:
|
||||
port: 50051
|
||||
servers:
|
||||
- name: server1
|
||||
args: ["--config", "standby_server.yaml"]
|
||||
port: 3309
|
||||
server:
|
||||
args: ["--config", "standby_server.yaml"]
|
||||
port: 3309
|
||||
connections:
|
||||
- on: server1
|
||||
queries:
|
||||
@@ -95,10 +94,9 @@ tests:
|
||||
bootstrap_epoch: 10
|
||||
remotesapi:
|
||||
port: 50051
|
||||
servers:
|
||||
- name: server1
|
||||
args: ["--config", "server.yaml"]
|
||||
port: 3309
|
||||
server:
|
||||
args: ["--config", "server.yaml"]
|
||||
port: 3309
|
||||
connections:
|
||||
- on: server1
|
||||
queries:
|
||||
@@ -173,10 +171,9 @@ tests:
|
||||
bootstrap_epoch: 10
|
||||
remotesapi:
|
||||
port: 50051
|
||||
servers:
|
||||
- name: server1
|
||||
args: ["--config", "server.yaml"]
|
||||
port: 3309
|
||||
server:
|
||||
args: ["--config", "server.yaml"]
|
||||
port: 3309
|
||||
connections:
|
||||
- on: server1
|
||||
queries:
|
||||
@@ -211,12 +208,11 @@ tests:
|
||||
bootstrap_epoch: 10
|
||||
remotesapi:
|
||||
port: 50051
|
||||
servers:
|
||||
- name: server1
|
||||
args: ["--config", "server.yaml"]
|
||||
port: 3309
|
||||
error_matches:
|
||||
- destination remote standby does not exist
|
||||
server:
|
||||
args: ["--config", "server.yaml"]
|
||||
port: 3309
|
||||
error_matches:
|
||||
- destination remote standby does not exist
|
||||
- name: primary comes up and replicates to standby
|
||||
multi_repos:
|
||||
- name: server1
|
||||
@@ -244,6 +240,9 @@ tests:
|
||||
bootstrap_epoch: 10
|
||||
remotesapi:
|
||||
port: 50051
|
||||
server:
|
||||
args: ["--port", "3309"]
|
||||
port: 3309
|
||||
- name: server2
|
||||
repos:
|
||||
- name: repo1
|
||||
@@ -269,13 +268,9 @@ tests:
|
||||
bootstrap_epoch: 10
|
||||
remotesapi:
|
||||
port: 50052
|
||||
servers:
|
||||
- name: server1
|
||||
args: ["--port", "3309"]
|
||||
port: 3309
|
||||
- name: server2
|
||||
args: ["--config", "server.yaml"]
|
||||
port: 3310
|
||||
server:
|
||||
args: ["--config", "server.yaml"]
|
||||
port: 3310
|
||||
connections:
|
||||
- on: server1
|
||||
queries:
|
||||
|
||||
@@ -6,9 +6,8 @@ tests:
|
||||
- name: ".dolt/config.json"
|
||||
contents: |
|
||||
{"sqlserver.global.max_connections":"1000"}
|
||||
servers:
|
||||
- name: repo1
|
||||
args: ["-l", "trace"]
|
||||
server:
|
||||
args: ["-l", "trace"]
|
||||
connections:
|
||||
- on: repo1
|
||||
queries:
|
||||
@@ -23,11 +22,10 @@ tests:
|
||||
- name: ".dolt/config.json"
|
||||
contents: |
|
||||
{"sqlserver.global.unknown":"1000"}
|
||||
servers:
|
||||
- name: repo1
|
||||
args: ["-l", "trace"]
|
||||
log_matches:
|
||||
- "warning: persisted system variable unknown was not loaded since its definition does not exist."
|
||||
server:
|
||||
args: ["-l", "trace"]
|
||||
log_matches:
|
||||
- "warning: persisted system variable unknown was not loaded since its definition does not exist."
|
||||
- name: invalid persisted global variable value throws warning on server startup, but does not crash
|
||||
repos:
|
||||
- name: repo1
|
||||
@@ -35,16 +33,14 @@ tests:
|
||||
- name: ".dolt/config.json"
|
||||
contents: |
|
||||
{"sqlserver.global.max_connections":"string"}
|
||||
servers:
|
||||
- name: repo1
|
||||
log_matches:
|
||||
- "error: failed to load persisted global variables: key: 'max_connections'; strconv.ParseInt: parsing \"string\": invalid syntax"
|
||||
server:
|
||||
log_matches:
|
||||
- "error: failed to load persisted global variables: key: 'max_connections'; strconv.ParseInt: parsing \"string\": invalid syntax"
|
||||
- name: persisted global variable in server
|
||||
repos:
|
||||
- name: repo1
|
||||
servers:
|
||||
- name: repo1
|
||||
args: ["-l", "trace"]
|
||||
server:
|
||||
args: ["-l", "trace"]
|
||||
connections:
|
||||
- on: repo1
|
||||
queries:
|
||||
@@ -63,9 +59,8 @@ tests:
|
||||
- name: dolt_replicate_heads is global variable
|
||||
repos:
|
||||
- name: repo1
|
||||
servers:
|
||||
- name: repo1
|
||||
args: ["-l", "trace"]
|
||||
server:
|
||||
args: ["-l", "trace"]
|
||||
connections:
|
||||
- on: repo1
|
||||
queries:
|
||||
@@ -92,9 +87,8 @@ tests:
|
||||
- name: dolt_replicate_all_heads is global variable
|
||||
repos:
|
||||
- name: repo1
|
||||
servers:
|
||||
- name: repo1
|
||||
args: ["-l", "trace"]
|
||||
server:
|
||||
args: ["-l", "trace"]
|
||||
connections:
|
||||
- on: repo1
|
||||
queries:
|
||||
@@ -121,9 +115,8 @@ tests:
|
||||
- name: dolt_transaction_commit is global variable
|
||||
repos:
|
||||
- name: repo1
|
||||
servers:
|
||||
- name: repo1
|
||||
args: ["-l", "trace"]
|
||||
server:
|
||||
args: ["-l", "trace"]
|
||||
connections:
|
||||
- on: repo1
|
||||
queries:
|
||||
@@ -159,9 +152,8 @@ tests:
|
||||
- name: persist only global variable during server session
|
||||
repos:
|
||||
- name: repo1
|
||||
servers:
|
||||
- name: repo1
|
||||
args: ["-l", "trace"]
|
||||
server:
|
||||
args: ["-l", "trace"]
|
||||
connections:
|
||||
- on: repo1
|
||||
queries:
|
||||
@@ -181,9 +173,8 @@ tests:
|
||||
- name: persist invalid global variable name during server session
|
||||
repos:
|
||||
- name: repo1
|
||||
servers:
|
||||
- name: repo1
|
||||
args: ["-l", "trace"]
|
||||
server:
|
||||
args: ["-l", "trace"]
|
||||
connections:
|
||||
- on: repo1
|
||||
queries:
|
||||
@@ -192,8 +183,7 @@ tests:
|
||||
- name: persist invalid global variable value during server session
|
||||
repos:
|
||||
- name: repo1
|
||||
servers:
|
||||
- name: repo1
|
||||
server: {}
|
||||
connections:
|
||||
- on: repo1
|
||||
queries:
|
||||
@@ -208,9 +198,8 @@ tests:
|
||||
log_level: trace
|
||||
listener:
|
||||
max_connections: 999
|
||||
servers:
|
||||
- name: repo1
|
||||
args: ["--config", "server.yaml"]
|
||||
server:
|
||||
args: ["--config", "server.yaml"]
|
||||
connections:
|
||||
- on: repo1
|
||||
queries:
|
||||
@@ -221,9 +210,8 @@ tests:
|
||||
- name: persistence behavior set to load
|
||||
repos:
|
||||
- name: repo1
|
||||
servers:
|
||||
- name: repo1
|
||||
args: ["--persistence-behavior", "load"]
|
||||
server:
|
||||
args: ["--persistence-behavior", "load"]
|
||||
connections:
|
||||
- on: repo1
|
||||
queries:
|
||||
@@ -234,9 +222,8 @@ tests:
|
||||
- name: persistence behavior set to ignore
|
||||
repos:
|
||||
- name: repo1
|
||||
servers:
|
||||
- name: repo1
|
||||
args: ["--persistence-behavior", "ignore"]
|
||||
server:
|
||||
args: ["--persistence-behavior", "ignore"]
|
||||
connections:
|
||||
- on: repo1
|
||||
queries:
|
||||
@@ -247,9 +234,8 @@ tests:
|
||||
- name: persisted global variable defined on the command line
|
||||
repos:
|
||||
- name: repo1
|
||||
servers:
|
||||
- name: repo1
|
||||
args: ["--max-connections", "555"]
|
||||
server:
|
||||
args: ["--max-connections", "555"]
|
||||
connections:
|
||||
- on: repo1
|
||||
queries:
|
||||
@@ -264,9 +250,8 @@ tests:
|
||||
- name: ".dolt/config.json"
|
||||
contents: |
|
||||
{"sqlserver.global.max_connections":"999"}
|
||||
servers:
|
||||
- name: repo1
|
||||
args: ["--persistence-behavior", "ignore"]
|
||||
server:
|
||||
args: ["--persistence-behavior", "ignore"]
|
||||
connections:
|
||||
- on: repo1
|
||||
queries:
|
||||
@@ -277,9 +262,8 @@ tests:
|
||||
- name: persisted global variable defined on the command line with persistence ignored
|
||||
repos:
|
||||
- name: repo1
|
||||
servers:
|
||||
- name: repo1
|
||||
args: ["--max-connections", "555", "--persistence-behavior", "ignore"]
|
||||
server:
|
||||
args: ["--max-connections", "555", "--persistence-behavior", "ignore"]
|
||||
connections:
|
||||
- on: repo1
|
||||
queries:
|
||||
|
||||
Reference in New Issue
Block a user