Skip to content

Commit

Permalink
Merge pull request #23 from fisuda/feature/check_broker_type
Browse files Browse the repository at this point in the history
Check broker type in entity command.
  • Loading branch information
fisuda committed Dec 16, 2020
2 parents 3b5a396 + a83182d commit 9ebd3ea
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 36 deletions.
29 changes: 21 additions & 8 deletions internal/ngsicmd/entity.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,15 @@ func entityCreate(c *cli.Context) error {
return &ngsiCmdError{funcName, 2, err.Error(), err}
}

if client.IsNgsiLd() {
if c.IsSet("keyValues") {
return &ngsiCmdError{funcName, 3, "--keyValues only available on NGSIv2", err}
}
if c.IsSet("upsert") {
return &ngsiCmdError{funcName, 4, "--upsert only available on NGSIv2", err}
}
}

client.SetPath("/entities")

var opts = []string{"keyValues", "upsert"}
Expand All @@ -61,22 +70,22 @@ func entityCreate(c *cli.Context) error {

b, err := readAll(c, ngsi)
if err != nil {
return &ngsiCmdError{funcName, 3, err.Error(), err}
return &ngsiCmdError{funcName, 5, err.Error(), err}
}

if client.IsSafeString() {
b, err = ngsilib.JSONSafeStringEncode(b)
if err != nil {
return &ngsiCmdError{funcName, 4, err.Error(), err}
return &ngsiCmdError{funcName, 6, err.Error(), err}
}
}

res, body, err := client.HTTPPost(b)
if err != nil {
return &ngsiCmdError{funcName, 5, err.Error(), err}
return &ngsiCmdError{funcName, 7, err.Error(), err}
}
if res.StatusCode != http.StatusCreated && res.StatusCode != http.StatusNoContent {
return &ngsiCmdError{funcName, 6, fmt.Sprintf("%s %s", res.Status, string(body)), nil}
return &ngsiCmdError{funcName, 8, fmt.Sprintf("%s %s", res.Status, string(body)), nil}
}

return nil
Expand Down Expand Up @@ -134,6 +143,10 @@ func entityUpsert(c *cli.Context) error {
return &ngsiCmdError{funcName, 2, err.Error(), err}
}

if client.IsNgsiLd() {
return &ngsiCmdError{funcName, 3, "only available on NGSIv2", err}
}

client.SetPath("/entities")

v := url.Values{}
Expand All @@ -148,22 +161,22 @@ func entityUpsert(c *cli.Context) error {

b, err := readAll(c, ngsi)
if err != nil {
return &ngsiCmdError{funcName, 3, err.Error(), err}
return &ngsiCmdError{funcName, 4, err.Error(), err}
}

if client.IsSafeString() {
b, err = ngsilib.JSONSafeStringEncode(b)
if err != nil {
return &ngsiCmdError{funcName, 4, err.Error(), err}
return &ngsiCmdError{funcName, 5, err.Error(), err}
}
}

res, body, err := client.HTTPPost(b)
if err != nil {
return &ngsiCmdError{funcName, 5, err.Error(), err}
return &ngsiCmdError{funcName, 6, err.Error(), err}
}
if res.StatusCode != http.StatusCreated && res.StatusCode != http.StatusNoContent {
return &ngsiCmdError{funcName, 6, fmt.Sprintf("%s %s", res.Status, string(body)), nil}
return &ngsiCmdError{funcName, 7, fmt.Sprintf("%s %s", res.Status, string(body)), nil}
}

return nil
Expand Down
117 changes: 89 additions & 28 deletions internal/ngsicmd/entity_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,61 @@ func TestEntityCreateErrorNewClient(t *testing.T) {
}
}

func TestEntityCreateErrorLdKeyValues(t *testing.T) {
ngsi, set, app, _ := setupTest()

setupAddBroker(t, ngsi, "orion", "https://orion", "ld")

reqRes := MockHTTPReqRes{}
reqRes.Res.StatusCode = http.StatusOK
reqRes.Path = "/ngsi-ld/v1/entities"
reqRes.ResHeader = http.Header{"Ngsild-Results-Count": []string{"8"}}
mock := NewMockHTTP()
mock.ReqRes = append(mock.ReqRes, reqRes)
ngsi.HTTP = mock
setupFlagString(set, "host")
setupFlagBool(set, "keyValues")

c := cli.NewContext(app, set, nil)
_ = set.Parse([]string{"--host=orion", "--keyValues"})
err := entityCreate(c)

if assert.Error(t, err) {
ngsiErr := err.(*ngsiCmdError)
assert.Equal(t, 3, ngsiErr.ErrNo)
assert.Equal(t, "--keyValues only available on NGSIv2", ngsiErr.Message)
} else {
t.FailNow()
}
}

func TestEntityCreateErrorLdUpsert(t *testing.T) {
ngsi, set, app, _ := setupTest()

setupAddBroker(t, ngsi, "orion", "https://orion", "ld")

reqRes := MockHTTPReqRes{}
reqRes.Res.StatusCode = http.StatusOK
reqRes.Path = "/ngsi-ld/v1/entities"
reqRes.ResHeader = http.Header{"Ngsild-Results-Count": []string{"8"}}
mock := NewMockHTTP()
mock.ReqRes = append(mock.ReqRes, reqRes)
ngsi.HTTP = mock
setupFlagString(set, "host")
setupFlagBool(set, "upsert")

c := cli.NewContext(app, set, nil)
_ = set.Parse([]string{"--host=orion", "--upsert"})
err := entityCreate(c)

if assert.Error(t, err) {
ngsiErr := err.(*ngsiCmdError)
assert.Equal(t, 4, ngsiErr.ErrNo)
assert.Equal(t, "--upsert only available on NGSIv2", ngsiErr.Message)
} else {
t.FailNow()
}
}
func TestEntityCreateErrorReadAll(t *testing.T) {
ngsi, set, app, _ := setupTest()

Expand All @@ -153,7 +208,7 @@ func TestEntityCreateErrorReadAll(t *testing.T) {

if assert.Error(t, err) {
ngsiErr := err.(*ngsiCmdError)
assert.Equal(t, 3, ngsiErr.ErrNo)
assert.Equal(t, 5, ngsiErr.ErrNo)
assert.Equal(t, "data is empty", ngsiErr.Message)
} else {
t.FailNow()
Expand Down Expand Up @@ -181,7 +236,7 @@ func TestEntityCreateErrorSafeString(t *testing.T) {

if assert.Error(t, err) {
ngsiErr := err.(*ngsiCmdError)
assert.Equal(t, 4, ngsiErr.ErrNo)
assert.Equal(t, 6, ngsiErr.ErrNo)
assert.Equal(t, "json error", ngsiErr.Message)
} else {
t.FailNow()
Expand All @@ -208,7 +263,7 @@ func TestEntityCreateErrorHTTP(t *testing.T) {

if assert.Error(t, err) {
ngsiErr := err.(*ngsiCmdError)
assert.Equal(t, 5, ngsiErr.ErrNo)
assert.Equal(t, 7, ngsiErr.ErrNo)
assert.Equal(t, "url error", ngsiErr.Message)
} else {
t.FailNow()
Expand All @@ -234,7 +289,7 @@ func TestEntityCreateErrorHTTPStatus(t *testing.T) {

if assert.Error(t, err) {
ngsiErr := err.(*ngsiCmdError)
assert.Equal(t, 6, ngsiErr.ErrNo)
assert.Equal(t, 8, ngsiErr.ErrNo)
} else {
t.FailNow()
}
Expand Down Expand Up @@ -477,26 +532,6 @@ func TestEntityUpsertV2SafeString(t *testing.T) {
assert.NoError(t, err)
}

func TestEntityUpsertLd(t *testing.T) {
ngsi, set, app, _ := setupTest()

setupAddBroker(t, ngsi, "orion", "https://orion", "ld")

reqRes := MockHTTPReqRes{}
reqRes.Res.StatusCode = http.StatusNoContent
reqRes.Path = "/ngsi-ld/v1/entities"
mock := NewMockHTTP()
mock.ReqRes = append(mock.ReqRes, reqRes)
ngsi.HTTP = mock
setupFlagString(set, "host,data")

c := cli.NewContext(app, set, nil)
_ = set.Parse([]string{"--host=orion", "--data={\"id\":\"urn:ngsi-ld:Product:010\",\"type\":\"Product\",\"name\":{\"type\":\"Text\",\"value\":\"Lemonade\"},\"size\":{\"type\":\"Text\",\"value\":\"S\"},\"price\":{\"type\":\"Integer\",\"value\":99}}"})
err := entityUpsert(c)

assert.NoError(t, err)
}

func TestEntityUpsertErrorInitCmd(t *testing.T) {
_, set, app, _ := setupTest()

Expand Down Expand Up @@ -532,6 +567,32 @@ func TestEntityUpsertErrorNewClient(t *testing.T) {
}
}

func TestEntityUpsertErrorLd(t *testing.T) {
ngsi, set, app, _ := setupTest()

setupAddBroker(t, ngsi, "orion", "https://orion", "ld")

reqRes := MockHTTPReqRes{}
reqRes.Res.StatusCode = http.StatusNoContent
reqRes.Path = "/ngsi-ld/v1/entities"
mock := NewMockHTTP()
mock.ReqRes = append(mock.ReqRes, reqRes)
ngsi.HTTP = mock
setupFlagString(set, "host,data")

c := cli.NewContext(app, set, nil)
_ = set.Parse([]string{"--host=orion", "--data={\"id\":\"urn:ngsi-ld:Product:010\",\"type\":\"Product\",\"name\":{\"type\":\"Text\",\"value\":\"Lemonade\"},\"size\":{\"type\":\"Text\",\"value\":\"S\"},\"price\":{\"type\":\"Integer\",\"value\":99}}"})
err := entityUpsert(c)

if assert.Error(t, err) {
ngsiErr := err.(*ngsiCmdError)
assert.Equal(t, 3, ngsiErr.ErrNo)
assert.Equal(t, "only available on NGSIv2", ngsiErr.Message)
} else {
t.FailNow()
}
}

func TestEntityUpsertErrorReadAll(t *testing.T) {
ngsi, set, app, _ := setupTest()

Expand All @@ -552,7 +613,7 @@ func TestEntityUpsertErrorReadAll(t *testing.T) {

if assert.Error(t, err) {
ngsiErr := err.(*ngsiCmdError)
assert.Equal(t, 3, ngsiErr.ErrNo)
assert.Equal(t, 4, ngsiErr.ErrNo)
assert.Equal(t, "data is empty", ngsiErr.Message)
} else {
t.FailNow()
Expand Down Expand Up @@ -580,7 +641,7 @@ func TestEntityUpsertErrorSafeString(t *testing.T) {

if assert.Error(t, err) {
ngsiErr := err.(*ngsiCmdError)
assert.Equal(t, 4, ngsiErr.ErrNo)
assert.Equal(t, 5, ngsiErr.ErrNo)
assert.Equal(t, "json error", ngsiErr.Message)
} else {
t.FailNow()
Expand All @@ -607,7 +668,7 @@ func TestEntityUpsertErrorHTTP(t *testing.T) {

if assert.Error(t, err) {
ngsiErr := err.(*ngsiCmdError)
assert.Equal(t, 5, ngsiErr.ErrNo)
assert.Equal(t, 6, ngsiErr.ErrNo)
assert.Equal(t, "url error", ngsiErr.Message)
} else {
t.FailNow()
Expand All @@ -633,7 +694,7 @@ func TestEntityUpsertErrorHTTPStatus(t *testing.T) {

if assert.Error(t, err) {
ngsiErr := err.(*ngsiCmdError)
assert.Equal(t, 6, ngsiErr.ErrNo)
assert.Equal(t, 7, ngsiErr.ErrNo)
} else {
t.FailNow()
}
Expand Down

0 comments on commit 9ebd3ea

Please sign in to comment.