package k8s import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/kubernetes/fake" "k8s.io/client-go/kubernetes/scheme" ) type MockEndpointsWatcher struct { HostReceived string ListenerSubscribed EndpointsListener ListenerUnsubscribed EndpointsListener ServiceToReturn *v1.Service ExistsToReturn bool ErrToReturn error } func (m *MockEndpointsWatcher) GetService(service string) (*v1.Service, bool, error) { m.HostReceived = service return m.ServiceToReturn, m.ExistsToReturn, m.ErrToReturn } func (m *MockEndpointsWatcher) Subscribe(service string, port uint32, listener EndpointsListener) error { m.ListenerSubscribed = listener return m.ErrToReturn } func (m *MockEndpointsWatcher) Unsubscribe(service string, port uint32, listener EndpointsListener) error { m.ListenerUnsubscribed = listener return m.ErrToReturn } func (m *MockEndpointsWatcher) Run() error { return m.ErrToReturn } func (m *MockEndpointsWatcher) Stop() {} type InMemoryPodIndex struct { BackingMap map[string][]*v1.Pod } func (i *InMemoryPodIndex) GetPod(key string) (*v1.Pod, error) { return i.BackingMap[key][0], nil } func (i *InMemoryPodIndex) GetPodsByIndex(key string) ([]*v1.Pod, error) { return i.BackingMap[key], nil } func (i *InMemoryPodIndex) List() ([]*v1.Pod, error) { var pods []*v1.Pod for _, byIndex := range i.BackingMap { for _, pod := range byIndex { pods = append(pods, pod) } } return pods, nil } func (i *InMemoryPodIndex) Run() error { return nil } func (i *InMemoryPodIndex) Stop() {} func NewEmptyPodIndex() PodIndex { return &InMemoryPodIndex{BackingMap: map[string][]*v1.Pod{}} } func toRuntimeObject(config string) (runtime.Object, error) { decode := scheme.Codecs.UniversalDeserializer().Decode obj, _, err := decode([]byte(config), nil, nil) return obj, err } func NewFakeAPI(configs ...string) (*API, error) { objs := []runtime.Object{} for _, config := range configs { obj, err := toRuntimeObject(config) if err != nil { return nil, err } objs = append(objs, obj) } clientSet := fake.NewSimpleClientset(objs...) return NewAPI(clientSet), nil }