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  }