Finished job creation 03/6703/1
authorelinuxhenrik <henrik.b.andersson@est.tech>
Tue, 7 Sep 2021 00:58:52 +0000 (02:58 +0200)
committerelinuxhenrik <henrik.b.andersson@est.tech>
Tue, 7 Sep 2021 00:58:55 +0000 (02:58 +0200)
Issue-ID: NONRTRIC-585
Signed-off-by: elinuxhenrik <henrik.b.andersson@est.tech>
Change-Id: Ia3d1dd37166b187f9ba60eaacd5029ef1a411278

dmaap-mediator-producer/internal/config/config_test.go
dmaap-mediator-producer/internal/config/registrator_test.go
dmaap-mediator-producer/internal/jobs/jobs.go
dmaap-mediator-producer/internal/jobs/jobs_test.go
dmaap-mediator-producer/internal/restclient/HTTPClient.go

index 2322739..4a65dc0 100644 (file)
@@ -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: "",
index 94dc684..a89c43f 100644 (file)
@@ -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)
index 10eaf68..7347178 100644 (file)
@@ -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)
+}
index 42fc3e2..0941033 100644 (file)
@@ -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()
 }
index c6eb24c..78a02b6 100644 (file)
@@ -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,