chore(coderd): improve tests for tar<->zip conversion (#12477)

* improve tests for tar<->zip conversion
* set mode and modtime correctly when converting from zip to tar (#12476)
This commit is contained in:
Cian Johnston
2024-03-11 13:29:57 +00:00
committed by GitHub
parent 0220c97ef9
commit b1ecc53033
5 changed files with 235 additions and 19 deletions

View File

@ -5,6 +5,8 @@ import (
"bytes"
"context"
"net/http"
"os"
"path/filepath"
"testing"
"github.com/google/uuid"
@ -13,7 +15,6 @@ import (
"github.com/coder/coder/v2/coderd"
"github.com/coder/coder/v2/coderd/coderdtest"
"github.com/coder/coder/v2/codersdk"
"github.com/coder/coder/v2/provisioner/echo"
"github.com/coder/coder/v2/testutil"
)
@ -83,16 +84,20 @@ func TestDownload(t *testing.T) {
// given
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
defer cancel()
tarball, err := os.ReadFile(filepath.Join("testdata", "test.tar"))
require.NoError(t, err)
// when
resp, err := client.Upload(ctx, codersdk.ContentTypeTar, bytes.NewReader(make([]byte, 1024)))
resp, err := client.Upload(ctx, codersdk.ContentTypeTar, bytes.NewReader(tarball))
require.NoError(t, err)
data, contentType, err := client.Download(ctx, resp.ID)
require.NoError(t, err)
// then
require.Len(t, data, 1024)
require.Len(t, data, len(tarball))
require.Equal(t, codersdk.ContentTypeTar, contentType)
require.Equal(t, tarball, data)
assertSampleTarFile(t, data)
})
t.Run("InsertZip_DownloadTar", func(t *testing.T) {
@ -101,14 +106,7 @@ func TestDownload(t *testing.T) {
_ = coderdtest.CreateFirstUser(t, client)
// given
tarball, err := echo.Tar(&echo.Responses{
Parse: echo.ParseComplete,
ProvisionApply: echo.ApplyComplete,
})
require.NoError(t, err)
tarReader := tar.NewReader(bytes.NewReader(tarball))
zipContent, err := coderd.CreateZipFromTar(tarReader)
zipContent, err := os.ReadFile(filepath.Join("testdata", "test.zip"))
require.NoError(t, err)
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
@ -122,7 +120,10 @@ func TestDownload(t *testing.T) {
// then
require.Equal(t, codersdk.ContentTypeTar, contentType)
require.Equal(t, tarball, data)
// Note: creating a zip from a tar will result in some loss of information
// as zip files do not store UNIX user:group data.
assertSampleTarFile(t, data)
})
t.Run("InsertTar_DownloadZip", func(t *testing.T) {
@ -131,10 +132,7 @@ func TestDownload(t *testing.T) {
_ = coderdtest.CreateFirstUser(t, client)
// given
tarball, err := echo.Tar(&echo.Responses{
Parse: echo.ParseComplete,
ProvisionApply: echo.ApplyComplete,
})
tarball, err := os.ReadFile(filepath.Join("testdata", "test.tar"))
require.NoError(t, err)
tarReader := tar.NewReader(bytes.NewReader(tarball))
@ -153,5 +151,6 @@ func TestDownload(t *testing.T) {
// then
require.Equal(t, codersdk.ContentTypeZip, contentType)
require.Equal(t, expectedZip, data)
assertSampleZipFile(t, data)
})
}