aboutsummaryrefslogtreecommitdiffstats
path: root/core/vm/sqlvm/runtime/functions_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'core/vm/sqlvm/runtime/functions_test.go')
-rw-r--r--core/vm/sqlvm/runtime/functions_test.go54
1 files changed, 54 insertions, 0 deletions
diff --git a/core/vm/sqlvm/runtime/functions_test.go b/core/vm/sqlvm/runtime/functions_test.go
index bd9d460b5..54fa75816 100644
--- a/core/vm/sqlvm/runtime/functions_test.go
+++ b/core/vm/sqlvm/runtime/functions_test.go
@@ -409,3 +409,57 @@ func (s *FunctionSuite) TestFnMsgData() {
}
}
}
+
+func (s *FunctionSuite) TestFnTxOrigin() {
+ type blockTxOriginCase struct {
+ Name string
+ Address dexCommon.Address
+ Length uint64
+ Res []byte
+ Err error
+ }
+
+ res := []byte{
+ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
+ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
+ 0x01, 0x23, 0x45, 0x67}
+ address := dexCommon.BytesToAddress(res)
+
+ testcases := []blockTxOriginCase{
+ {"address with length 1", address, 1, res, nil},
+ {"address with length 10", address, 10, res, nil},
+ {"address with length 0", address, 0, res, nil},
+ }
+
+ callFn := func(c blockTxOriginCase) (*Operand, error) {
+ return fnTxOrigin(
+ &common.Context{
+ Context: vm.Context{Origin: c.Address},
+ },
+ nil,
+ c.Length)
+ }
+
+ meta := []ast.DataType{ast.ComposeDataType(ast.DataTypeMajorAddress, 0)}
+
+ for idx, tCase := range testcases {
+ r, err := callFn(tCase)
+ s.Require().Equal(
+ tCase.Err, err,
+ "Index: %v. Error not expected: %v != %v", idx, tCase.Err, err)
+ s.Require().Equal(
+ meta, r.Meta,
+ "Index: %v. Meta not equal: %v != %v", idx, meta, r.Meta)
+ s.Require().Equal(
+ uint64(len(r.Data)), tCase.Length,
+ "Index: %v. Length not equal: %v != %v", idx, len(r.Data), tCase.Length)
+
+ for i := 0; i < len(r.Data); i++ {
+ s.Require().Equal(
+ tCase.Res, r.Data[i][0].Bytes,
+ "Index: %v. Data Index: %v. Value not equal: %v != %v",
+ idx, i, tCase.Res, r.Data[i][0].Value)
+ }
+ }
+}
+