| 182 | } |
| 183 | |
| 184 | func TestUntar(t *testing.T) { |
| 185 | t.Parallel() |
| 186 | |
| 187 | t.Run("Basic", func(t *testing.T) { |
| 188 | t.Parallel() |
| 189 | |
| 190 | log := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true}) |
| 191 | |
| 192 | dir := t.TempDir() |
| 193 | file, err := os.CreateTemp(dir, "*.tf") |
| 194 | require.NoError(t, err) |
| 195 | _ = file.Close() |
| 196 | |
| 197 | archive := new(bytes.Buffer) |
| 198 | err = provisionersdk.Tar(archive, log, dir, 1024) |
| 199 | require.NoError(t, err) |
| 200 | |
| 201 | dir = t.TempDir() |
| 202 | err = provisionersdk.Untar(dir, archive) |
| 203 | require.NoError(t, err) |
| 204 | |
| 205 | _, err = os.Stat(filepath.Join(dir, filepath.Base(file.Name()))) |
| 206 | require.NoError(t, err) |
| 207 | }) |
| 208 | |
| 209 | t.Run("Overwrite", func(t *testing.T) { |
| 210 | t.Parallel() |
| 211 | |
| 212 | log := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true}) |
| 213 | |
| 214 | dir1 := t.TempDir() |
| 215 | dir2 := t.TempDir() |
| 216 | |
| 217 | // 1. Create directory with .tf file. |
| 218 | file, err := os.CreateTemp(dir1, "*.tf") |
| 219 | require.NoError(t, err) |
| 220 | _ = file.Close() |
| 221 | |
| 222 | err = os.WriteFile(file.Name(), []byte("# ab"), 0o600) |
| 223 | require.NoError(t, err) |
| 224 | |
| 225 | archive := new(bytes.Buffer) |
| 226 | |
| 227 | // 2. Build tar archive. |
| 228 | err = provisionersdk.Tar(archive, log, dir1, 4096) |
| 229 | require.NoError(t, err) |
| 230 | |
| 231 | // 3. Untar to the second location. |
| 232 | err = provisionersdk.Untar(dir2, archive) |
| 233 | require.NoError(t, err) |
| 234 | |
| 235 | // 4. Modify the .tf file |
| 236 | err = os.WriteFile(file.Name(), []byte("# c"), 0o600) |
| 237 | require.NoError(t, err) |
| 238 | |
| 239 | // 5. Build tar archive with modified .tf file |
| 240 | err = provisionersdk.Tar(archive, log, dir1, 4096) |
| 241 | require.NoError(t, err) |