From 9d7347affb012a6176f90477afe20409df999b6a Mon Sep 17 00:00:00 2001 From: Jack Chen Date: Mon, 7 Oct 2024 23:01:03 +0800 Subject: [PATCH] fix: Added validation for UpdateScheduleJobRequest refer to https://github.com/edgexfoundry/edgex-go/issues/4925 Signed-off-by: Jack Chen --- dtos/requests/schedulejob.go | 20 ++++++++++++++++++-- dtos/requests/schedulejob_test.go | 17 +++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/dtos/requests/schedulejob.go b/dtos/requests/schedulejob.go index 1b9c6867..29b5ae71 100644 --- a/dtos/requests/schedulejob.go +++ b/dtos/requests/schedulejob.go @@ -61,12 +61,28 @@ type UpdateScheduleJobRequest struct { } // Validate satisfies the Validator interface -func (a *UpdateScheduleJobRequest) Validate() error { - err := common.Validate(a) +func (u *UpdateScheduleJobRequest) Validate() error { + err := common.Validate(u) if err != nil { return err } + if u.ScheduleJob.Definition != nil { + err = u.ScheduleJob.Definition.Validate() + if err != nil { + return errors.NewCommonEdgeX(errors.KindContractInvalid, "invalid ScheduleDef.", err) + } + } + + if u.ScheduleJob.Actions != nil { + for _, action := range u.ScheduleJob.Actions { + err = action.Validate() + if err != nil { + return errors.NewCommonEdgeX(errors.KindContractInvalid, "invalid ScheduleAction.", err) + } + } + } + return nil } diff --git a/dtos/requests/schedulejob_test.go b/dtos/requests/schedulejob_test.go index 1133f7e8..039faa85 100644 --- a/dtos/requests/schedulejob_test.go +++ b/dtos/requests/schedulejob_test.go @@ -182,6 +182,9 @@ func TestUpdateScheduleJobRequest_Validate(t *testing.T) { unsupportedDefinitionType.ScheduleJob.Definition = &unsupportedDefinition validWithoutDefinition := NewUpdateScheduleJobRequest(updateScheduleJobData()) validWithoutDefinition.ScheduleJob.Definition = nil + invalidStartAndEndTimestamp := NewUpdateScheduleJobRequest(updateScheduleJobData()) + invalidStartAndEndTimestamp.ScheduleJob.Definition.StartTimestamp = 1727690062000 + invalidStartAndEndTimestamp.ScheduleJob.Definition.EndTimestamp = 1727689822000 invalidEmptyDefinition := NewUpdateScheduleJobRequest(updateScheduleJobData()) emptyDefinition := dtos.ScheduleDef{} invalidEmptyDefinition.ScheduleJob.Definition = &emptyDefinition @@ -196,6 +199,18 @@ func TestUpdateScheduleJobRequest_Validate(t *testing.T) { emptyLabels := NewUpdateScheduleJobRequest(updateScheduleJobData()) emptyLabels.ScheduleJob.Labels = []string{} + invalidActions := NewUpdateScheduleJobRequest(updateScheduleJobData()) + invalidActions.ScheduleJob.Actions = []dtos.ScheduleAction{ + { + Type: "invalid", + ContentType: common.ContentTypeJSON, + Payload: nil, + EdgeXMessageBusAction: dtos.EdgeXMessageBusAction{ + Topic: "testTopic", + }, + }, + } + tests := []struct { name string req UpdateScheduleJobRequest @@ -211,11 +226,13 @@ func TestUpdateScheduleJobRequest_Validate(t *testing.T) { {"invalid, empty name", invalidEmptyName, true}, {"invalid, unsupported definition type", unsupportedDefinitionType, true}, {"valid, without definition", validWithoutDefinition, false}, + {"invalid, endTimestamp must be greater than startTimestamp", invalidStartAndEndTimestamp, true}, {"invalid, empty definition", invalidEmptyDefinition, true}, {"valid, no actions", noActions, false}, {"valid, no labels", noLabels, false}, {"valid, empty actions", emptyActions, false}, {"valid, empty labels", emptyLabels, false}, + {"invalid, invalid action type", invalidActions, true}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {