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  }