feat(verify): scalar arguments for -call invocations
This commit is contained in:
@@ -156,3 +156,41 @@ func TestBufPoolBuildArgs(t *testing.T) {
|
||||
t.Errorf("src.len = %d, want 128", args[32])
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseScalarArgs(t *testing.T) {
|
||||
m, err := ParseScalarArgs("n=57,base=0x1f,x= 12 ")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if m["n"] != 57 || m["base"] != 0x1f || m["x"] != 12 {
|
||||
t.Fatalf("parsed %+v", m)
|
||||
}
|
||||
if _, err := ParseScalarArgs("n"); err == nil {
|
||||
t.Error("name-only spec must fail")
|
||||
}
|
||||
if _, err := ParseScalarArgs("n=zz"); err == nil {
|
||||
t.Error("bad value must fail")
|
||||
}
|
||||
}
|
||||
|
||||
func TestApplyScalarArgs(t *testing.T) {
|
||||
layout := []ArgOffset{
|
||||
{Name: "text", Typ: "*byte", Offset: 0, Size: 8, IsPtr: true},
|
||||
{Name: "n", Typ: "int", Offset: 8, Size: 8, IsPtr: false},
|
||||
}
|
||||
args := make([]byte, 16)
|
||||
if err := ApplyScalarArgs(args, layout, map[string]uint64{"n": 0x1f}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if got := args[8]; got != 0x1f {
|
||||
t.Fatalf("args[8] = %d, want 31", got)
|
||||
}
|
||||
// Pointer parameters reject scalar writes.
|
||||
if err := ApplyScalarArgs(args, layout, map[string]uint64{"text": 5}); err == nil {
|
||||
t.Fatal("pointer param must reject a scalar write")
|
||||
}
|
||||
// Unknown names reject.
|
||||
if err := ApplyScalarArgs(args, layout, map[string]uint64{"nope": 1}); err == nil {
|
||||
t.Fatal("unknown param must reject")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user