diff --git a/config/database_test.go b/config/database_test.go index 0f090e0af1..2793f76d96 100644 --- a/config/database_test.go +++ b/config/database_test.go @@ -611,6 +611,19 @@ func TestDatabaseHasFile(t *testing.T) { require.NoError(t, err) require.True(t, has) }) + + t.Run("has non-existent empty string", func(t *testing.T) { + _, tearDown := setupConfigDatabase(t, minimalConfig, nil) + defer tearDown() + + ds, err := config.NewDatabaseStore(fmt.Sprintf("%s://%s", *mainHelper.Settings.DriverName, *mainHelper.Settings.DataSource)) + require.NoError(t, err) + defer ds.Close() + + has, err := ds.HasFile("") + require.NoError(t, err) + require.False(t, has) + }) } func TestDatabaseRemoveFile(t *testing.T) { diff --git a/config/file.go b/config/file.go index 69aa99d63b..ba134449fb 100644 --- a/config/file.go +++ b/config/file.go @@ -184,6 +184,10 @@ func (fs *FileStore) SetFile(name string, data []byte) error { // HasFile returns true if the given file was previously persisted. func (fs *FileStore) HasFile(name string) (bool, error) { + if name == "" { + return false, nil + } + resolvedPath := filepath.Join(filepath.Dir(fs.path), name) _, err := os.Stat(resolvedPath) diff --git a/config/file_test.go b/config/file_test.go index 4eaf5a2de0..12b9ac619d 100644 --- a/config/file_test.go +++ b/config/file_test.go @@ -688,7 +688,6 @@ func TestFileSetFile(t *testing.T) { } func TestFileHasFile(t *testing.T) { - t.Run("has non-existent", func(t *testing.T) { path, tearDown := setupConfigFile(t, minimalConfig) defer tearDown() @@ -740,6 +739,19 @@ func TestFileHasFile(t *testing.T) { require.NoError(t, err) require.True(t, has) }) + + t.Run("has empty string", func(t *testing.T) { + path, tearDown := setupConfigFile(t, minimalConfig) + defer tearDown() + + fs, err := config.NewFileStore(path, true) + require.NoError(t, err) + defer fs.Close() + + has, err := fs.HasFile("") + require.NoError(t, err) + require.False(t, has) + }) } func TestFileRemoveFile(t *testing.T) {