87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package consul
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/hashicorp/consul/api"
 | 
						|
	"github.com/micro/go-micro/registry"
 | 
						|
)
 | 
						|
 | 
						|
func TestHealthyServiceHandler(t *testing.T) {
 | 
						|
	watcher := newWatcher()
 | 
						|
	serviceEntry := newServiceEntry(
 | 
						|
		"node-name", "node-address", "service-name", "v1.0.0",
 | 
						|
		[]*api.HealthCheck{
 | 
						|
			newHealthCheck("node-name", "service-name", "passing"),
 | 
						|
		},
 | 
						|
	)
 | 
						|
 | 
						|
	watcher.serviceHandler(1234, []*api.ServiceEntry{serviceEntry})
 | 
						|
 | 
						|
	if len(watcher.services["service-name"][0].Nodes) != 1 {
 | 
						|
		t.Errorf("Expected length of the service nodes to be 1")
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestUnhealthyServiceHandler(t *testing.T) {
 | 
						|
	watcher := newWatcher()
 | 
						|
	serviceEntry := newServiceEntry(
 | 
						|
		"node-name", "node-address", "service-name", "v1.0.0",
 | 
						|
		[]*api.HealthCheck{
 | 
						|
			newHealthCheck("node-name", "service-name", "critical"),
 | 
						|
		},
 | 
						|
	)
 | 
						|
 | 
						|
	watcher.serviceHandler(1234, []*api.ServiceEntry{serviceEntry})
 | 
						|
 | 
						|
	if len(watcher.services["service-name"][0].Nodes) != 0 {
 | 
						|
		t.Errorf("Expected length of the service nodes to be 0")
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestUnhealthyNodeServiceHandler(t *testing.T) {
 | 
						|
	watcher := newWatcher()
 | 
						|
	serviceEntry := newServiceEntry(
 | 
						|
		"node-name", "node-address", "service-name", "v1.0.0",
 | 
						|
		[]*api.HealthCheck{
 | 
						|
			newHealthCheck("node-name", "service-name", "passing"),
 | 
						|
			newHealthCheck("node-name", "serfHealth", "critical"),
 | 
						|
		},
 | 
						|
	)
 | 
						|
 | 
						|
	watcher.serviceHandler(1234, []*api.ServiceEntry{serviceEntry})
 | 
						|
 | 
						|
	if len(watcher.services["service-name"][0].Nodes) != 0 {
 | 
						|
		t.Errorf("Expected length of the service nodes to be 0")
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func newWatcher() *consulWatcher {
 | 
						|
	return &consulWatcher{
 | 
						|
		exit:     make(chan bool),
 | 
						|
		next:     make(chan *registry.Result, 10),
 | 
						|
		services: make(map[string][]*registry.Service),
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func newHealthCheck(node, name, status string) *api.HealthCheck {
 | 
						|
	return &api.HealthCheck{
 | 
						|
		Node:        node,
 | 
						|
		Name:        name,
 | 
						|
		Status:      status,
 | 
						|
		ServiceName: name,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func newServiceEntry(node, address, name, version string, checks []*api.HealthCheck) *api.ServiceEntry {
 | 
						|
	return &api.ServiceEntry{
 | 
						|
		Node: &api.Node{Node: node, Address: name},
 | 
						|
		Service: &api.AgentService{
 | 
						|
			Service: name,
 | 
						|
			Address: address,
 | 
						|
			Tags:    encodeVersion(version),
 | 
						|
		},
 | 
						|
		Checks: checks,
 | 
						|
	}
 | 
						|
}
 |