More tests of config, and made it so that SQL envs with no local config write updates to global config

This commit is contained in:
Zach Musgrave
2021-11-09 13:16:13 -08:00
parent 9873a81b54
commit b3eaff2ec1
5 changed files with 103 additions and 9 deletions

View File

@@ -1500,7 +1500,6 @@ func newSqlEngine(
dbStates = append(dbStates, dbState)
}
// TODO: not having user and email for this command should probably be an error or warning, it disables certain functionality
sess, err := dsess.NewDoltSession(sql.NewEmptyContext(), sql.NewBaseSession(), pro, config, dbStates...)
if err != nil {
return nil, err

View File

@@ -229,7 +229,7 @@ type writeableLocalDoltCliConfig struct {
}
// WriteableConfig returns a ReadWriteConfig reading from this config hierarchy. The config will read from the hierarchy
// and write to the local config.
// and write to the local config if it's available, or the global config otherwise.
func (dcc *DoltCliConfig) WriteableConfig() config.ReadWriteConfig {
return writeableLocalDoltCliConfig{dcc}
}
@@ -260,19 +260,25 @@ var DefaultFailsafeConfig = map[string]string{
}
func (w writeableLocalDoltCliConfig) SetStrings(updates map[string]string) error {
localCfg, ok := w.GetConfig(LocalConfig)
cfg, ok := w.GetConfig(LocalConfig)
if !ok {
return errors.New("no local config found")
cfg, ok = w.GetConfig(GlobalConfig)
if !ok {
return errors.New("no local or global config found")
}
}
return localCfg.SetStrings(updates)
return cfg.SetStrings(updates)
}
func (w writeableLocalDoltCliConfig) Unset(params []string) error {
localCfg, ok := w.GetConfig(LocalConfig)
cfg, ok := w.GetConfig(LocalConfig)
if !ok {
return errors.New("no local config found")
cfg, ok = w.GetConfig(GlobalConfig)
if !ok {
return errors.New("no local or global config found")
}
}
return localCfg.Unset(params)
return cfg.Unset(params)
}

View File

@@ -67,3 +67,58 @@ func TestFailsafes(t *testing.T) {
assert.Equal(t, DefaultName, dEnv.Config.GetStringOrDefault(UserNameKey, "none"))
assert.Equal(t, "def", dEnv.Config.GetStringOrDefault("abc", "none"))
}
func TestWritableDoltConfig(t *testing.T) {
dEnv, _ := createTestEnv(true, true)
localName := "Willy"
gCfg, _ := dEnv.Config.GetConfig(GlobalConfig)
lCfg, _ := dEnv.Config.GetConfig(LocalConfig)
require.NoError(t, gCfg.SetStrings(map[string]string{UserNameKey: name}))
require.NoError(t, lCfg.SetStrings(map[string]string{UserNameKey: localName}))
cfg := dEnv.Config.WriteableConfig()
assert.Equal(t, localName, cfg.GetStringOrDefault(UserNameKey, "none"))
require.NoError(t, cfg.SetStrings(map[string]string{"test": "abc"}))
require.NoError(t, cfg.Unset([]string{UserNameKey}))
assert.Equal(t, name, cfg.GetStringOrDefault(UserNameKey, "none"))
assert.Equal(t, "abc", cfg.GetStringOrDefault("test", "none"))
_, err := lCfg.GetString(UserNameKey)
assert.Equal(t, config.ErrConfigParamNotFound, err)
assert.Equal(t, name, gCfg.GetStringOrDefault(UserNameKey, "none"))
_, err = gCfg.GetString("test")
assert.Equal(t, config.ErrConfigParamNotFound, err)
}
func TestWritableDoltConfigNoLocal(t *testing.T) {
dEnv, _ := createTestEnv(true, false)
newName := "Willy"
gCfg, _ := dEnv.Config.GetConfig(GlobalConfig)
require.NoError(t, gCfg.SetStrings(map[string]string{UserNameKey: name, "test": "abc"}))
cfg := dEnv.Config.WriteableConfig()
assert.Equal(t, name, cfg.GetStringOrDefault(UserNameKey, "none"))
assert.Equal(t, "abc", cfg.GetStringOrDefault("test", "none"))
require.NoError(t, cfg.SetStrings(map[string]string{UserNameKey: newName}))
require.NoError(t, cfg.Unset([]string{"test"}))
assert.Equal(t, newName, cfg.GetStringOrDefault(UserNameKey, "none"))
_, err := cfg.GetString("test")
assert.Equal(t, config.ErrConfigParamNotFound, err)
assert.Equal(t, newName, gCfg.GetStringOrDefault(UserNameKey, "none"))
_, err = gCfg.GetString("test")
assert.Equal(t, config.ErrConfigParamNotFound, err)
}

View File

@@ -161,7 +161,7 @@ func getRepoRootDir(path, pathSeparator string) string {
// directory at the root of the filesystem and returns that.
func DoltEnvAsMultiEnv(ctx context.Context, dEnv *DoltEnv) (*MultiRepoEnv, error) {
if !dEnv.Valid() {
cfg, _ := dEnv.Config.GetConfig(GlobalConfig)
cfg := dEnv.Config.WriteableConfig()
return MultiEnvForDirectory(ctx, cfg, dEnv.FS, dEnv.Version)
}

View File

@@ -1,5 +1,6 @@
#!/usr/bin/env bats
load $BATS_TEST_DIRNAME/helper/common.bash
load $BATS_TEST_DIRNAME/helper/query-server-common.bash
setup() {
setup_no_dolt_init
@@ -11,6 +12,7 @@ setup() {
teardown() {
teardown_common
rm -rf "$BATS_TMPDIR/config-test$$"
stop_sql_server
}
@test "config: make sure no dolt configuration for simulated fresh user" {
@@ -165,6 +167,38 @@ teardown() {
[[ "$output" =~ "$regex" ]] || false
}
@test "config: SQL can create databases with no user and email set" {
dolt sql -b -q "
CREATE DATABASE testdb;
use testdb;
CREATE TABLE test (pk int primary key, c1 varchar(1));"
[ -d "testdb" ]
cd testdb
run dolt log
[ "$status" -eq 0 ]
regex='Dolt System Account <doltuser@dolthub.com>'
[[ "$output" =~ "$regex" ]] || false
}
@test "config: sql server can create databases with no user and email set" {
skiponwindows "This test has dependencies missing on windows installations"
start_sql_server
server_query "" 1 "create database testdb"
server_query "" 1 "show databases" "Database\ninformation_schema\ntestdb"
server_query "testdb" 1 "create table a(x int)"
server_query "testdb" 1 "insert into a values (1), (2)"
[ -d "testdb" ]
cd testdb
run dolt log
[ "$status" -eq 0 ]
regex='Dolt System Account <doltuser@dolthub.com>'
[[ "$output" =~ "$regex" ]] || false
}
@test "config: COMMIT correctly errors when user.name or user.email is unset." {
dolt config --global --add user.name "bats tester"
dolt config --global --add user.email "joshn@doe.com"