134 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Package mock provides a mock registry for testing
 | |
| package mock
 | |
| 
 | |
| import (
 | |
| 	"sync"
 | |
| 
 | |
| 	"github.com/micro/go-micro/registry"
 | |
| )
 | |
| 
 | |
| type mockRegistry struct {
 | |
| 	sync.RWMutex
 | |
| 	Services map[string][]*registry.Service
 | |
| }
 | |
| 
 | |
| var (
 | |
| 	mockData = map[string][]*registry.Service{
 | |
| 		"foo": []*registry.Service{
 | |
| 			{
 | |
| 				Name:    "foo",
 | |
| 				Version: "1.0.0",
 | |
| 				Nodes: []*registry.Node{
 | |
| 					{
 | |
| 						Id:      "foo-1.0.0-123",
 | |
| 						Address: "localhost",
 | |
| 						Port:    9999,
 | |
| 					},
 | |
| 					{
 | |
| 						Id:      "foo-1.0.0-321",
 | |
| 						Address: "localhost",
 | |
| 						Port:    9999,
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 			{
 | |
| 				Name:    "foo",
 | |
| 				Version: "1.0.1",
 | |
| 				Nodes: []*registry.Node{
 | |
| 					{
 | |
| 						Id:      "foo-1.0.1-321",
 | |
| 						Address: "localhost",
 | |
| 						Port:    6666,
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 			{
 | |
| 				Name:    "foo",
 | |
| 				Version: "1.0.3",
 | |
| 				Nodes: []*registry.Node{
 | |
| 					{
 | |
| 						Id:      "foo-1.0.3-345",
 | |
| 						Address: "localhost",
 | |
| 						Port:    8888,
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| )
 | |
| 
 | |
| func (m *mockRegistry) init() {
 | |
| 	m.Lock()
 | |
| 	defer m.Unlock()
 | |
| 
 | |
| 	// add some mock data
 | |
| 	m.Services = mockData
 | |
| }
 | |
| 
 | |
| func (m *mockRegistry) GetService(service string) ([]*registry.Service, error) {
 | |
| 	m.Lock()
 | |
| 	defer m.Unlock()
 | |
| 
 | |
| 	s, ok := m.Services[service]
 | |
| 	if !ok || len(s) == 0 {
 | |
| 		return nil, registry.ErrNotFound
 | |
| 	}
 | |
| 	return s, nil
 | |
| 
 | |
| }
 | |
| 
 | |
| func (m *mockRegistry) ListServices() ([]*registry.Service, error) {
 | |
| 	m.Lock()
 | |
| 	defer m.Unlock()
 | |
| 
 | |
| 	var services []*registry.Service
 | |
| 	for _, service := range m.Services {
 | |
| 		services = append(services, service...)
 | |
| 	}
 | |
| 	return services, nil
 | |
| }
 | |
| 
 | |
| func (m *mockRegistry) Register(s *registry.Service, opts ...registry.RegisterOption) error {
 | |
| 	m.Lock()
 | |
| 	defer m.Unlock()
 | |
| 
 | |
| 	services := addServices(m.Services[s.Name], []*registry.Service{s})
 | |
| 	m.Services[s.Name] = services
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (m *mockRegistry) Deregister(s *registry.Service) error {
 | |
| 	m.Lock()
 | |
| 	defer m.Unlock()
 | |
| 
 | |
| 	services := delServices(m.Services[s.Name], []*registry.Service{s})
 | |
| 	m.Services[s.Name] = services
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (m *mockRegistry) Watch(opts ...registry.WatchOption) (registry.Watcher, error) {
 | |
| 	var wopts registry.WatchOptions
 | |
| 	for _, o := range opts {
 | |
| 		o(&wopts)
 | |
| 	}
 | |
| 	return &mockWatcher{exit: make(chan bool), opts: wopts}, nil
 | |
| }
 | |
| 
 | |
| func (m *mockRegistry) String() string {
 | |
| 	return "mock"
 | |
| }
 | |
| 
 | |
| func (m *mockRegistry) Init(opts ...registry.Option) error {
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (m *mockRegistry) Options() registry.Options {
 | |
| 	return registry.Options{}
 | |
| }
 | |
| 
 | |
| func NewRegistry(opts ...registry.Options) registry.Registry {
 | |
| 	m := &mockRegistry{Services: make(map[string][]*registry.Service)}
 | |
| 	m.init()
 | |
| 	return m
 | |
| }
 |