github.com/braveheart12/insolar-09-08-19@v0.8.7/ledger/ledgertestutils/ledgertestutils.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 ledgertestutils 18 19 import ( 20 "context" 21 "testing" 22 23 "github.com/gojuno/minimock" 24 "github.com/insolar/insolar/component" 25 "github.com/insolar/insolar/configuration" 26 "github.com/insolar/insolar/core" 27 "github.com/insolar/insolar/instrumentation/inslogger" 28 "github.com/insolar/insolar/ledger" 29 "github.com/insolar/insolar/ledger/artifactmanager" 30 "github.com/insolar/insolar/ledger/pulsemanager" 31 "github.com/insolar/insolar/ledger/recentstorage" 32 "github.com/insolar/insolar/ledger/storage" 33 "github.com/insolar/insolar/ledger/storage/jet" 34 "github.com/insolar/insolar/ledger/storage/nodes" 35 "github.com/insolar/insolar/ledger/storage/storagetest" 36 "github.com/insolar/insolar/log" 37 "github.com/insolar/insolar/messagebus" 38 "github.com/insolar/insolar/network/nodenetwork" 39 "github.com/insolar/insolar/platformpolicy" 40 "github.com/insolar/insolar/testutils" 41 "github.com/insolar/insolar/testutils/testmessagebus" 42 "github.com/stretchr/testify/require" 43 ) 44 45 // TmpLedger crteates ledger on top of temporary database. 46 // Returns *ledger.Ledger and cleanup function. 47 // FIXME: THIS METHOD IS DEPRECATED. USE MOCKS. 48 func TmpLedger(t *testing.T, dir string, handlersRole core.StaticRole, c core.Components, closeJets bool) (*ledger.Ledger, storage.DBContext, func()) { 49 log.Warn("TmpLedger is deprecated. Use mocks.") 50 51 pcs := platformpolicy.NewPlatformCryptographyScheme() 52 mc := minimock.NewController(t) 53 54 // Init subcomponents. 55 ctx := inslogger.TestContext(t) 56 conf := configuration.NewLedger() 57 db, dbcancel := storagetest.TmpDB(ctx, t, storagetest.Dir(dir)) 58 59 cm := &component.Manager{} 60 gi := storage.NewGenesisInitializer() 61 pt := storage.NewPulseTracker() 62 ps := storage.NewPulseStorage() 63 js := storage.NewJetStorage() 64 os := storage.NewObjectStorage() 65 ns := nodes.NewStorage() 66 ds := storage.NewDropStorage(10) 67 rs := storage.NewReplicaStorage() 68 cl := storage.NewCleaner() 69 70 am := artifactmanager.NewArtifactManger() 71 am.PlatformCryptographyScheme = pcs 72 73 conf.PulseManager.HeavySyncEnabled = false 74 pm := pulsemanager.NewPulseManager(conf) 75 jc := testutils.NewJetCoordinatorMock(mc) 76 jc.IsAuthorizedMock.Return(true, nil) 77 jc.LightExecutorForJetMock.Return(&core.RecordRef{}, nil) 78 jc.HeavyMock.Return(&core.RecordRef{}, nil) 79 jc.MeMock.Return(core.RecordRef{}) 80 jc.IsBeyondLimitMock.Return(false, nil) 81 82 // Init components. 83 if c.MessageBus == nil { 84 mb := testmessagebus.NewTestMessageBus(t) 85 mb.PulseStorage = ps 86 c.MessageBus = mb 87 } else { 88 switch mb := c.MessageBus.(type) { 89 case *messagebus.MessageBus: 90 mb.PulseStorage = ps 91 case *testmessagebus.TestMessageBus: 92 mb.PulseStorage = ps 93 default: 94 panic("unknown message bus") 95 } 96 } 97 if c.NodeNetwork == nil { 98 c.NodeNetwork = nodenetwork.NewNodeKeeper(nodenetwork.NewNode(core.RecordRef{}, core.StaticRoleLightMaterial, nil, "127.0.0.1:5432", "")) 99 } 100 101 certificate := testutils.NewCertificateMock(t) 102 certificate.GetRoleMock.Return(handlersRole) 103 104 handler := artifactmanager.NewMessageHandler(&conf, certificate) 105 handler.PulseTracker = pt 106 handler.JetStorage = js 107 handler.Nodes = ns 108 handler.DBContext = db 109 handler.ObjectStorage = os 110 handler.DropStorage = ds 111 112 handler.PlatformCryptographyScheme = pcs 113 handler.JetCoordinator = jc 114 115 am.DefaultBus = c.MessageBus 116 am.JetCoordinator = jc 117 118 cm.Inject( 119 platformpolicy.NewPlatformCryptographyScheme(), 120 db, 121 js, 122 os, 123 ns, 124 pt, 125 ps, 126 ds, 127 gi, 128 am, 129 rs, 130 cl, 131 ) 132 133 err := cm.Init(ctx) 134 if err != nil { 135 t.Error("ComponentManager init failed", err) 136 } 137 err = cm.Start(ctx) 138 if err != nil { 139 t.Error("ComponentManager start failed", err) 140 } 141 142 pulse, err := pt.GetLatestPulse(ctx) 143 require.NoError(t, err) 144 ps.Set(&pulse.Pulse) 145 146 gilMock := testutils.NewGlobalInsolarLockMock(t) 147 gilMock.AcquireFunc = func(context.Context) {} 148 gilMock.ReleaseFunc = func(context.Context) {} 149 150 alsMock := testutils.NewActiveListSwapperMock(t) 151 alsMock.MoveSyncToActiveFunc = func(context.Context) error { return nil } 152 153 handler.Bus = c.MessageBus 154 155 pm.NodeNet = c.NodeNetwork 156 pm.GIL = gilMock 157 pm.Bus = c.MessageBus 158 pm.LR = c.LogicRunner 159 pm.ActiveListSwapper = alsMock 160 pm.PulseStorage = ps 161 pm.JetStorage = js 162 pm.DropStorage = ds 163 pm.ObjectStorage = os 164 pm.Nodes = ns 165 pm.NodeSetter = ns 166 pm.PulseTracker = pt 167 pm.ReplicaStorage = rs 168 pm.StorageCleaner = cl 169 170 hdw := artifactmanager.NewHotDataWaiterConcrete() 171 172 pm.HotDataWaiter = hdw 173 handler.HotDataWaiter = hdw 174 175 indexMock := recentstorage.NewRecentIndexStorageMock(t) 176 pendingMock := recentstorage.NewPendingStorageMock(t) 177 178 indexMock.AddObjectMock.Return() 179 pendingMock.GetRequestsForObjectMock.Return(nil) 180 pendingMock.AddPendingRequestMock.Return() 181 pendingMock.RemovePendingRequestMock.Return() 182 183 provideMock := recentstorage.NewProviderMock(t) 184 provideMock.GetIndexStorageMock.Return(indexMock) 185 provideMock.GetPendingStorageMock.Return(pendingMock) 186 provideMock.CountMock.Return(0) 187 188 handler.RecentStorageProvider = provideMock 189 190 err = handler.Init(ctx) 191 if err != nil { 192 panic(err) 193 } 194 195 if closeJets { 196 err := pm.HotDataWaiter.Unlock(ctx, *jet.NewID(0, nil)) 197 require.NoError(t, err) 198 } 199 200 // Create ledger. 201 l := ledger.NewTestLedger(db, am, pm, jc) 202 203 return l, db, dbcancel 204 }