github.com/igggame/nebulas-go@v2.1.0+incompatible/nf/nvm/engine_random_test.go (about) 1 package nvm 2 3 import ( 4 "io/ioutil" 5 "testing" 6 7 "github.com/nebulasio/go-nebulas/consensus/dpos" 8 "github.com/nebulasio/go-nebulas/core" 9 "github.com/nebulasio/go-nebulas/core/state" 10 "github.com/nebulasio/go-nebulas/storage" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestMathRandom(t *testing.T) { 15 tests := []struct { 16 filepath string 17 expectedErr error 18 expectedResult string 19 }{ 20 {"test/test_random_enable.js", nil, "\"\""}, 21 {"test/test_random_disable.js", core.ErrExecutionFailed, "Error: Math.random func is not allowed in nvm."}, 22 {"test/test_random_seed.js", core.ErrExecutionFailed, "Error: input seed must be a string"}, 23 } 24 25 for _, tt := range tests { 26 t.Run(tt.filepath, func(t *testing.T) { 27 data, err := ioutil.ReadFile(tt.filepath) 28 assert.Nil(t, err, "filepath read error") 29 30 mem, _ := storage.NewMemoryStorage() 31 context, _ := state.NewWorldState(dpos.NewDpos(), mem) 32 owner, err := context.GetOrCreateUserAccount([]byte("account1")) 33 assert.Nil(t, err) 34 owner.AddBalance(newUint128FromIntWrapper(1000000000)) 35 contract, _ := context.CreateContractAccount([]byte("account2"), nil, nil) 36 ctx, err := NewContext(mockBlock(), mockTransaction(), contract, context) 37 38 engine := NewV8Engine(ctx) 39 engine.SetExecutionLimits(900000, 10000000) 40 result, err := engine.RunScriptSource(string(data), 0) 41 assert.Equal(t, tt.expectedErr, err) 42 assert.Equal(t, tt.expectedResult, result) 43 engine.Dispose() 44 }) 45 } 46 }