This repository has been archived by the owner on May 3, 2022. It is now read-only.
/
fakeclusterclientstore.go
70 lines (53 loc) · 2.05 KB
/
fakeclusterclientstore.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package testing
import (
"fmt"
"k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"github.com/bookingcom/shipper/pkg/clusterclientstore"
)
// FakeClusterClientStore is a fake implementation of a ClusterClientStore,
// allowing you to provide your own clientsets.
type FakeClusterClientStore struct {
clusters map[string]*FakeCluster
subscriptionCallbacks []clusterclientstore.SubscriptionRegisterFunc
eventHandlerCallbacks []clusterclientstore.EventHandlerRegisterFunc
}
func NewFakeClusterClientStore(clusters map[string]*FakeCluster) *FakeClusterClientStore {
return &FakeClusterClientStore{clusters: clusters}
}
func (s *FakeClusterClientStore) AddCluster(c *FakeCluster) {
s.clusters[c.Name] = c
}
func (s *FakeClusterClientStore) AddSubscriptionCallback(c clusterclientstore.SubscriptionRegisterFunc) {
s.subscriptionCallbacks = append(s.subscriptionCallbacks, c)
}
func (s *FakeClusterClientStore) AddEventHandlerCallback(c clusterclientstore.EventHandlerRegisterFunc) {
s.eventHandlerCallbacks = append(s.eventHandlerCallbacks, c)
}
func (s *FakeClusterClientStore) Run(stopCh <-chan struct{}) {
for name, cluster := range s.clusters {
informerFactory := cluster.InformerFactory
for _, subscriptionCallback := range s.subscriptionCallbacks {
subscriptionCallback(informerFactory)
}
for _, eventHandlerCallback := range s.eventHandlerCallbacks {
eventHandlerCallback(informerFactory, name)
}
informerFactory.Start(stopCh)
informerFactory.WaitForCacheSync(stopCh)
}
}
func (s *FakeClusterClientStore) GetClient(clusterName string, ua string) (kubernetes.Interface, error) {
cluster, ok := s.clusters[clusterName]
if !ok {
return nil, fmt.Errorf("no client for cluster %q", clusterName)
}
return cluster.Client, nil
}
func (s *FakeClusterClientStore) GetConfig(clusterName string) (*rest.Config, error) {
return &rest.Config{}, nil
}
func (s *FakeClusterClientStore) GetInformerFactory(clusterName string) (informers.SharedInformerFactory, error) {
return s.clusters[clusterName].InformerFactory, nil
}