[MM-49989] Pass a context.Context to Client4 methods (#22922)
* Migrate all method in model/client4.go to accept a context.Context * Fix th.*Client * Fix remaining issues * Empty commit to triger CI * Fix test * Add cancellation test * Test that returned error is context.Canceled * Fix bad merge * Update mmctl code --------- Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
7116e9267a
Коммит
6c82605df0
@@ -5,6 +5,7 @@ package api4
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
@@ -21,14 +22,14 @@ func TestListExports(t *testing.T) {
|
||||
defer th.TearDown()
|
||||
|
||||
t.Run("no permissions", func(t *testing.T) {
|
||||
exports, _, err := th.Client.ListExports()
|
||||
exports, _, err := th.Client.ListExports(context.Background())
|
||||
require.Error(t, err)
|
||||
CheckErrorID(t, err, "api.context.permissions.app_error")
|
||||
require.Nil(t, exports)
|
||||
})
|
||||
|
||||
th.TestForSystemAdminAndLocal(t, func(t *testing.T, c *model.Client4) {
|
||||
exports, _, err := c.ListExports()
|
||||
exports, _, err := c.ListExports(context.Background())
|
||||
require.NoError(t, err)
|
||||
require.Empty(t, exports)
|
||||
}, "no exports")
|
||||
@@ -46,7 +47,7 @@ func TestListExports(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
f.Close()
|
||||
|
||||
exports, _, err := c.ListExports()
|
||||
exports, _, err := c.ListExports(context.Background())
|
||||
require.NoError(t, err)
|
||||
require.Len(t, exports, 1)
|
||||
require.Equal(t, exports[0], "export.zip")
|
||||
@@ -62,7 +63,7 @@ func TestListExports(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(exportDir)
|
||||
|
||||
exports, _, err := c.ListExports()
|
||||
exports, _, err := c.ListExports(context.Background())
|
||||
require.NoError(t, err)
|
||||
require.Empty(t, exports)
|
||||
|
||||
@@ -70,7 +71,7 @@ func TestListExports(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
f.Close()
|
||||
|
||||
exports, _, err = c.ListExports()
|
||||
exports, _, err = c.ListExports(context.Background())
|
||||
require.NoError(t, err)
|
||||
require.Len(t, exports, 1)
|
||||
require.Equal(t, "export.zip", exports[0])
|
||||
@@ -82,7 +83,7 @@ func TestDeleteExport(t *testing.T) {
|
||||
defer th.TearDown()
|
||||
|
||||
t.Run("no permissions", func(t *testing.T) {
|
||||
_, err := th.Client.DeleteExport("export.zip")
|
||||
_, err := th.Client.DeleteExport(context.Background(), "export.zip")
|
||||
require.Error(t, err)
|
||||
CheckErrorID(t, err, "api.context.permissions.app_error")
|
||||
})
|
||||
@@ -100,20 +101,20 @@ func TestDeleteExport(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
f.Close()
|
||||
|
||||
exports, _, err := c.ListExports()
|
||||
exports, _, err := c.ListExports(context.Background())
|
||||
require.NoError(t, err)
|
||||
require.Len(t, exports, 1)
|
||||
require.Equal(t, exports[0], exportName)
|
||||
|
||||
_, err = c.DeleteExport(exportName)
|
||||
_, err = c.DeleteExport(context.Background(), exportName)
|
||||
require.NoError(t, err)
|
||||
|
||||
exports, _, err = c.ListExports()
|
||||
exports, _, err = c.ListExports(context.Background())
|
||||
require.NoError(t, err)
|
||||
require.Empty(t, exports)
|
||||
|
||||
// verify idempotence
|
||||
_, err = c.DeleteExport(exportName)
|
||||
_, err = c.DeleteExport(context.Background(), exportName)
|
||||
require.NoError(t, err)
|
||||
}, "successfully delete export")
|
||||
}
|
||||
@@ -124,7 +125,7 @@ func TestDownloadExport(t *testing.T) {
|
||||
|
||||
t.Run("no permissions", func(t *testing.T) {
|
||||
var buf bytes.Buffer
|
||||
n, _, err := th.Client.DownloadExport("export.zip", &buf, 0)
|
||||
n, _, err := th.Client.DownloadExport(context.Background(), "export.zip", &buf, 0)
|
||||
require.Error(t, err)
|
||||
CheckErrorID(t, err, "api.context.permissions.app_error")
|
||||
require.Zero(t, n)
|
||||
@@ -136,7 +137,7 @@ func TestDownloadExport(t *testing.T) {
|
||||
|
||||
th.TestForSystemAdminAndLocal(t, func(t *testing.T, c *model.Client4) {
|
||||
var buf bytes.Buffer
|
||||
n, _, err := c.DownloadExport("export.zip", &buf, 0)
|
||||
n, _, err := c.DownloadExport(context.Background(), "export.zip", &buf, 0)
|
||||
require.Error(t, err)
|
||||
CheckErrorID(t, err, "api.export.export_not_found.app_error")
|
||||
require.Zero(t, n)
|
||||
@@ -153,7 +154,7 @@ func TestDownloadExport(t *testing.T) {
|
||||
err = os.WriteFile(filepath.Join(exportDir, exportName), data, 0600)
|
||||
require.NoError(t, err)
|
||||
|
||||
n, _, err := c.DownloadExport(exportName, &buf, 0)
|
||||
n, _, err := c.DownloadExport(context.Background(), exportName, &buf, 0)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, len(data), int(n))
|
||||
require.Equal(t, data, buf.Bytes())
|
||||
@@ -171,7 +172,7 @@ func TestDownloadExport(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
|
||||
offset := 1024 * 512
|
||||
n, _, err := c.DownloadExport(exportName, &buf, int64(offset))
|
||||
n, _, err := c.DownloadExport(context.Background(), exportName, &buf, int64(offset))
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, len(data)-offset, int(n))
|
||||
require.Equal(t, data[offset:], buf.Bytes())
|
||||
@@ -202,7 +203,7 @@ func BenchmarkDownloadExport(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
outFilePath := filepath.Join(dataDir, fmt.Sprintf("export%d.zip", i))
|
||||
outFile, _ := os.Create(outFilePath)
|
||||
th.SystemAdminClient.DownloadExport(exportName, outFile, 0)
|
||||
th.SystemAdminClient.DownloadExport(context.Background(), exportName, outFile, 0)
|
||||
outFile.Close()
|
||||
os.Remove(outFilePath)
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user