Skip to content

Commit b09fe9a

Browse files
committed
feat(testutil): extract testutil.Create(Zip|Tar) helpers
1 parent 12a9d63 commit b09fe9a

File tree

3 files changed

+63
-72
lines changed

3 files changed

+63
-72
lines changed

provisioner/terraform/tfparse/tfparse_test.go

Lines changed: 4 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package tfparse_test
22

33
import (
4-
"archive/tar"
5-
"bytes"
64
"context"
75
"io"
86
"log"
@@ -11,7 +9,6 @@ import (
119
"cdr.dev/slog"
1210
"cdr.dev/slog/sloggers/sloghuman"
1311
"cdr.dev/slog/sloggers/slogtest"
14-
"github.com/coder/coder/v2/archive"
1512
"github.com/coder/coder/v2/provisioner/terraform/tfparse"
1613
"github.com/coder/coder/v2/testutil"
1714

@@ -363,7 +360,7 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
363360
t.Run(tc.name+"/tar", func(t *testing.T) {
364361
t.Parallel()
365362
ctx := testutil.Context(t, testutil.WaitShort)
366-
tar := createTar(t, tc.files)
363+
tar := testutil.CreateTar(t, tc.files)
367364
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
368365
tmpDir := t.TempDir()
369366
tfparse.WriteArchive(tar, "application/x-tar", tmpDir)
@@ -381,7 +378,7 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
381378
t.Run(tc.name+"/zip", func(t *testing.T) {
382379
t.Parallel()
383380
ctx := testutil.Context(t, testutil.WaitShort)
384-
zip := createZip(t, tc.files)
381+
zip := testutil.CreateZip(t, tc.files)
385382
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
386383
tmpDir := t.TempDir()
387384
tfparse.WriteArchive(zip, "application/zip", tmpDir)
@@ -399,36 +396,6 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
399396
}
400397
}
401398

402-
func createTar(t testing.TB, files map[string]string) []byte {
403-
var buffer bytes.Buffer
404-
writer := tar.NewWriter(&buffer)
405-
for path, content := range files {
406-
err := writer.WriteHeader(&tar.Header{
407-
Name: path,
408-
Size: int64(len(content)),
409-
Uid: 65534, // nobody
410-
Gid: 65534, // nogroup
411-
Mode: 0o666, // -rw-rw-rw-
412-
})
413-
require.NoError(t, err)
414-
415-
_, err = writer.Write([]byte(content))
416-
require.NoError(t, err)
417-
}
418-
419-
err := writer.Flush()
420-
require.NoError(t, err)
421-
return buffer.Bytes()
422-
}
423-
424-
func createZip(t testing.TB, files map[string]string) []byte {
425-
ta := createTar(t, files)
426-
tr := tar.NewReader(bytes.NewReader(ta))
427-
za, err := archive.CreateZipFromTar(tr, int64(len(ta)))
428-
require.NoError(t, err)
429-
return za
430-
}
431-
432399
// Last run results:
433400
// goos: linux
434401
// goarch: amd64
@@ -460,8 +427,8 @@ func BenchmarkWorkspaceTagDefaultsFromFile(b *testing.B) {
460427
}
461428
}`,
462429
}
463-
tarFile := createTar(b, files)
464-
zipFile := createZip(b, files)
430+
tarFile := testutil.CreateTar(b, files)
431+
zipFile := testutil.CreateZip(b, files)
465432
logger := discardLogger(b)
466433
b.ResetTimer()
467434
b.Run("Tar", func(b *testing.B) {

provisionerd/provisionerd_test.go

Lines changed: 13 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package provisionerd_test
22

33
import (
4-
"archive/tar"
5-
"bytes"
64
"context"
75
"fmt"
86
"io"
@@ -97,7 +95,7 @@ func TestProvisionerd(t *testing.T) {
9795
err := stream.Send(&proto.AcquiredJob{
9896
JobId: "test",
9997
Provisioner: "someprovisioner",
100-
TemplateSourceArchive: createTar(t, map[string]string{
98+
TemplateSourceArchive: testutil.CreateTar(t, map[string]string{
10199
"test.txt": "content",
102100
}),
103101
Type: &proto.AcquiredJob_TemplateImport_{
@@ -150,7 +148,7 @@ func TestProvisionerd(t *testing.T) {
150148
acq = newAcquireOne(t, &proto.AcquiredJob{
151149
JobId: "test",
152150
Provisioner: "someprovisioner",
153-
TemplateSourceArchive: createTar(t, map[string]string{
151+
TemplateSourceArchive: testutil.CreateTar(t, map[string]string{
154152
"../../../etc/passwd": "content",
155153
}),
156154
Type: &proto.AcquiredJob_TemplateImport_{
@@ -194,7 +192,7 @@ func TestProvisionerd(t *testing.T) {
194192
err := stream.Send(&proto.AcquiredJob{
195193
JobId: "test",
196194
Provisioner: "someprovisioner",
197-
TemplateSourceArchive: createTar(t, map[string]string{
195+
TemplateSourceArchive: testutil.CreateTar(t, map[string]string{
198196
"test.txt": "content",
199197
}),
200198
Type: &proto.AcquiredJob_TemplateImport_{
@@ -243,7 +241,7 @@ func TestProvisionerd(t *testing.T) {
243241
acq = newAcquireOne(t, &proto.AcquiredJob{
244242
JobId: "test",
245243
Provisioner: "someprovisioner",
246-
TemplateSourceArchive: createTar(t, map[string]string{
244+
TemplateSourceArchive: testutil.CreateTar(t, map[string]string{
247245
"test.txt": "content",
248246
provisionersdk.ReadmeFile: "# A cool template 😎\n",
249247
}),
@@ -325,7 +323,7 @@ func TestProvisionerd(t *testing.T) {
325323
acq = newAcquireOne(t, &proto.AcquiredJob{
326324
JobId: "test",
327325
Provisioner: "someprovisioner",
328-
TemplateSourceArchive: createTar(t, map[string]string{
326+
TemplateSourceArchive: testutil.CreateTar(t, map[string]string{
329327
"test.txt": "content",
330328
}),
331329
Type: &proto.AcquiredJob_TemplateDryRun_{
@@ -396,7 +394,7 @@ func TestProvisionerd(t *testing.T) {
396394
acq = newAcquireOne(t, &proto.AcquiredJob{
397395
JobId: "test",
398396
Provisioner: "someprovisioner",
399-
TemplateSourceArchive: createTar(t, map[string]string{
397+
TemplateSourceArchive: testutil.CreateTar(t, map[string]string{
400398
"test.txt": "content",
401399
}),
402400
Type: &proto.AcquiredJob_WorkspaceBuild_{
@@ -459,7 +457,7 @@ func TestProvisionerd(t *testing.T) {
459457
acq = newAcquireOne(t, &proto.AcquiredJob{
460458
JobId: "test",
461459
Provisioner: "someprovisioner",
462-
TemplateSourceArchive: createTar(t, map[string]string{
460+
TemplateSourceArchive: testutil.CreateTar(t, map[string]string{
463461
"test.txt": "content",
464462
}),
465463
Type: &proto.AcquiredJob_WorkspaceBuild_{
@@ -549,7 +547,7 @@ func TestProvisionerd(t *testing.T) {
549547
acq = newAcquireOne(t, &proto.AcquiredJob{
550548
JobId: "test",
551549
Provisioner: "someprovisioner",
552-
TemplateSourceArchive: createTar(t, map[string]string{
550+
TemplateSourceArchive: testutil.CreateTar(t, map[string]string{
553551
"test.txt": "content",
554552
}),
555553
Type: &proto.AcquiredJob_WorkspaceBuild_{
@@ -645,7 +643,7 @@ func TestProvisionerd(t *testing.T) {
645643
err := stream.Send(&proto.AcquiredJob{
646644
JobId: "test",
647645
Provisioner: "someprovisioner",
648-
TemplateSourceArchive: createTar(t, map[string]string{
646+
TemplateSourceArchive: testutil.CreateTar(t, map[string]string{
649647
"test.txt": "content",
650648
}),
651649
Type: &proto.AcquiredJob_WorkspaceBuild_{
@@ -725,7 +723,7 @@ func TestProvisionerd(t *testing.T) {
725723
err := stream.Send(&proto.AcquiredJob{
726724
JobId: "test",
727725
Provisioner: "someprovisioner",
728-
TemplateSourceArchive: createTar(t, map[string]string{
726+
TemplateSourceArchive: testutil.CreateTar(t, map[string]string{
729727
"test.txt": "content",
730728
}),
731729
Type: &proto.AcquiredJob_WorkspaceBuild_{
@@ -819,7 +817,7 @@ func TestProvisionerd(t *testing.T) {
819817
job := &proto.AcquiredJob{
820818
JobId: "test",
821819
Provisioner: "someprovisioner",
822-
TemplateSourceArchive: createTar(t, map[string]string{
820+
TemplateSourceArchive: testutil.CreateTar(t, map[string]string{
823821
"test.txt": "content",
824822
}),
825823
Type: &proto.AcquiredJob_WorkspaceBuild_{
@@ -916,7 +914,7 @@ func TestProvisionerd(t *testing.T) {
916914
job := &proto.AcquiredJob{
917915
JobId: "test",
918916
Provisioner: "someprovisioner",
919-
TemplateSourceArchive: createTar(t, map[string]string{
917+
TemplateSourceArchive: testutil.CreateTar(t, map[string]string{
920918
"test.txt": "content",
921919
}),
922920
Type: &proto.AcquiredJob_WorkspaceBuild_{
@@ -1010,7 +1008,7 @@ func TestProvisionerd(t *testing.T) {
10101008
err := stream.Send(&proto.AcquiredJob{
10111009
JobId: "test",
10121010
Provisioner: "someprovisioner",
1013-
TemplateSourceArchive: createTar(t, map[string]string{
1011+
TemplateSourceArchive: testutil.CreateTar(t, map[string]string{
10141012
"test.txt": "content",
10151013
}),
10161014
Type: &proto.AcquiredJob_WorkspaceBuild_{
@@ -1078,26 +1076,6 @@ func TestProvisionerd(t *testing.T) {
10781076
})
10791077
}
10801078

1081-
// Creates an in-memory tar of the files provided.
1082-
func createTar(t *testing.T, files map[string]string) []byte {
1083-
var buffer bytes.Buffer
1084-
writer := tar.NewWriter(&buffer)
1085-
for path, content := range files {
1086-
err := writer.WriteHeader(&tar.Header{
1087-
Name: path,
1088-
Size: int64(len(content)),
1089-
})
1090-
require.NoError(t, err)
1091-
1092-
_, err = writer.Write([]byte(content))
1093-
require.NoError(t, err)
1094-
}
1095-
1096-
err := writer.Flush()
1097-
require.NoError(t, err)
1098-
return buffer.Bytes()
1099-
}
1100-
11011079
// Creates a provisionerd implementation with the provided dialer and provisioners.
11021080
func createProvisionerd(t *testing.T, dialer provisionerd.Dialer, connector provisionerd.LocalProvisioners) *provisionerd.Server {
11031081
server := provisionerd.New(dialer, &provisionerd.Options{

testutil/archive.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package testutil
2+
3+
import (
4+
"archive/tar"
5+
"bytes"
6+
"testing"
7+
8+
"github.com/stretchr/testify/require"
9+
10+
"github.com/coder/coder/v2/archive"
11+
)
12+
13+
// Creates an in-memory tar of the files provided.
14+
// Files in the archive are written with nobody
15+
// owner/group, and -rw-rw-rw- permissions.
16+
func CreateTar(t testing.TB, files map[string]string) []byte {
17+
var buffer bytes.Buffer
18+
writer := tar.NewWriter(&buffer)
19+
for path, content := range files {
20+
err := writer.WriteHeader(&tar.Header{
21+
Name: path,
22+
Size: int64(len(content)),
23+
Uid: 65534, // nobody
24+
Gid: 65534, // nogroup
25+
Mode: 0o666, // -rw-rw-rw-
26+
})
27+
require.NoError(t, err)
28+
29+
_, err = writer.Write([]byte(content))
30+
require.NoError(t, err)
31+
}
32+
33+
err := writer.Flush()
34+
require.NoError(t, err)
35+
return buffer.Bytes()
36+
}
37+
38+
// Creates an in-memory zip of the files provided.
39+
// Uses archive.CreateZipFromTar under the hood.
40+
func CreateZip(t testing.TB, files map[string]string) []byte {
41+
ta := CreateTar(t, files)
42+
tr := tar.NewReader(bytes.NewReader(ta))
43+
za, err := archive.CreateZipFromTar(tr, int64(len(ta)))
44+
require.NoError(t, err)
45+
return za
46+
}

0 commit comments

Comments
 (0)