forked from TrueCloudLab/neoneo-go
rpcsrv: fix "subscribe" parameters handling
If it's a subscription for AERs, we need to check the filter's state only if it has been provided, otherwise filter is always valid.
This commit is contained in:
parent
d043139b66
commit
ddaba9e74d
2 changed files with 22 additions and 2 deletions
|
@ -2429,7 +2429,7 @@ func (s *Server) subscribe(reqParams params.Params, sub *subscriber) (interface{
|
||||||
case neorpc.ExecutionEventID:
|
case neorpc.ExecutionEventID:
|
||||||
flt := new(neorpc.ExecutionFilter)
|
flt := new(neorpc.ExecutionFilter)
|
||||||
err = jd.Decode(flt)
|
err = jd.Decode(flt)
|
||||||
if err == nil && (flt.State != nil && (*flt.State == "HALT" || *flt.State == "FAULT")) {
|
if err == nil && (flt.State == nil || (*flt.State == "HALT" || *flt.State == "FAULT")) {
|
||||||
filter = *flt
|
filter = *flt
|
||||||
} else if err == nil {
|
} else if err == nil {
|
||||||
err = errors.New("invalid state")
|
err = errors.New("invalid state")
|
||||||
|
|
|
@ -228,7 +228,7 @@ func TestFilteredSubscriptions(t *testing.T) {
|
||||||
require.Equal(t, "my_pretty_notification", n)
|
require.Equal(t, "my_pretty_notification", n)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"execution matching": {
|
"execution matching state": {
|
||||||
params: `["transaction_executed", {"state":"HALT"}]`,
|
params: `["transaction_executed", {"state":"HALT"}]`,
|
||||||
check: func(t *testing.T, resp *neorpc.Notification) {
|
check: func(t *testing.T, resp *neorpc.Notification) {
|
||||||
rmap := resp.Payload[0].(map[string]interface{})
|
rmap := resp.Payload[0].(map[string]interface{})
|
||||||
|
@ -237,6 +237,26 @@ func TestFilteredSubscriptions(t *testing.T) {
|
||||||
require.Equal(t, "HALT", st)
|
require.Equal(t, "HALT", st)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"execution matching container": {
|
||||||
|
params: `["transaction_executed", {"container":"` + deploymentTxHash + `"}]`,
|
||||||
|
check: func(t *testing.T, resp *neorpc.Notification) {
|
||||||
|
rmap := resp.Payload[0].(map[string]interface{})
|
||||||
|
require.Equal(t, neorpc.ExecutionEventID, resp.Event)
|
||||||
|
tx := rmap["container"].(string)
|
||||||
|
require.Equal(t, "0x"+deploymentTxHash, tx)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"execution matching state and container": {
|
||||||
|
params: `["transaction_executed", {"state":"HALT", "container":"` + deploymentTxHash + `"}]`,
|
||||||
|
check: func(t *testing.T, resp *neorpc.Notification) {
|
||||||
|
rmap := resp.Payload[0].(map[string]interface{})
|
||||||
|
require.Equal(t, neorpc.ExecutionEventID, resp.Event)
|
||||||
|
tx := rmap["container"].(string)
|
||||||
|
require.Equal(t, "0x"+deploymentTxHash, tx)
|
||||||
|
st := rmap["vmstate"].(string)
|
||||||
|
require.Equal(t, "HALT", st)
|
||||||
|
},
|
||||||
|
},
|
||||||
"tx non-matching": {
|
"tx non-matching": {
|
||||||
params: `["transaction_added", {"sender":"00112233445566778899aabbccddeeff00112233"}]`,
|
params: `["transaction_added", {"sender":"00112233445566778899aabbccddeeff00112233"}]`,
|
||||||
check: func(t *testing.T, _ *neorpc.Notification) {
|
check: func(t *testing.T, _ *neorpc.Notification) {
|
||||||
|
|
Loading…
Reference in a new issue