Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions cmd/aergosvr/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ var initGenesis = &cobra.Command{

g := core.GetGenesisInfo()
fmt.Printf("genesis block[%s] is created in (%s)\n", base58.Encode(g.Block().GetHash()), cfg.DataDir)

core.Close()
}
},
}
Expand Down
52 changes: 52 additions & 0 deletions contract/vm_dummy/test_files/all_types.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
state.var {
name = state.value(),
list = state.array(),
values = state.map()
}

-- value type

function value_set(new_name)
name:set(new_name)
contract.event("value_set", new_name)
end

function value_get()
return name:get()
end

-- map type

function map_set(key, val)
values[key] = val
contract.event("map_set", key, val)
end

function map_get(key)
return values[key]
end

-- array type

function array_append(val)
list:append(val)
contract.event("array_append", val)
end

function array_set(idx, val)
list[idx] = val
contract.event("array_set", idx, val)
end

function array_get(idx)
return list[idx]
end

function array_length()
return list:length()
end

-- write functions
abi.register(value_set, map_set, array_append, array_set)
-- read-only functions
abi.register_view(value_get, map_get, array_get, array_length)
7 changes: 7 additions & 0 deletions p2p/msgorder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ func Test_pbRequestOrder_SendTo(t *testing.T) {
mockPeerManager := p2pmock.NewMockPeerManager(ctrl)
mockRW := p2pmock.NewMockMsgReadWriter(ctrl)

mockPeerManager.EXPECT().MsgBufSize().Return(writeMsgBufferSize).AnyTimes()
mockRW.EXPECT().WriteMsg(gomock.Any()).Return(tt.writeErr)

peer := newRemotePeer(sampleRemote, 0, mockPeerManager, mockActorServ, logger, factory, &dummySigner{}, mockRW)
Expand Down Expand Up @@ -92,6 +93,7 @@ func Test_pbMessageOrder_SendTo(t *testing.T) {
mockPeerManager := p2pmock.NewMockPeerManager(ctrl)
mockRW := p2pmock.NewMockMsgReadWriter(ctrl)

mockPeerManager.EXPECT().MsgBufSize().Return(writeMsgBufferSize).AnyTimes()
mockRW.EXPECT().WriteMsg(gomock.Any()).Return(tt.writeErr)

peer := newRemotePeer(sampleRemote, 0, mockPeerManager, mockActorServ, logger, factory, &dummySigner{}, mockRW)
Expand Down Expand Up @@ -141,6 +143,8 @@ func Test_pbBlkNoticeOrder_SendTo(t *testing.T) {
mockPeerManager := p2pmock.NewMockPeerManager(ctrl)
mockRW := p2pmock.NewMockMsgReadWriter(ctrl)

mockPeerManager.EXPECT().MsgBufSize().Return(writeMsgBufferSize).AnyTimes()

if tt.keyExist {
mockRW.EXPECT().WriteMsg(gomock.Any()).Return(tt.writeErr).Times(0)
} else {
Expand Down Expand Up @@ -211,6 +215,7 @@ func Test_pbBlkNoticeOrder_SendTo_SkipByHeight(t *testing.T) {
mockPeerManager := p2pmock.NewMockPeerManager(ctrl)
mockRW := p2pmock.NewMockMsgReadWriter(ctrl)

mockPeerManager.EXPECT().MsgBufSize().Return(writeMsgBufferSize).AnyTimes()
writeCnt := 0
mockRW.EXPECT().WriteMsg(gomock.Any()).Do(func(arg interface{}) {
writeCnt++
Expand Down Expand Up @@ -287,6 +292,7 @@ func Test_pbBlkNoticeOrder_SendTo_SkipByTime(t *testing.T) {
mockPeerManager := p2pmock.NewMockPeerManager(ctrl)
mockRW := p2pmock.NewMockMsgReadWriter(ctrl)

mockPeerManager.EXPECT().MsgBufSize().Return(writeMsgBufferSize).AnyTimes()
writeCnt := 0
mockRW.EXPECT().WriteMsg(gomock.Any()).Do(func(arg interface{}) {
writeCnt++
Expand Down Expand Up @@ -350,6 +356,7 @@ func Test_pbTxNoticeOrder_SendTo(t *testing.T) {
mockPeerManager := p2pmock.NewMockPeerManager(ctrl)
mockRW := p2pmock.NewMockMsgReadWriter(ctrl)

mockPeerManager.EXPECT().MsgBufSize().Return(writeMsgBufferSize).AnyTimes()
if tt.keyExist == len(sampleHashes) {
mockRW.EXPECT().WriteMsg(gomock.Any()).Return(tt.writeErr).Times(0)
} else {
Expand Down
2 changes: 1 addition & 1 deletion p2p/p2pcommon/temptype.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
package p2pcommon

// This file describe the command to generate mock objects of imported interfaces
//go:generate sh -c "mockgen github.com/aergoio/aergo/v2/p2p/p2pcommon NTContainer,NetworkTransport | gsed -e 's/[Pp]ackage mock_p2pcommon/package p2pmock/g' > p2p/p2pmock/mock_networktransport.go"
//go:generate sh -c "mockgen github.com/aergoio/aergo/v2/p2p/p2pcommon NTContainer,NetworkTransport | gsed -e 's/[Pp]ackage mock_p2pcommon/package p2pmock/g' > ../p2pmock/mock_networktransport.go"

// in aergo but outside of p2p
//go:generate sh -c "mockgen github.com/aergoio/aergo/v2/types ChainAccessor | sed -e 's/[Pp]ackage mock_types/package p2pmock/g' > ../p2pmock/mock_chainaccessor.go"
Expand Down
16 changes: 15 additions & 1 deletion p2p/p2pmock/mock_peermanager.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 12 additions & 2 deletions p2p/p2pmock/readme.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,23 @@
Prerequisites

NOTE:

At this point, it may not works properly in this document. As the version of Golang has updated, the change in security policy or internal implementation is suspected of not being able to execute properly.

Installing mockgen

the package github.com/golang/mock is superseded by https://github.com/uber/mock in 2021, but we are not ready to migrate
yet by transitive dependencies.

go install github.com/golang/mock/mockgen@v1.6.0
go install github.com/golang/mock/mockgen@v1.4.0

(In the future) Refering to https://github.com/uber-go/mock/ ( go install go.uber.org/mock/mockgen@latest )

Installing stringer

Some generate operations of this project needs stringer tool. It can be installed like below;

go install golang.org/x/tools/cmd/stringer@latest

Examples to generate mock class

Expand All @@ -29,8 +38,9 @@ mockgen -source=p2p/p2pcommon/pool.go -mock_names=WaitingPeerManager=MockWaiting


# Manually generated mock classes
The generate descriptions of these mock objects are in p2p/p2pcommon/temptypes.go . So you can use such like `go generate ./p2p/p2pcommon/temptypes.go` command.
The generate descriptions of these mock objects are in p2p/p2pcommon/temptypes.go . So you can use such like `go generate ./p2p/p2pcommon/temptype.go` command.

# Some files cannot be generated by go generate command. They should be generated using mockgen and gnu sed.
# mock files which are not generated automatically by go generate ./p2p
mockgen github.com/aergoio/aergo/v2/consensus ConsensusAccessor,AergoRaftAccessor | gsed -e 's/^package mock_[a-zA-Z0-9_]\+/package p2pmock/g' > p2p/p2pmock/mock_consensus.go

Expand Down
24 changes: 19 additions & 5 deletions p2p/remotepeer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -330,13 +330,18 @@ func TestRemotePeerImpl_UpdateBlkCache(t *testing.T) {
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()

mockActor := new(p2pmock.MockActorService)
mockPeerManager := new(p2pmock.MockPeerManager)
mockPeerManager := p2pmock.NewMockPeerManager(ctrl)
mockSigner := new(p2pmock.MockMsgSigner)
mockMF := new(p2pmock.MockMoFactory)
sampleConn := p2pcommon.RemoteConn{IP: net.ParseIP(sampleMeta.PrimaryAddress()), Port: sampleMeta.PrimaryPort()}
sampleRemote := p2pcommon.RemoteInfo{Meta: sampleMeta, Connection: sampleConn}

mockPeerManager.EXPECT().MsgBufSize().Return(writeMsgBufferSize).AnyTimes()

target := newRemotePeer(sampleRemote, 0, mockPeerManager, mockActor, logger, mockMF, mockSigner, nil)
for _, hash := range test.inCache {
target.blkHashCache.Add(hash, true)
Expand All @@ -362,13 +367,17 @@ func TestRemotePeerImpl_UpdateTxCache(t *testing.T) {
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
mockActor := new(p2pmock.MockActorService)
mockPeerManager := new(p2pmock.MockPeerManager)
mockPeerManager := p2pmock.NewMockPeerManager(ctrl)
mockSigner := new(p2pmock.MockMsgSigner)
mockMF := new(p2pmock.MockMoFactory)
sampleConn := p2pcommon.RemoteConn{IP: net.ParseIP(sampleMeta.PrimaryAddress()), Port: sampleMeta.PrimaryPort()}
sampleRemote := p2pcommon.RemoteInfo{Meta: sampleMeta, Connection: sampleConn}

mockPeerManager.EXPECT().MsgBufSize().Return(writeMsgBufferSize).AnyTimes()

target := newRemotePeer(sampleRemote, 0, mockPeerManager, mockActor, logger, mockMF, mockSigner, nil)
for _, hash := range test.inCache {
target.txHashCache.Add(hash, true)
Expand Down Expand Up @@ -417,13 +426,15 @@ func TestRemotePeerImpl_GetReceiver(t *testing.T) {
defer ctrl.Finish()

mockActor := new(p2pmock.MockActorService)
mockPeerManager := new(p2pmock.MockPeerManager)
mockPeerManager := p2pmock.NewMockPeerManager(ctrl)
mockSigner := new(p2pmock.MockMsgSigner)
mockMF := new(p2pmock.MockMoFactory)
sampleConn := p2pcommon.RemoteConn{IP: net.ParseIP(sampleMeta.PrimaryAddress()), Port: sampleMeta.PrimaryPort()}
sampleRemote := p2pcommon.RemoteInfo{Meta: sampleMeta, Connection: sampleConn}
mockMo := p2pmock.NewMockMsgOrder(ctrl)

mockMo.EXPECT().GetProtocolID().Return(p2pcommon.GetBlocksRequest).AnyTimes()
mockPeerManager.EXPECT().MsgBufSize().Return(writeMsgBufferSize).AnyTimes()

p := newRemotePeer(sampleRemote, 0, mockPeerManager, mockActor, logger, mockMF, mockSigner, nil)
for _, add := range test.toAdd {
Expand Down Expand Up @@ -471,6 +482,7 @@ func TestRemotePeerImpl_pushTxsNotice(t *testing.T) {
mockMF := p2pmock.NewMockMoFactory(ctrl)
mockSigner := new(p2pmock.MockMsgSigner)

mockPeerManager.EXPECT().MsgBufSize().Return(writeMsgBufferSize).AnyTimes()
mockMO.EXPECT().GetMsgID().Return(p2pcommon.NewMsgID()).AnyTimes()
mockMF.EXPECT().NewMsgTxBroadcastOrder(gomock.Any()).Return(mockMO).
Times(test.expectSend)
Expand All @@ -487,8 +499,6 @@ func TestRemotePeerImpl_pushTxsNotice(t *testing.T) {
}
}
func TestRemotePeer_writeToPeer(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()

rand := uuid.Must(uuid.NewV4())
var sampleMsgID p2pcommon.MsgID
Expand Down Expand Up @@ -518,12 +528,16 @@ func TestRemotePeer_writeToPeer(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()

mockPeerManager := p2pmock.NewMockPeerManager(ctrl)
mockMO := p2pmock.NewMockMsgOrder(ctrl)
mockStream := p2pmock.NewMockStream(ctrl)
dummyRW := p2pmock.NewMockMsgReadWriter(ctrl)
dummyRW.EXPECT().Close().AnyTimes()

mockPeerManager.EXPECT().MsgBufSize().Return(writeMsgBufferSize).AnyTimes()
mockStream.EXPECT().Close().Return(nil).AnyTimes()
mockMO.EXPECT().IsNeedSign().Return(true).AnyTimes()
mockMO.EXPECT().SendTo(gomock.Any()).Return(tt.args.sendErr)
Expand Down
29 changes: 12 additions & 17 deletions rpc/grpcserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ var (
)

var (
ErrUninitAccessor = errors.New("accessor is not initialized")
ErrUninitAccessor = errors.New("accessor is not initilized")

// ErrNotSupportedConsensus = errors.New("not supported by this consensus")
)
Expand Down Expand Up @@ -305,7 +305,7 @@ func (rpc *AergoRPCService) getBlocks(ctx context.Context, in *types.ListParams)
}
}
if in.Asc || in.Offset != 0 {
err = errors.New("has unsupported param")
err = errors.New("Has unsupported param")
}
} else {
end := types.BlockNo(0)
Expand Down Expand Up @@ -564,7 +564,8 @@ func (rpc *AergoRPCService) GetTX(ctx context.Context, in *types.SingleBytes) (*
if err := rpc.checkAuth(ctx, ReadBlockChain); err != nil {
return nil, err
}
if len(in.Value) == 0 || len(in.Value) > maxTxHashLength {
// in.Value is txHash
if in.Value == nil {
return nil, status.Errorf(codes.InvalidArgument, "invalid input hash")
}
result, err := rpc.actorHelper.CallRequestDefaultTimeout(message.MemPoolSvc,
Expand All @@ -589,7 +590,7 @@ func (rpc *AergoRPCService) GetBlockTX(ctx context.Context, in *types.SingleByte
if err := rpc.checkAuth(ctx, ReadBlockChain); err != nil {
return nil, err
}
if len(in.Value) == 0 || len(in.Value) > maxTxHashLength {
if in.Value == nil {
return nil, status.Errorf(codes.InvalidArgument, "invalid input hash")
}
result, err := rpc.hub.RequestFuture(message.ChainSvc,
Expand All @@ -611,9 +612,6 @@ func (rpc *AergoRPCService) SendTX(ctx context.Context, tx *types.Tx) (*types.Co
if err := rpc.checkAuth(ctx, WriteBlockChain); err != nil {
return nil, err
}
if len(tx.Hash) == 0 || len(tx.Hash) > maxTxHashLength {
return nil, status.Errorf(codes.InvalidArgument, "invalid tx hash")
}
if tx.Body == nil {
return nil, status.Errorf(codes.InvalidArgument, "input tx is empty")
}
Expand Down Expand Up @@ -686,7 +684,7 @@ func (rpc *AergoRPCService) CommitTX(ctx context.Context, in *types.TxList) (*ty
return nil, status.Errorf(codes.InvalidArgument, "empty transaction")
}
for _, tx := range in.Txs {
if tx.Body == nil || len(tx.Hash) == 0 || len(tx.Hash) > maxTxHashLength {
if tx.Body == nil {
return nil, status.Errorf(codes.InvalidArgument, "input tx is empty")
}
}
Expand All @@ -707,7 +705,7 @@ func (rpc *AergoRPCService) GetState(ctx context.Context, in *types.SingleBytes)
if err := rpc.checkAuth(ctx, ReadBlockChain); err != nil {
return nil, err
}
if len(in.Value) == 0 {
if in.Value == nil {
return nil, status.Errorf(codes.InvalidArgument, "input account is empty")
}

Expand Down Expand Up @@ -925,7 +923,7 @@ func (rpc *AergoRPCService) SignTX(ctx context.Context, in *types.Tx) (*types.Tx
if err := rpc.checkAuth(ctx, WriteBlockChain); err != nil {
return nil, err
}
if in.Body == nil || len(in.Hash) == 0 || len(in.Hash) > maxTxHashLength {
if in.Body == nil {
return nil, status.Errorf(codes.InvalidArgument, "input tx is empty")
}

Expand All @@ -951,7 +949,7 @@ func (rpc *AergoRPCService) VerifyTX(ctx context.Context, in *types.Tx) (*types.
return nil, err
}
//TODO : verify without account service
if in.Body == nil || len(in.Hash) == 0 || len(in.Hash) > maxTxHashLength {
if in.Body == nil {
return nil, status.Errorf(codes.InvalidArgument, "input tx is empty")
}

Expand Down Expand Up @@ -1120,7 +1118,7 @@ func (rpc *AergoRPCService) GetReceipt(ctx context.Context, in *types.SingleByte
if err := rpc.checkAuth(ctx, ReadBlockChain); err != nil {
return nil, err
}
if len(in.Value) == 0 || len(in.Value) > maxTxHashLength {
if len(in.Value) == 0 {
return nil, status.Errorf(codes.InvalidArgument, "input hash is empty")
}
result, err := rpc.hub.RequestFuture(message.ChainSvc,
Expand Down Expand Up @@ -1174,7 +1172,7 @@ func (rpc *AergoRPCService) QueryContract(ctx context.Context, in *types.Query)
if err := rpc.checkAuth(ctx, ReadBlockChain); err != nil {
return nil, err
}
if len(in.ContractAddress) == 0 || len(in.Queryinfo) == 0 {
if len(in.ContractAddress) == 0 {
return nil, status.Errorf(codes.InvalidArgument, "input contract info is empty")
}
result, err := rpc.hub.RequestFuture(message.ChainSvc,
Expand All @@ -1194,7 +1192,7 @@ func (rpc *AergoRPCService) QueryContractState(ctx context.Context, in *types.St
if err := rpc.checkAuth(ctx, ReadBlockChain); err != nil {
return nil, err
}
if len(in.ContractAddress) == 0 || len(in.Root) == 0 {
if len(in.ContractAddress) == 0 {
return nil, status.Errorf(codes.InvalidArgument, "input contract info is empty")
}
result, err := rpc.hub.RequestFuture(message.ChainSvc,
Expand Down Expand Up @@ -1273,9 +1271,6 @@ func (rpc *AergoRPCService) ListEvents(ctx context.Context, in *types.FilterInfo
if err := rpc.checkAuth(ctx, ReadBlockChain); err != nil {
return nil, err
}
if len(in.ContractAddress) == 0 || len(in.ContractAddress) > types.AddressLength {
return nil, status.Errorf(codes.InvalidArgument, "input contract info is empty")
}
result, err := rpc.hub.RequestFuture(message.ChainSvc,
&message.ListEvents{Filter: in}, defaultActorTimeout, "rpc.(*AergoRPCService).ListEvents").Result()
if err != nil {
Expand Down
Loading
Loading