73 lines
1.6 KiB
Go
73 lines
1.6 KiB
Go
package discovery
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/client-go/kubernetes"
|
|
"k8s.io/client-go/tools/clientcmd"
|
|
)
|
|
|
|
func kubeConfigPath(t *testing.T) string {
|
|
home, err := os.UserHomeDir()
|
|
if err != nil {
|
|
t.Skip("Skipping test: user home dir not found")
|
|
}
|
|
path := filepath.Join(home, ".kube", "config")
|
|
if _, err := os.Stat(path); os.IsNotExist(err) {
|
|
t.Skipf("Skipping test: %s not found", path)
|
|
}
|
|
return path
|
|
}
|
|
|
|
func TestDiscovery(t *testing.T) {
|
|
path := kubeConfigPath(t)
|
|
config, err := clientcmd.BuildConfigFromFlags("", path)
|
|
if err != nil {
|
|
t.Fatalf("Error building config: %v", err)
|
|
}
|
|
client, err := kubernetes.NewForConfig(config)
|
|
if err != nil {
|
|
t.Fatalf("Error creating client: %v", err)
|
|
}
|
|
d := NewK8sDiscovery(client, metav1.ListOptions{
|
|
LabelSelector: "app",
|
|
})
|
|
res, err := d.DiscoverInNamespace("")
|
|
if err != nil {
|
|
t.Errorf("Error discovering: %v", err)
|
|
}
|
|
if len(res) == 0 {
|
|
t.Errorf("Expected at least one host, got none")
|
|
}
|
|
}
|
|
|
|
func TestWatch(t *testing.T) {
|
|
path := kubeConfigPath(t)
|
|
config, err := clientcmd.BuildConfigFromFlags("", path)
|
|
if err != nil {
|
|
t.Fatalf("Error building config: %v", err)
|
|
}
|
|
client, err := kubernetes.NewForConfig(config)
|
|
if err != nil {
|
|
t.Fatalf("Error creating client: %v", err)
|
|
}
|
|
d := NewK8sDiscovery(client, metav1.ListOptions{
|
|
LabelSelector: "app",
|
|
})
|
|
ch, err := d.Watch()
|
|
if err != nil {
|
|
t.Errorf("Error watching: %v", err)
|
|
}
|
|
|
|
select {
|
|
case m := <-ch:
|
|
t.Logf("Received watch %v", m)
|
|
case <-time.After(5 * time.Second):
|
|
t.Errorf("Timeout waiting for watch")
|
|
}
|
|
}
|