gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/server/mock/mock.go (about) 1 package mock 2 3 import ( 4 "errors" 5 "sync" 6 7 "github.com/google/uuid" 8 "gitee.com/liuxuezhan/go-micro-v1.18.0/server" 9 ) 10 11 type MockServer struct { 12 sync.Mutex 13 Running bool 14 Opts server.Options 15 Handlers map[string]server.Handler 16 Subscribers map[string][]server.Subscriber 17 } 18 19 var ( 20 _ server.Server = NewServer() 21 ) 22 23 func newMockServer(opts ...server.Option) *MockServer { 24 var options server.Options 25 26 for _, o := range opts { 27 o(&options) 28 } 29 30 return &MockServer{ 31 Opts: options, 32 Handlers: make(map[string]server.Handler), 33 Subscribers: make(map[string][]server.Subscriber), 34 } 35 } 36 37 func (m *MockServer) Options() server.Options { 38 m.Lock() 39 defer m.Unlock() 40 41 return m.Opts 42 } 43 44 func (m *MockServer) Init(opts ...server.Option) error { 45 m.Lock() 46 defer m.Unlock() 47 48 for _, o := range opts { 49 o(&m.Opts) 50 } 51 return nil 52 } 53 54 func (m *MockServer) Handle(h server.Handler) error { 55 m.Lock() 56 defer m.Unlock() 57 58 if _, ok := m.Handlers[h.Name()]; ok { 59 return errors.New("Handler " + h.Name() + " already exists") 60 } 61 m.Handlers[h.Name()] = h 62 return nil 63 } 64 65 func (m *MockServer) NewHandler(h interface{}, opts ...server.HandlerOption) server.Handler { 66 var options server.HandlerOptions 67 for _, o := range opts { 68 o(&options) 69 } 70 71 return &MockHandler{ 72 Id: uuid.New().String(), 73 Hdlr: h, 74 Opts: options, 75 } 76 } 77 78 func (m *MockServer) NewSubscriber(topic string, fn interface{}, opts ...server.SubscriberOption) server.Subscriber { 79 var options server.SubscriberOptions 80 for _, o := range opts { 81 o(&options) 82 } 83 84 return &MockSubscriber{ 85 Id: topic, 86 Sub: fn, 87 Opts: options, 88 } 89 } 90 91 func (m *MockServer) Subscribe(sub server.Subscriber) error { 92 m.Lock() 93 defer m.Unlock() 94 95 subs := m.Subscribers[sub.Topic()] 96 subs = append(subs, sub) 97 m.Subscribers[sub.Topic()] = subs 98 return nil 99 } 100 101 func (m *MockServer) Register() error { 102 return nil 103 } 104 105 func (m *MockServer) Deregister() error { 106 return nil 107 } 108 109 func (m *MockServer) Start() error { 110 m.Lock() 111 defer m.Unlock() 112 113 if m.Running { 114 return errors.New("already running") 115 } 116 117 m.Running = true 118 return nil 119 } 120 121 func (m *MockServer) Stop() error { 122 m.Lock() 123 defer m.Unlock() 124 125 if !m.Running { 126 return errors.New("not running") 127 } 128 129 m.Running = false 130 return nil 131 } 132 133 func (m *MockServer) String() string { 134 return "mock" 135 } 136 137 func NewServer(opts ...server.Option) *MockServer { 138 return newMockServer(opts...) 139 }