mirror of
https://github.com/dolthub/dolt.git
synced 2026-01-26 10:37:04 -06:00
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:
@@ -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
|
||||
|
||||
20
go/libraries/doltcore/env/config.go
vendored
20
go/libraries/doltcore/env/config.go
vendored
@@ -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)
|
||||
}
|
||||
|
||||
55
go/libraries/doltcore/env/config_test.go
vendored
55
go/libraries/doltcore/env/config_test.go
vendored
@@ -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)
|
||||
}
|
||||
|
||||
2
go/libraries/doltcore/env/multi_repo_env.go
vendored
2
go/libraries/doltcore/env/multi_repo_env.go
vendored
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user