@@ -184,18 +184,70 @@ func TestTar(t *testing.T) {
184
184
185
185
func TestUntar (t * testing.T ) {
186
186
t .Parallel ()
187
- log := slogtest .Make (t , & slogtest.Options {IgnoreErrors : true })
188
187
189
- dir := t .TempDir ()
190
- file , err := os .CreateTemp (dir , "*.tf" )
191
- require .NoError (t , err )
192
- _ = file .Close ()
193
- archive := new (bytes.Buffer )
194
- err = provisionersdk .Tar (archive , log , dir , 1024 )
195
- require .NoError (t , err )
196
- dir = t .TempDir ()
197
- err = provisionersdk .Untar (dir , archive )
198
- require .NoError (t , err )
199
- _ , err = os .Stat (filepath .Join (dir , filepath .Base (file .Name ())))
200
- require .NoError (t , err )
188
+ t .Run ("Basic" , func (t * testing.T ) {
189
+ t .Parallel ()
190
+
191
+ log := slogtest .Make (t , & slogtest.Options {IgnoreErrors : true })
192
+
193
+ dir := t .TempDir ()
194
+ file , err := os .CreateTemp (dir , "*.tf" )
195
+ require .NoError (t , err )
196
+ _ = file .Close ()
197
+
198
+ archive := new (bytes.Buffer )
199
+ err = provisionersdk .Tar (archive , log , dir , 1024 )
200
+ require .NoError (t , err )
201
+
202
+ dir = t .TempDir ()
203
+ err = provisionersdk .Untar (dir , archive )
204
+ require .NoError (t , err )
205
+
206
+ _ , err = os .Stat (filepath .Join (dir , filepath .Base (file .Name ())))
207
+ require .NoError (t , err )
208
+ })
209
+
210
+ t .Run ("Overwrite" , func (t * testing.T ) {
211
+ t .Parallel ()
212
+
213
+ log := slogtest .Make (t , & slogtest.Options {IgnoreErrors : true })
214
+
215
+ dir1 := t .TempDir ()
216
+ dir2 := t .TempDir ()
217
+
218
+ // 1. Create directory with .tf file.
219
+ file , err := os .CreateTemp (dir1 , "*.tf" )
220
+ require .NoError (t , err )
221
+ _ = file .Close ()
222
+
223
+ err = os .WriteFile (file .Name (), []byte ("# ab" ), 0o600 )
224
+ require .NoError (t , err )
225
+
226
+ archive := new (bytes.Buffer )
227
+
228
+ // 2. Build tar archive.
229
+ err = provisionersdk .Tar (archive , log , dir1 , 4096 )
230
+ require .NoError (t , err )
231
+
232
+ // 3. Untar to the second location.
233
+ err = provisionersdk .Untar (dir2 , archive )
234
+ require .NoError (t , err )
235
+
236
+ // 4. Modify the .tf file
237
+ err = os .WriteFile (file .Name (), []byte ("# c" ), 0o600 )
238
+ require .NoError (t , err )
239
+
240
+ // 5. Build tar archive with modified .tf file
241
+ err = provisionersdk .Tar (archive , log , dir1 , 4096 )
242
+ require .NoError (t , err )
243
+
244
+ // 6. Untar to a second location.
245
+ err = provisionersdk .Untar (dir2 , archive )
246
+ require .NoError (t , err )
247
+
248
+ // Verify if the file has been fully overwritten
249
+ content , err := os .ReadFile (filepath .Join (dir2 , filepath .Base (file .Name ())))
250
+ require .NoError (t , err )
251
+ require .Equal (t , "# c" , string (content ))
252
+ })
201
253
}
0 commit comments