Skip to content

Commit a42b278

Browse files
committed
add a test for pull into a directory
1 parent 3102599 commit a42b278

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed

cli/templatepull_test.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package cli_test
2+
3+
import (
4+
"archive/tar"
5+
"bufio"
6+
"bytes"
7+
"fmt"
8+
"io/ioutil"
9+
"testing"
10+
11+
"github.com/stretchr/testify/require"
12+
13+
"github.com/coder/coder/cli"
14+
)
15+
16+
func writeTarArchiveFileEntry(tw *tar.Writer, filename string, content []byte) error {
17+
hdr := &tar.Header{
18+
Name: filename,
19+
Mode: 0600,
20+
Size: int64(len(content)),
21+
}
22+
23+
err := tw.WriteHeader(hdr)
24+
if err != nil {
25+
return err
26+
}
27+
_, err = tw.Write([]byte(content))
28+
if err != nil {
29+
return err
30+
}
31+
return nil
32+
}
33+
34+
func TestTemplatePullExtractArchive(t *testing.T) {
35+
t.Parallel()
36+
37+
t.Run("TestPullExtractArchive", func(t *testing.T) {
38+
subdirName := "subtle"
39+
expectedNames := []string{
40+
"rat-one", "rat-two", fmt.Sprintf("%s/trouble", subdirName),
41+
}
42+
expectedContents := []string{
43+
"{ 'tar' : 'but is it art?' }\n", "{ 'zap' : 'brannigan' }\n", "{ 'with' : 'a T' }\n",
44+
}
45+
46+
t.Parallel()
47+
48+
var bb bytes.Buffer
49+
w := bufio.NewWriter(&bb)
50+
tw := tar.NewWriter(w)
51+
52+
hdr := &tar.Header{
53+
Name: subdirName,
54+
Mode: 0700,
55+
Typeflag: tar.TypeDir,
56+
}
57+
err := tw.WriteHeader(hdr)
58+
if err != nil {
59+
t.Fatalf(err.Error())
60+
}
61+
62+
for i := 0; i < len(expectedNames); i++ {
63+
err = writeTarArchiveFileEntry(tw, expectedNames[i], []byte(expectedContents[i]))
64+
if err != nil {
65+
t.Fatalf(err.Error())
66+
}
67+
}
68+
69+
tw.Close()
70+
71+
dirname, err := ioutil.TempDir("", "template-pull-test")
72+
if err != nil {
73+
t.Fatalf(err.Error())
74+
}
75+
76+
cli.TarBytesToTree(dirname, bb.Bytes())
77+
78+
for i := 0; i < len(expectedNames); i++ {
79+
filename := fmt.Sprintf("%s/%s", dirname, expectedNames[i])
80+
actualContents, err := ioutil.ReadFile(filename)
81+
82+
if err != nil {
83+
t.Fatalf(err.Error())
84+
}
85+
86+
require.Equal(t, expectedContents[i], string(actualContents))
87+
}
88+
})
89+
}

0 commit comments

Comments
 (0)