github.com/braveheart12/just@v0.8.7/ledger/artifactmanager/heavy_test.go (about)

     1  /*
     2   *    Copyright 2019 Insolar Technologies
     3   *
     4   *    Licensed under the Apache License, Version 2.0 (the "License");
     5   *    you may not use this file except in compliance with the License.
     6   *    You may obtain a copy of the License at
     7   *
     8   *        http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   *    Unless required by applicable law or agreed to in writing, software
    11   *    distributed under the License is distributed on an "AS IS" BASIS,
    12   *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   *    See the License for the specific language governing permissions and
    14   *    limitations under the License.
    15   */
    16  
    17  package artifactmanager
    18  
    19  import (
    20  	"context"
    21  	"testing"
    22  
    23  	"github.com/dgraph-io/badger"
    24  	"github.com/insolar/insolar/component"
    25  	"github.com/insolar/insolar/instrumentation/inslogger"
    26  	"github.com/insolar/insolar/ledger/recentstorage"
    27  	"github.com/insolar/insolar/ledger/storage"
    28  	"github.com/insolar/insolar/ledger/storage/nodes"
    29  	"github.com/insolar/insolar/ledger/storage/storagetest"
    30  	"github.com/insolar/insolar/platformpolicy"
    31  	"github.com/insolar/insolar/testutils"
    32  	"github.com/stretchr/testify/suite"
    33  
    34  	"github.com/insolar/insolar/core"
    35  	"github.com/insolar/insolar/core/message"
    36  	"github.com/stretchr/testify/assert"
    37  	"github.com/stretchr/testify/require"
    38  )
    39  
    40  type heavySuite struct {
    41  	suite.Suite
    42  
    43  	cm      *component.Manager
    44  	ctx     context.Context
    45  	cleaner func()
    46  	db      storage.DBContext
    47  
    48  	scheme        core.PlatformCryptographyScheme
    49  	pulseTracker  storage.PulseTracker
    50  	nodeStorage   nodes.Accessor
    51  	objectStorage storage.ObjectStorage
    52  	jetStorage    storage.JetStorage
    53  	dropStorage   storage.DropStorage
    54  }
    55  
    56  func NewHeavySuite() *heavySuite {
    57  	return &heavySuite{
    58  		Suite: suite.Suite{},
    59  	}
    60  }
    61  
    62  // Init and run suite
    63  func TestHeavySuite(t *testing.T) {
    64  	suite.Run(t, NewHeavySuite())
    65  }
    66  
    67  func (s *heavySuite) BeforeTest(suiteName, testName string) {
    68  	s.cm = &component.Manager{}
    69  	s.ctx = inslogger.TestContext(s.T())
    70  
    71  	db, cleaner := storagetest.TmpDB(s.ctx, s.T())
    72  	s.cleaner = cleaner
    73  	s.db = db
    74  	s.scheme = platformpolicy.NewPlatformCryptographyScheme()
    75  	s.jetStorage = storage.NewJetStorage()
    76  	s.nodeStorage = nodes.NewStorage()
    77  	s.pulseTracker = storage.NewPulseTracker()
    78  	s.objectStorage = storage.NewObjectStorage()
    79  	s.dropStorage = storage.NewDropStorage(10)
    80  
    81  	s.cm.Inject(
    82  		s.scheme,
    83  		s.db,
    84  		s.jetStorage,
    85  		s.nodeStorage,
    86  		s.pulseTracker,
    87  		s.objectStorage,
    88  		s.dropStorage,
    89  	)
    90  
    91  	err := s.cm.Init(s.ctx)
    92  	if err != nil {
    93  		s.T().Error("ComponentManager init failed", err)
    94  	}
    95  	err = s.cm.Start(s.ctx)
    96  	if err != nil {
    97  		s.T().Error("ComponentManager start failed", err)
    98  	}
    99  }
   100  
   101  func (s *heavySuite) AfterTest(suiteName, testName string) {
   102  	err := s.cm.Stop(s.ctx)
   103  	if err != nil {
   104  		s.T().Error("ComponentManager stop failed", err)
   105  	}
   106  	s.cleaner()
   107  }
   108  
   109  func (s *heavySuite) TestLedgerArtifactManager_handleHeavy() {
   110  	jetID := testutils.RandomJet()
   111  
   112  	// prepare mock
   113  	heavysync := testutils.NewHeavySyncMock(s.T())
   114  	heavysync.StartMock.Return(nil)
   115  	heavysync.StoreMock.Set(func(ctx context.Context, jetID core.RecordID, pn core.PulseNumber, kvs []core.KV) error {
   116  		return s.db.StoreKeyValues(ctx, kvs)
   117  	})
   118  	heavysync.StopMock.Return(nil)
   119  
   120  	recentIndexMock := recentstorage.NewRecentIndexStorageMock(s.T())
   121  	recentIndexMock.AddObjectMock.Return()
   122  	pendingMock := recentstorage.NewPendingStorageMock(s.T())
   123  	pendingMock.RemovePendingRequestMock.Return()
   124  	provideMock := recentstorage.NewProviderMock(s.T())
   125  	provideMock.GetIndexStorageMock.Return(recentIndexMock)
   126  	provideMock.GetPendingStorageMock.Return(pendingMock)
   127  
   128  	certificate := testutils.NewCertificateMock(s.T())
   129  	certificate.GetRoleMock.Return(core.StaticRoleHeavyMaterial)
   130  
   131  	// message hanler with mok
   132  	mh := NewMessageHandler(nil, certificate)
   133  	mh.JetStorage = s.jetStorage
   134  	mh.Nodes = s.nodeStorage
   135  	mh.DBContext = s.db
   136  	mh.PulseTracker = s.pulseTracker
   137  	mh.ObjectStorage = s.objectStorage
   138  	mh.RecentStorageProvider = provideMock
   139  
   140  	mh.HeavySync = heavysync
   141  
   142  	payload := []core.KV{
   143  		{K: []byte("ABC"), V: []byte("CDE")},
   144  		{K: []byte("ABC"), V: []byte("CDE")},
   145  		{K: []byte("CDE"), V: []byte("ABC")},
   146  	}
   147  
   148  	parcel := &message.Parcel{
   149  		Msg: &message.HeavyPayload{
   150  			JetID:   jetID,
   151  			Records: payload,
   152  		},
   153  	}
   154  
   155  	var err error
   156  	_, err = mh.handleHeavyPayload(s.ctx, parcel)
   157  	require.NoError(s.T(), err)
   158  
   159  	badgerdb := s.db.GetBadgerDB()
   160  	err = badgerdb.View(func(tx *badger.Txn) error {
   161  		for _, kv := range payload {
   162  			item, err := tx.Get(kv.K)
   163  			if !assert.NoError(s.T(), err) {
   164  				continue
   165  			}
   166  			value, err := item.Value()
   167  			if !assert.NoError(s.T(), err) {
   168  				continue
   169  			}
   170  			assert.Equal(s.T(), kv.V, value)
   171  		}
   172  		return nil
   173  	})
   174  	require.NoError(s.T(), err)
   175  }