1// Copyright (C) 2021 Storj Labs, Inc. 2// See LICENSE for copying information. 3 4package reputation_test 5 6import ( 7 "context" 8 "testing" 9 "time" 10 11 "github.com/stretchr/testify/require" 12 13 "storj.io/common/storj" 14 "storj.io/common/testrand" 15 "storj.io/storj/satellite" 16 "storj.io/storj/satellite/reputation" 17 "storj.io/storj/satellite/satellitedb/satellitedbtest" 18) 19 20func BenchmarkReputation(b *testing.B) { 21 satellitedbtest.Bench(b, func(b *testing.B, db satellite.DB) { 22 const ( 23 TotalNodeCount = 211 24 OfflineCount = 10 25 ) 26 27 reputationdb := db.Reputation() 28 ctx := context.Background() 29 30 var all []storj.NodeID 31 for i := 0; i < TotalNodeCount; i++ { 32 id := testrand.NodeID() 33 all = append(all, id) 34 } 35 36 b.Run("UpdateStatsSuccess", func(b *testing.B) { 37 for i := 0; i < b.N; i++ { 38 id := all[i%len(all)] 39 _, _, err := reputationdb.Update(ctx, reputation.UpdateRequest{ 40 NodeID: id, 41 AuditOutcome: reputation.AuditSuccess, 42 AuditHistory: testAuditHistoryConfig(), 43 }, time.Now()) 44 require.NoError(b, err) 45 } 46 }) 47 48 b.Run("UpdateStatsFailure", func(b *testing.B) { 49 for i := 0; i < b.N; i++ { 50 id := all[i%len(all)] 51 _, _, err := reputationdb.Update(ctx, reputation.UpdateRequest{ 52 NodeID: id, 53 AuditOutcome: reputation.AuditFailure, 54 AuditHistory: testAuditHistoryConfig(), 55 }, time.Now()) 56 require.NoError(b, err) 57 } 58 }) 59 60 b.Run("UpdateStatsUnknown", func(b *testing.B) { 61 for i := 0; i < b.N; i++ { 62 id := all[i%len(all)] 63 _, _, err := reputationdb.Update(ctx, reputation.UpdateRequest{ 64 NodeID: id, 65 AuditOutcome: reputation.AuditUnknown, 66 AuditHistory: testAuditHistoryConfig(), 67 }, time.Now()) 68 require.NoError(b, err) 69 } 70 }) 71 72 b.Run("UpdateStatsOffline", func(b *testing.B) { 73 for i := 0; i < b.N; i++ { 74 id := all[i%len(all)] 75 _, _, err := reputationdb.Update(ctx, reputation.UpdateRequest{ 76 NodeID: id, 77 AuditOutcome: reputation.AuditOffline, 78 AuditHistory: testAuditHistoryConfig(), 79 }, time.Now()) 80 require.NoError(b, err) 81 } 82 }) 83 }) 84} 85