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  }