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 }