From 43f4734eaed708a7f40fa9f2d77725ac2532a7b6 Mon Sep 17 00:00:00 2001 From: Ben Schumacher Date: Fri, 3 Nov 2023 09:48:18 +0100 Subject: [PATCH] [MM-55051] Assign correct timestamp to support packet files (#25035) * Assign correct timestamp to support packet files * Fix linter error * Add back compression --------- Co-authored-by: Mattermost Build --- server/channels/app/file.go | 7 +++- server/channels/app/file_test.go | 56 ++++++++++++++++++++++----- server/channels/app/support_packet.go | 2 +- 3 files changed, 54 insertions(+), 11 deletions(-) diff --git a/server/channels/app/file.go b/server/channels/app/file.go index 616df8ddd2..1e40ed83cf 100644 --- a/server/channels/app/file.go +++ b/server/channels/app/file.go @@ -1385,7 +1385,12 @@ func (a *App) CreateZipFileAndAddFiles(fileBackend filestore.FileBackend, fileDa func populateZipfile(w *zip.Writer, fileDatas []model.FileData) error { defer w.Close() for _, fd := range fileDatas { - f, err := w.Create(fd.Filename) + f, err := w.CreateHeader(&zip.FileHeader{ + Name: fd.Filename, + Method: zip.Deflate, + Modified: time.Now(), + }) + if err != nil { return err } diff --git a/server/channels/app/file_test.go b/server/channels/app/file_test.go index fd783c4a99..a3cabf31f3 100644 --- a/server/channels/app/file_test.go +++ b/server/channels/app/file_test.go @@ -4,10 +4,13 @@ package app import ( + "archive/zip" "errors" "fmt" "image" + "io" "os" + "path" "path/filepath" "testing" "time" @@ -283,18 +286,53 @@ func TestCreateZipFileAndAddFiles(t *testing.T) { th := Setup(t) defer th.TearDown() - mockBackend := filesStoreMocks.FileBackend{} - mockBackend.On("WriteFile", mock.Anything, "directory-to-heaven/zip-file-name-to-heaven.zip").Return(int64(666), errors.New("only those who dare to fail greatly can ever achieve greatly")) + const ( + zipName = "zip-file-name-to-heaven.zip" + directory = "directory-to-heaven" + ) - err := th.App.CreateZipFileAndAddFiles(&mockBackend, []model.FileData{}, "zip-file-name-to-heaven.zip", "directory-to-heaven") + t.Run("write file fails", func(t *testing.T) { + mockBackend := filesStoreMocks.FileBackend{} + mockBackend.On("WriteFile", mock.Anything, path.Join(directory, zipName)).Return(int64(666), errors.New("only those who dare to fail greatly can ever achieve greatly")) - require.Error(t, err) - require.Equal(t, err.Error(), "only those who dare to fail greatly can ever achieve greatly") + err := th.App.CreateZipFileAndAddFiles(&mockBackend, []model.FileData{}, zipName, directory) - mockBackend = filesStoreMocks.FileBackend{} - mockBackend.On("WriteFile", mock.Anything, "directory-to-heaven/zip-file-name-to-heaven.zip").Return(int64(666), nil) - err = th.App.CreateZipFileAndAddFiles(&mockBackend, []model.FileData{}, "zip-file-name-to-heaven.zip", "directory-to-heaven") - require.NoError(t, err) + require.Error(t, err) + require.Equal(t, err.Error(), "only those who dare to fail greatly can ever achieve greatly") + }) + + t.Run("write no file", func(t *testing.T) { + mockBackend := filesStoreMocks.FileBackend{} + mockBackend.On("WriteFile", mock.Anything, path.Join(directory, zipName)).Return(int64(666), nil) + err := th.App.CreateZipFileAndAddFiles(&mockBackend, []model.FileData{}, zipName, directory) + require.NoError(t, err) + }) + + t.Run("write one file", func(t *testing.T) { + mockBackend := filesStoreMocks.FileBackend{} + mockBackend.On("WriteFile", mock.Anything, path.Join(directory, zipName)).Return(int64(666), nil).Run(func(args mock.Arguments) { + r, err := zip.OpenReader(zipName) + require.NoError(t, err) + require.Len(t, r.File, 1) + + file := r.File[0] + assert.Equal(t, "file1", file.Name) + assert.GreaterOrEqual(t, file.Modified, time.Now().Add(-1*time.Second)) + + fr, err := file.Open() + require.NoError(t, err) + b, err := io.ReadAll(fr) + require.NoError(t, err) + assert.Equal(t, []byte("content1"), b) + }) + err := th.App.CreateZipFileAndAddFiles(&mockBackend, []model.FileData{ + { + Filename: "file1", + Body: []byte("content1"), + }, + }, zipName, directory) + require.NoError(t, err) + }) } func TestCopyFileInfos(t *testing.T) { diff --git a/server/channels/app/support_packet.go b/server/channels/app/support_packet.go index 43ad969d79..82669f224c 100644 --- a/server/channels/app/support_packet.go +++ b/server/channels/app/support_packet.go @@ -95,7 +95,7 @@ func (a *App) generateSupportPacketYaml(c request.CTX) (*model.FileData, error) /* LDAP */ var vendorName, vendorVersion string - if ldapInterface := a.ch.Ldap; a.ch.Ldap != nil { + if ldapInterface := a.Ldap(); ldapInterface != nil { vendorName, vendorVersion = ldapInterface.GetVendorNameAndVendorVersion(c) }