github.com/igggame/nebulas-go@v2.1.0+incompatible/nf/nvm/engine_require_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/state"
     9  	"github.com/nebulasio/go-nebulas/storage"
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  func TestRequireModule(t *testing.T) {
    14  	tests := []struct {
    15  		name         string
    16  		contractPath string
    17  		sourceType   string
    18  		initArgs     string
    19  	}{
    20  		{"deploy test_require_module.js", "./test/test_require_module.js", "js", ""},
    21  	}
    22  
    23  	for _, tt := range tests {
    24  		t.Run(tt.name, func(t *testing.T) {
    25  			data, err := ioutil.ReadFile(tt.contractPath)
    26  			assert.Nil(t, err, "contract path read error")
    27  
    28  			mem, _ := storage.NewMemoryStorage()
    29  			context, _ := state.NewWorldState(dpos.NewDpos(), mem)
    30  			owner, err := context.GetOrCreateUserAccount([]byte("account1"))
    31  			assert.Nil(t, err)
    32  			owner.AddBalance(newUint128FromIntWrapper(10000000))
    33  			contract, _ := context.CreateContractAccount([]byte("account2"), nil, nil)
    34  
    35  			ctx, err := NewContext(mockBlock(), mockTransaction(), contract, context)
    36  			engine := NewV8Engine(ctx)
    37  			engine.SetExecutionLimits(10000, 10000000)
    38  			_, err = engine.DeployAndInit(string(data), tt.sourceType, tt.initArgs)
    39  			assert.Nil(t, err)
    40  			engine.Dispose()
    41  
    42  			engine = NewV8Engine(ctx)
    43  			engine.SetExecutionLimits(10000, 10000000)
    44  			_, err = engine.Call(string(data), tt.sourceType, "requireNULL", "")
    45  			assert.NotNil(t, err)
    46  			engine.Dispose()
    47  
    48  			engine = NewV8Engine(ctx)
    49  			engine.SetExecutionLimits(10000, 10000000)
    50  			_, err = engine.Call(string(data), tt.sourceType, "requireNotExistPath", "")
    51  			assert.NotNil(t, err)
    52  			engine.Dispose()
    53  
    54  			engine = NewV8Engine(ctx)
    55  			engine.SetExecutionLimits(10000, 10000000)
    56  			_, err = engine.Call(string(data), tt.sourceType, "requireCurPath", "")
    57  			assert.NotNil(t, err)
    58  			engine.Dispose()
    59  
    60  			engine = NewV8Engine(ctx)
    61  			engine.SetExecutionLimits(10000, 10000000)
    62  			_, err = engine.Call(string(data), tt.sourceType, "requireNotExistFile", "")
    63  			assert.NotNil(t, err)
    64  			engine.Dispose()
    65  		})
    66  	}
    67  }