aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTaylor Gerring <taylor.gerring@gmail.com>2015-03-27 03:31:00 +0800
committerTaylor Gerring <taylor.gerring@gmail.com>2015-03-27 03:31:00 +0800
commit81f36df910533de63dc5ac66f38b5481961cc0c8 (patch)
tree3c6bf52b299ae7dba1b7409632ab500d10a915e7
parentddcc8e1673f240556f7a9394d5fbc9ed609a4931 (diff)
downloaddexon-81f36df910533de63dc5ac66f38b5481961cc0c8.tar.gz
dexon-81f36df910533de63dc5ac66f38b5481961cc0c8.tar.zst
dexon-81f36df910533de63dc5ac66f38b5481961cc0c8.zip
CompileArgs
-rw-r--r--rpc/args.go12
-rw-r--r--rpc/args_test.go30
2 files changed, 38 insertions, 4 deletions
diff --git a/rpc/args.go b/rpc/args.go
index c11ffa3cc..0169ece58 100644
--- a/rpc/args.go
+++ b/rpc/args.go
@@ -617,14 +617,18 @@ type CompileArgs struct {
func (args *CompileArgs) UnmarshalJSON(b []byte) (err error) {
var obj []interface{}
- r := bytes.NewReader(b)
- if err := json.NewDecoder(r).Decode(&obj); err != nil {
+ if err := json.Unmarshal(b, &obj); err != nil {
return NewDecodeParamError(err.Error())
}
- if len(obj) > 0 {
- args.Source = obj[0].(string)
+ if len(obj) < 1 {
+ return NewInsufficientParamsError(len(obj), 1)
+ }
+ argstr, ok := obj[0].(string)
+ if !ok {
+ return NewInvalidTypeError("arg0", "is not a string")
}
+ args.Source = argstr
return nil
}
diff --git a/rpc/args_test.go b/rpc/args_test.go
index 0b243e760..7cb63b67e 100644
--- a/rpc/args_test.go
+++ b/rpc/args_test.go
@@ -1126,6 +1126,36 @@ func TestCompileArgs(t *testing.T) {
}
}
+func TestCompileArgsInvalid(t *testing.T) {
+ input := `{}`
+
+ args := new(CompileArgs)
+ str := ExpectDecodeParamError(json.Unmarshal([]byte(input), args))
+ if len(str) > 0 {
+ t.Error(str)
+ }
+}
+
+func TestCompileArgsEmpty(t *testing.T) {
+ input := `[]`
+
+ args := new(CompileArgs)
+ str := ExpectInsufficientParamsError(json.Unmarshal([]byte(input), args))
+ if len(str) > 0 {
+ t.Error(str)
+ }
+}
+
+func TestCompileArgsBool(t *testing.T) {
+ input := `[false]`
+
+ args := new(CompileArgs)
+ str := ExpectInvalidTypeError(json.Unmarshal([]byte(input), args))
+ if len(str) > 0 {
+ t.Error(str)
+ }
+}
+
func TestFilterStringArgs(t *testing.T) {
input := `["pending"]`
expected := new(FilterStringArgs)