123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- package test
- import (
- "fmt"
- "testing"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/private/cache"
- "github.com/ethereum/go-ethereum/private/engine"
- "github.com/ethereum/go-ethereum/private/engine/qlightptm"
- "github.com/ethereum/go-ethereum/qlight"
- "github.com/golang/mock/gomock"
- gocache "github.com/patrickmn/go-cache"
- "github.com/stretchr/testify/assert"
- )
- func TestClientCache_AddPrivateBlock(t *testing.T) {
- assert := assert.New(t)
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- memDB := rawdb.NewMemoryDatabase()
- cacheWithEmpty := NewMockCacheWithEmpty(ctrl)
- gocache := gocache.New(cache.DefaultExpiration, cache.CleanupInterval)
- clientCache, _ := qlight.NewClientCacheWithEmpty(memDB, cacheWithEmpty, gocache)
- txHash1 := common.BytesToEncryptedPayloadHash([]byte("TXHash1"))
- ptd1 := qlight.PrivateTransactionData{
- Hash: &txHash1,
- Payload: []byte("payload"),
- Extra: &engine.ExtraMetadata{
- ACHashes: nil,
- ACMerkleRoot: common.Hash{},
- PrivacyFlag: 0,
- ManagedParties: nil,
- Sender: "",
- MandatoryRecipients: nil,
- },
- IsSender: false,
- }
- blockPrivateData := qlight.BlockPrivateData{
- BlockHash: common.StringToHash("BlockHash"),
- PSI: "",
- PrivateStateRoot: common.StringToHash("PrivateStateRoot"),
- PrivateTransactions: []qlight.PrivateTransactionData{ptd1},
- }
- var capturedCacheItem *qlightptm.CachablePrivateTransactionData
- cacheWithEmpty.EXPECT().Cache(gomock.Any()).DoAndReturn(func(privateTxData *qlightptm.CachablePrivateTransactionData) error {
- capturedCacheItem = privateTxData
- return nil
- })
- clientCache.AddPrivateBlock(blockPrivateData)
- assert.Equal(fmt.Sprintf("0x%x", ptd1.Payload), capturedCacheItem.QuorumPrivateTxData.Payload)
- assert.Equal(ptd1.Hash, &capturedCacheItem.Hash)
- psr, _ := gocache.Get(blockPrivateData.BlockHash.ToBase64())
- assert.Equal(blockPrivateData.PrivateStateRoot.ToBase64(), psr)
- }
- func TestClientCache_ValidatePrivateStateRootSuccess(t *testing.T) {
- assert := assert.New(t)
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- memDB := rawdb.NewMemoryDatabase()
- cacheWithEmpty := NewMockCacheWithEmpty(ctrl)
- gocache := gocache.New(cache.DefaultExpiration, cache.CleanupInterval)
- clientCache, _ := qlight.NewClientCacheWithEmpty(memDB, cacheWithEmpty, gocache)
- publicStateRoot := common.StringToHash("PublicStateRoot")
- blockPrivateData := qlight.BlockPrivateData{
- BlockHash: common.StringToHash("BlockHash"),
- PSI: "",
- PrivateStateRoot: common.StringToHash("PrivateStateRoot"),
- PrivateTransactions: []qlight.PrivateTransactionData{},
- }
- clientCache.AddPrivateBlock(blockPrivateData)
- rawdb.WritePrivateStateRoot(memDB, publicStateRoot, blockPrivateData.PrivateStateRoot)
- err := clientCache.ValidatePrivateStateRoot(blockPrivateData.BlockHash, publicStateRoot)
- assert.Nil(err)
- }
- func TestClientCache_ValidatePrivateStateRootMismatch(t *testing.T) {
- assert := assert.New(t)
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- memDB := rawdb.NewMemoryDatabase()
- cacheWithEmpty := NewMockCacheWithEmpty(ctrl)
- gocache := gocache.New(cache.DefaultExpiration, cache.CleanupInterval)
- clientCache, _ := qlight.NewClientCacheWithEmpty(memDB, cacheWithEmpty, gocache)
- publicStateRoot := common.StringToHash("PublicStateRoot")
- blockPrivateData := qlight.BlockPrivateData{
- BlockHash: common.StringToHash("BlockHash"),
- PSI: "",
- PrivateStateRoot: common.StringToHash("PrivateStateRoot"),
- PrivateTransactions: []qlight.PrivateTransactionData{},
- }
- clientCache.AddPrivateBlock(blockPrivateData)
- rawdb.WritePrivateStateRoot(memDB, publicStateRoot, common.StringToHash("Mismatch"))
- err := clientCache.ValidatePrivateStateRoot(blockPrivateData.BlockHash, publicStateRoot)
- assert.Error(err)
- }
- func TestClientCache_ValidatePrivateStateRootNoDataInClientCache(t *testing.T) {
- assert := assert.New(t)
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- memDB := rawdb.NewMemoryDatabase()
- cacheWithEmpty := NewMockCacheWithEmpty(ctrl)
- gocache := gocache.New(cache.DefaultExpiration, cache.CleanupInterval)
- clientCache, _ := qlight.NewClientCacheWithEmpty(memDB, cacheWithEmpty, gocache)
- publicStateRoot := common.StringToHash("PublicStateRoot")
- blockPrivateData := qlight.BlockPrivateData{
- BlockHash: common.StringToHash("BlockHash"),
- PSI: "",
- PrivateStateRoot: common.StringToHash("PrivateStateRoot"),
- PrivateTransactions: []qlight.PrivateTransactionData{},
- }
- rawdb.WritePrivateStateRoot(memDB, publicStateRoot, blockPrivateData.PrivateStateRoot)
- err := clientCache.ValidatePrivateStateRoot(blockPrivateData.BlockHash, publicStateRoot)
- assert.Nil(err)
- }
|