github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/services/remotecluster/mocks_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package remotecluster 5 6 import ( 7 "context" 8 "fmt" 9 "strings" 10 "sync" 11 "testing" 12 13 "go.uber.org/zap/zapcore" 14 15 "github.com/masterhung0112/hk_server/v5/einterfaces" 16 "github.com/masterhung0112/hk_server/v5/model" 17 "github.com/masterhung0112/hk_server/v5/plugin/plugintest/mock" 18 "github.com/masterhung0112/hk_server/v5/shared/mlog" 19 "github.com/masterhung0112/hk_server/v5/store" 20 "github.com/masterhung0112/hk_server/v5/store/storetest/mocks" 21 ) 22 23 type mockServer struct { 24 remotes []*model.RemoteCluster 25 logger *mockLogger 26 user *model.User 27 } 28 29 func newMockServer(t *testing.T, remotes []*model.RemoteCluster) *mockServer { 30 return &mockServer{ 31 remotes: remotes, 32 logger: &mockLogger{t: t}, 33 } 34 } 35 36 func (ms *mockServer) SetUser(user *model.User) { 37 ms.user = user 38 } 39 40 func (ms *mockServer) Config() *model.Config { return nil } 41 func (ms *mockServer) GetMetrics() einterfaces.MetricsInterface { return nil } 42 func (ms *mockServer) IsLeader() bool { return true } 43 func (ms *mockServer) AddClusterLeaderChangedListener(listener func()) string { return model.NewId() } 44 func (ms *mockServer) RemoveClusterLeaderChangedListener(id string) {} 45 func (ms *mockServer) GetLogger() mlog.LoggerIFace { 46 return ms.logger 47 } 48 func (ms *mockServer) GetStore() store.Store { 49 anyQueryFilter := mock.MatchedBy(func(filter model.RemoteClusterQueryFilter) bool { 50 return true 51 }) 52 anyUserId := mock.AnythingOfType("string") 53 54 remoteClusterStoreMock := &mocks.RemoteClusterStore{} 55 remoteClusterStoreMock.On("GetByTopic", "share").Return(ms.remotes, nil) 56 remoteClusterStoreMock.On("GetAll", anyQueryFilter).Return(ms.remotes, nil) 57 58 userStoreMock := &mocks.UserStore{} 59 userStoreMock.On("Get", context.Background(), anyUserId).Return(ms.user, nil) 60 61 storeMock := &mocks.Store{} 62 storeMock.On("RemoteCluster").Return(remoteClusterStoreMock) 63 storeMock.On("User").Return(userStoreMock) 64 return storeMock 65 } 66 func (ms *mockServer) Shutdown() { ms.logger.Shutdown() } 67 68 type mockLogger struct { 69 t *testing.T 70 mux sync.Mutex 71 } 72 73 func (ml *mockLogger) IsLevelEnabled(level mlog.LogLevel) bool { 74 return true 75 } 76 func (ml *mockLogger) Debug(s string, flds ...mlog.Field) { 77 ml.mux.Lock() 78 defer ml.mux.Unlock() 79 if ml.t != nil { 80 ml.t.Log("debug", s, fieldsToStrings(flds)) 81 } 82 } 83 func (ml *mockLogger) Info(s string, flds ...mlog.Field) { 84 ml.mux.Lock() 85 defer ml.mux.Unlock() 86 if ml.t != nil { 87 ml.t.Log("info", s, fieldsToStrings(flds)) 88 } 89 } 90 func (ml *mockLogger) Warn(s string, flds ...mlog.Field) { 91 ml.mux.Lock() 92 defer ml.mux.Unlock() 93 if ml.t != nil { 94 ml.t.Log("warn", s, fieldsToStrings(flds)) 95 } 96 } 97 func (ml *mockLogger) Error(s string, flds ...mlog.Field) { 98 ml.mux.Lock() 99 defer ml.mux.Unlock() 100 if ml.t != nil { 101 ml.t.Log("error", s, fieldsToStrings(flds)) 102 } 103 } 104 func (ml *mockLogger) Critical(s string, flds ...mlog.Field) { 105 ml.mux.Lock() 106 defer ml.mux.Unlock() 107 if ml.t != nil { 108 ml.t.Log("crit", s, fieldsToStrings(flds)) 109 } 110 } 111 func (ml *mockLogger) Log(level mlog.LogLevel, s string, flds ...mlog.Field) { 112 ml.mux.Lock() 113 defer ml.mux.Unlock() 114 if ml.t != nil { 115 ml.t.Log(level.Name, s, fieldsToStrings(flds)) 116 } 117 } 118 func (ml *mockLogger) LogM(levels []mlog.LogLevel, s string, flds ...mlog.Field) { 119 ml.mux.Lock() 120 defer ml.mux.Unlock() 121 if ml.t != nil { 122 ml.t.Log(levelsToString(levels), s, fieldsToStrings(flds)) 123 } 124 } 125 func (ml *mockLogger) Shutdown() { 126 ml.mux.Lock() 127 defer ml.mux.Unlock() 128 ml.t = nil 129 } 130 131 func levelsToString(levels []mlog.LogLevel) string { 132 sb := strings.Builder{} 133 for _, l := range levels { 134 sb.WriteString(l.Name) 135 sb.WriteString(",") 136 } 137 return sb.String() 138 } 139 140 func fieldsToStrings(fields []mlog.Field) []string { 141 encoder := zapcore.NewMapObjectEncoder() 142 for _, zapField := range fields { 143 zapField.AddTo(encoder) 144 } 145 146 var result []string 147 for k, v := range encoder.Fields { 148 result = append(result, fmt.Sprintf("%s:%v", k, v)) 149 } 150 return result 151 }