[MM-63557] mmctl: Add compliance export create cmd (#30594)
* Refactor job retrieval to support multiple statuses & multiple types - Updated job retrieval functions to handle multiple job statuses. - Renamed `GetJobsByTypeAndStatus` to `GetJobsByTypesAndStatuses` for consistency across the codebase. - Adjusted related function signatures and implementations in the job store and retry layer to accommodate the new method. - Updated tests to reflect changes in job retrieval logic and ensure proper functionality. * Add compliance export create command and tests - Introduced `ComplianceExportCreateCmd` to facilitate the creation of compliance export jobs with options for date, start, and end timestamps. - Added unit tests for the new command, covering various scenarios including valid and invalid inputs. - Updated documentation to include usage examples and options for the new command. - Enhanced existing tests to ensure proper functionality of compliance export job handling. * update docs * update tests for new logic * Refactor message export job tests to use DefaultPreviousJobPageSize - Updated all test cases in worker_test.go to replace hardcoded page size of 100 with DefaultPreviousJobPageSize for consistency. - Adjusted the worker.go file to define DefaultPreviousJobPageSize and use it in job retrieval logic. - Ensured that the changes maintain the functionality of job data initialization and retrieval tests. * PR comments * PR comments, simplifications, clarifications, formatting * prefer hypen over underscore in command names * merge conflict * update mmctl docs
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
b33a7e362f
Коммит
9b1e03a6b8
@@ -4,6 +4,10 @@
|
||||
package commands
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/golang/mock/gomock"
|
||||
"github.com/mattermost/mattermost/server/public/model"
|
||||
"github.com/mattermost/mattermost/server/v8/channels/api4"
|
||||
@@ -81,6 +85,8 @@ func (s *MmctlE2ETestSuite) SetupMessageExportTestHelper() *api4.TestHelper {
|
||||
s.th.App.Srv().Jobs.RegisterJobType(model.JobTypeMessageExport, messageExportImpl.MakeWorker(), messageExportImpl.MakeScheduler())
|
||||
s.th.App.UpdateConfig(func(cfg *model.Config) {
|
||||
*cfg.MessageExportSettings.DownloadExportResults = true
|
||||
*cfg.MessageExportSettings.EnableExport = true
|
||||
*cfg.MessageExportSettings.ExportFormat = model.ComplianceExportTypeActiance
|
||||
})
|
||||
|
||||
err := s.th.App.Srv().Jobs.StartWorkers()
|
||||
@@ -125,3 +131,47 @@ func (s *MmctlE2ETestSuite) RunForAllClients(testName string, fn func(client.Cli
|
||||
func (s *MmctlE2ETestSuite) CheckErrorID(err error, errorId string) {
|
||||
api4.CheckErrorID(s.T(), err, errorId)
|
||||
}
|
||||
|
||||
// Helper functions for compliance export job testing
|
||||
|
||||
// getMostRecentJobWithId gets the most recent job with the specified ID
|
||||
func (s *MmctlE2ETestSuite) getMostRecentJobWithId(id string) *model.Job {
|
||||
list, _, err := s.th.SystemAdminClient.GetJobsByType(context.Background(), model.JobTypeMessageExport, 0, 1)
|
||||
s.Require().NoError(err)
|
||||
s.Require().Len(list, 1)
|
||||
s.Require().Equal(id, list[0].Id)
|
||||
return list[0]
|
||||
}
|
||||
|
||||
// checkJobForStatus polls until the job with the specified ID reaches the expected status
|
||||
func (s *MmctlE2ETestSuite) checkJobForStatus(id string, status string) {
|
||||
doneChan := make(chan bool)
|
||||
var job *model.Job
|
||||
go func() {
|
||||
defer close(doneChan)
|
||||
for {
|
||||
job = s.getMostRecentJobWithId(id)
|
||||
if job.Status == status {
|
||||
break
|
||||
}
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
}
|
||||
s.Require().Equal(status, job.Status)
|
||||
}()
|
||||
select {
|
||||
case <-doneChan:
|
||||
case <-time.After(15 * time.Second):
|
||||
s.Require().Fail(fmt.Sprintf("expected job's status to be %s, got %s", status, job.Status))
|
||||
}
|
||||
}
|
||||
|
||||
// runJobForTest creates a job and waits for it to complete
|
||||
func (s *MmctlE2ETestSuite) runJobForTest(jobData map[string]string) *model.Job {
|
||||
job, _, err := s.th.SystemAdminClient.CreateJob(context.Background(),
|
||||
&model.Job{Type: model.JobTypeMessageExport, Data: jobData})
|
||||
s.Require().NoError(err)
|
||||
// poll until completion
|
||||
s.checkJobForStatus(job.Id, model.JobStatusSuccess)
|
||||
job = s.getMostRecentJobWithId(job.Id)
|
||||
return job
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user