From: elinuxhenrik Date: Tue, 7 Sep 2021 00:58:52 +0000 (+0200) Subject: Finished job creation X-Git-Tag: 1.2.0~96 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F03%2F6703%2F1;p=nonrtric.git Finished job creation Issue-ID: NONRTRIC-585 Signed-off-by: elinuxhenrik Change-Id: Ia3d1dd37166b187f9ba60eaacd5029ef1a411278 --- diff --git a/dmaap-mediator-producer/internal/config/config_test.go b/dmaap-mediator-producer/internal/config/config_test.go index 23227399..4a65dc0d 100644 --- a/dmaap-mediator-producer/internal/config/config_test.go +++ b/dmaap-mediator-producer/internal/config/config_test.go @@ -37,7 +37,9 @@ func TestNew_envVarsSetConfigContainSetValues(t *testing.T) { os.Setenv("INFO_JOB_CALLBACK_HOST", "jobCallbackHost") os.Setenv("INFO_JOB_CALLBACK_PORT", "8096") os.Setenv("INFO_COORD_ADDR", "infoCoordAddr") - defer os.Clearenv() + t.Cleanup(func() { + os.Clearenv() + }) wantConfig := Config{ LogLevel: "Debug", InfoProducerSupervisionCallbackHost: "supervisionCallbackHost", @@ -52,16 +54,15 @@ func TestNew_envVarsSetConfigContainSetValues(t *testing.T) { } func TestNew_faultyIntValueSetConfigContainDefaultValueAndWarnInLog(t *testing.T) { - os.Clearenv() assertions := require.New(t) var buf bytes.Buffer log.SetOutput(&buf) - defer func() { - log.SetOutput(os.Stderr) - }() os.Setenv("INFO_PRODUCER_SUPERVISION_CALLBACK_PORT", "wrong") - defer os.Clearenv() + t.Cleanup(func() { + log.SetOutput(os.Stderr) + os.Clearenv() + }) wantConfig := Config{ LogLevel: "Info", InfoProducerSupervisionCallbackHost: "", @@ -78,7 +79,6 @@ func TestNew_faultyIntValueSetConfigContainDefaultValueAndWarnInLog(t *testing.T } func TestNew_envVarsNotSetConfigContainDefaultValues(t *testing.T) { - os.Clearenv() wantConfig := Config{ LogLevel: "Info", InfoProducerSupervisionCallbackHost: "", diff --git a/dmaap-mediator-producer/internal/config/registrator_test.go b/dmaap-mediator-producer/internal/config/registrator_test.go index 94dc6848..a89c43f8 100644 --- a/dmaap-mediator-producer/internal/config/registrator_test.go +++ b/dmaap-mediator-producer/internal/config/registrator_test.go @@ -27,7 +27,7 @@ import ( "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" - "oransc.org/nonrtric/dmaapmediatorproducer/internal/jobtypes" + "oransc.org/nonrtric/dmaapmediatorproducer/internal/jobs" "oransc.org/nonrtric/dmaapmediatorproducer/internal/restclient" "oransc.org/nonrtric/dmaapmediatorproducer/mocks" ) @@ -43,11 +43,11 @@ func TestRegisterTypes(t *testing.T) { restclient.Client = &clientMock - type1 := jobtypes.Type{ + type1 := jobs.Type{ TypeId: "Type1", Schema: `{"title": "Type 1"}`, } - types := []*jobtypes.Type{&type1} + types := []*jobs.Type{&type1} r := NewRegistratorImpl("http://localhost:9990") err := r.RegisterTypes(types) diff --git a/dmaap-mediator-producer/internal/jobs/jobs.go b/dmaap-mediator-producer/internal/jobs/jobs.go index 10eaf680..73471789 100644 --- a/dmaap-mediator-producer/internal/jobs/jobs.go +++ b/dmaap-mediator-producer/internal/jobs/jobs.go @@ -21,6 +21,7 @@ package jobs import ( + "fmt" "os" "path/filepath" "strings" @@ -61,12 +62,25 @@ func newJobHandlerImpl() *jobHandlerImpl { } func (jh *jobHandlerImpl) AddJob(ji JobInfo) error { - if jobs, ok := allJobs[ji.InfoTypeIdentity]; ok { - if _, ok := jobs[ji.InfoJobIdentity]; ok { - // TODO: Update job - } else { - jobs[ji.InfoJobIdentity] = ji - } + if err := validateJobInfo(ji); err == nil { + jobs := allJobs[ji.InfoTypeIdentity] + jobs[ji.InfoJobIdentity] = ji + return nil + } else { + return err + } +} + +func validateJobInfo(ji JobInfo) error { + if _, ok := allJobs[ji.InfoTypeIdentity]; !ok { + return fmt.Errorf("type not supported: %v", ji.InfoTypeIdentity) + } + if ji.InfoJobIdentity == "" { + return fmt.Errorf("missing required job identity: %v", ji) + } + // Temporary for when there are only REST callbacks needed + if ji.TargetUri == "" { + return fmt.Errorf("missing required target URI: %v", ji) } return nil } @@ -120,3 +134,7 @@ func getType(path string) (*Type, error) { return nil, err } } + +func clearAll() { + allJobs = make(map[string]map[string]JobInfo) +} diff --git a/dmaap-mediator-producer/internal/jobs/jobs_test.go b/dmaap-mediator-producer/internal/jobs/jobs_test.go index 42fc3e23..09410338 100644 --- a/dmaap-mediator-producer/internal/jobs/jobs_test.go +++ b/dmaap-mediator-producer/internal/jobs/jobs_test.go @@ -36,7 +36,10 @@ func TestGetTypes_filesOkShouldReturnSliceOfTypesAndProvideSupportedTypes(t *tes if err != nil { t.Errorf("Unable to create temporary directory for types due to: %v", err) } - defer os.RemoveAll(typesDir) + t.Cleanup(func() { + os.RemoveAll(typesDir) + clearAll() + }) typeDir = typesDir fname := filepath.Join(typesDir, "type1.json") if err = os.WriteFile(fname, []byte(type1Schema), 0666); err != nil { @@ -55,9 +58,12 @@ func TestGetTypes_filesOkShouldReturnSliceOfTypesAndProvideSupportedTypes(t *tes assertions.EqualValues([]string{"type1"}, supportedTypes) } -func TestAddJob_shouldAddJobToAllJobsMap(t *testing.T) { +func TestAddJobWhenTypeIsSupported_shouldAddJobToAllJobsMap(t *testing.T) { assertions := require.New(t) allJobs["type1"] = make(map[string]JobInfo) + t.Cleanup(func() { + clearAll() + }) jobInfo := JobInfo{ Owner: "owner", LastUpdated: "now", @@ -70,4 +76,45 @@ func TestAddJob_shouldAddJobToAllJobsMap(t *testing.T) { err := AddJob(jobInfo) assertions.Nil(err) assertions.Equal(1, len(allJobs["type1"])) + assertions.Equal(jobInfo, allJobs["type1"]["job1"]) +} + +func TestAddJobWhenTypeIsNotSupported_shouldReturnError(t *testing.T) { + assertions := require.New(t) + jobInfo := JobInfo{ + InfoTypeIdentity: "type1", + } + + err := AddJob(jobInfo) + assertions.NotNil(err) + assertions.Equal("type not supported: type1", err.Error()) +} + +func TestAddJobWhenJobIdMissing_shouldReturnError(t *testing.T) { + assertions := require.New(t) + allJobs["type1"] = make(map[string]JobInfo) + t.Cleanup(func() { + clearAll() + }) + jobInfo := JobInfo{ + InfoTypeIdentity: "type1", + } + + err := AddJob(jobInfo) + assertions.NotNil(err) + assertions.Equal("missing required job identity: { type1}", err.Error()) +} + +func TestAddJobWhenTargetUriMissing_shouldReturnError(t *testing.T) { + assertions := require.New(t) + allJobs["type1"] = make(map[string]JobInfo) + jobInfo := JobInfo{ + InfoTypeIdentity: "type1", + InfoJobIdentity: "job1", + } + + err := AddJob(jobInfo) + assertions.NotNil(err) + assertions.Equal("missing required target URI: { job1 type1}", err.Error()) + clearAll() } diff --git a/dmaap-mediator-producer/internal/restclient/HTTPClient.go b/dmaap-mediator-producer/internal/restclient/HTTPClient.go index c6eb24c7..78a02b6f 100644 --- a/dmaap-mediator-producer/internal/restclient/HTTPClient.go +++ b/dmaap-mediator-producer/internal/restclient/HTTPClient.go @@ -94,6 +94,7 @@ func isResponseSuccess(statusCode int) bool { } func getRequestError(response *http.Response) RequestError { + defer response.Body.Close() responseData, _ := io.ReadAll(response.Body) putError := RequestError{ StatusCode: response.StatusCode,