From c999041d85474cc050dfc585f36e347c9996eb34 Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Thu, 6 Feb 2025 13:16:24 +0100 Subject: [PATCH 1/2] fix: truncate template files while pulling --- provisionersdk/archive.go | 2 +- provisionersdk/archive_test.go | 78 ++++++++++++++++++++++++++++------ 2 files changed, 66 insertions(+), 14 deletions(-) diff --git a/provisionersdk/archive.go b/provisionersdk/archive.go index 410315c18a238..a069639a1eba6 100644 --- a/provisionersdk/archive.go +++ b/provisionersdk/archive.go @@ -175,7 +175,7 @@ func Untar(directory string, r io.Reader) error { if err != nil { return err } - file, err := os.OpenFile(target, os.O_CREATE|os.O_RDWR, os.FileMode(header.Mode)) + file, err := os.OpenFile(target, os.O_CREATE|os.O_RDWR|os.O_TRUNC, os.FileMode(header.Mode)) if err != nil { return err } diff --git a/provisionersdk/archive_test.go b/provisionersdk/archive_test.go index 7f31fb7730485..d1e5a3763c825 100644 --- a/provisionersdk/archive_test.go +++ b/provisionersdk/archive_test.go @@ -184,18 +184,70 @@ func TestTar(t *testing.T) { func TestUntar(t *testing.T) { t.Parallel() - log := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true}) - dir := t.TempDir() - file, err := os.CreateTemp(dir, "*.tf") - require.NoError(t, err) - _ = file.Close() - archive := new(bytes.Buffer) - err = provisionersdk.Tar(archive, log, dir, 1024) - require.NoError(t, err) - dir = t.TempDir() - err = provisionersdk.Untar(dir, archive) - require.NoError(t, err) - _, err = os.Stat(filepath.Join(dir, filepath.Base(file.Name()))) - require.NoError(t, err) + t.Run("Basic", func(t *testing.T) { + t.Parallel() + + log := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true}) + + dir := t.TempDir() + file, err := os.CreateTemp(dir, "*.tf") + require.NoError(t, err) + _ = file.Close() + + archive := new(bytes.Buffer) + err = provisionersdk.Tar(archive, log, dir, 1024) + require.NoError(t, err) + + dir = t.TempDir() + err = provisionersdk.Untar(dir, archive) + require.NoError(t, err) + + _, err = os.Stat(filepath.Join(dir, filepath.Base(file.Name()))) + require.NoError(t, err) + }) + + t.Run("Overwrite", func(t *testing.T) { + t.Parallel() + + log := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true}) + + dir1 := t.TempDir() + dir2 := t.TempDir() + + // 1. Create directory with .tf file. + file, err := os.CreateTemp(dir1, "*.tf") + require.NoError(t, err) + _ = file.Close() + + err = os.WriteFile(file.Name(), []byte("# ab"), 0600) + require.NoError(t, err) + + archive := new(bytes.Buffer) + + // 2. Build tar archive. + err = provisionersdk.Tar(archive, log, dir1, 4096) + require.NoError(t, err) + + // 3. Untar to the second location. + err = provisionersdk.Untar(dir2, archive) + require.NoError(t, err) + + // 4. Modify the .tf file + err = os.WriteFile(file.Name(), []byte("# c"), 0600) + require.NoError(t, err) + + // 5. Build tar archive with modified .tf file + err = provisionersdk.Tar(archive, log, dir1, 4096) + require.NoError(t, err) + + // 6. Untar to a second location. + err = provisionersdk.Untar(dir2, archive) + require.NoError(t, err) + + // Verify if the file has been fully overwritten + content, err := os.ReadFile(filepath.Join(dir2, filepath.Base(file.Name()))) + require.NoError(t, err) + require.Equal(t, "# c", string(content)) + }) } From 1640e0cb63fd9ac6a712df483d63e31fbc85fcd8 Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Thu, 6 Feb 2025 13:27:23 +0100 Subject: [PATCH 2/2] fmt --- provisionersdk/archive_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/provisionersdk/archive_test.go b/provisionersdk/archive_test.go index d1e5a3763c825..12362275a72b9 100644 --- a/provisionersdk/archive_test.go +++ b/provisionersdk/archive_test.go @@ -220,7 +220,7 @@ func TestUntar(t *testing.T) { require.NoError(t, err) _ = file.Close() - err = os.WriteFile(file.Name(), []byte("# ab"), 0600) + err = os.WriteFile(file.Name(), []byte("# ab"), 0o600) require.NoError(t, err) archive := new(bytes.Buffer) @@ -234,7 +234,7 @@ func TestUntar(t *testing.T) { require.NoError(t, err) // 4. Modify the .tf file - err = os.WriteFile(file.Name(), []byte("# c"), 0600) + err = os.WriteFile(file.Name(), []byte("# c"), 0o600) require.NoError(t, err) // 5. Build tar archive with modified .tf file