fed: Enable the namespace controller in integration tests

This commit is contained in:
Maru Newby 2017-06-22 17:03:18 -07:00
parent 228ab0d882
commit 6ba0e92bf4
4 changed files with 35 additions and 19 deletions

View File

@ -20,6 +20,8 @@ import (
"io/ioutil" "io/ioutil"
"os" "os"
"k8s.io/kubernetes/test/e2e/framework"
"github.com/golang/glog" "github.com/golang/glog"
) )
@ -128,7 +130,7 @@ func (es *e2eServices) startApiServer() error {
// startNamespaceController starts the embedded namespace controller or returns an error. // startNamespaceController starts the embedded namespace controller or returns an error.
func (es *e2eServices) startNamespaceController() error { func (es *e2eServices) startNamespaceController() error {
glog.Info("Starting namespace controller") glog.Info("Starting namespace controller")
es.nsController = NewNamespaceController() es.nsController = NewNamespaceController(framework.TestContext.Host)
return es.nsController.Start() return es.nsController.Start()
} }

View File

@ -26,7 +26,6 @@ import (
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions" informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions"
namespacecontroller "k8s.io/kubernetes/pkg/controller/namespace" namespacecontroller "k8s.io/kubernetes/pkg/controller/namespace"
"k8s.io/kubernetes/test/e2e/framework"
) )
const ( const (
@ -40,18 +39,19 @@ const (
// NamespaceController is a server which manages namespace controller. // NamespaceController is a server which manages namespace controller.
type NamespaceController struct { type NamespaceController struct {
host string
stopCh chan struct{} stopCh chan struct{}
} }
// NewNamespaceController creates a new namespace controller. // NewNamespaceController creates a new namespace controller.
func NewNamespaceController() *NamespaceController { func NewNamespaceController(host string) *NamespaceController {
return &NamespaceController{stopCh: make(chan struct{})} return &NamespaceController{host: host, stopCh: make(chan struct{})}
} }
// Start starts the namespace controller. // Start starts the namespace controller.
func (n *NamespaceController) Start() error { func (n *NamespaceController) Start() error {
// Use the default QPS // Use the default QPS
config := restclient.AddUserAgent(&restclient.Config{Host: framework.TestContext.Host}, ncName) config := restclient.AddUserAgent(&restclient.Config{Host: n.host}, ncName)
client, err := clientset.NewForConfig(config) client, err := clientset.NewForConfig(config)
if err != nil { if err != nil {
return err return err

View File

@ -28,6 +28,7 @@ go_library(
"//federation/pkg/federation-controller/sync:go_default_library", "//federation/pkg/federation-controller/sync:go_default_library",
"//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library",
"//pkg/master:go_default_library", "//pkg/master:go_default_library",
"//test/e2e_node/services:go_default_library",
"//test/integration/framework:go_default_library", "//test/integration/framework:go_default_library",
"//vendor/github.com/pborman/uuid:go_default_library", "//vendor/github.com/pborman/uuid:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",

View File

@ -27,14 +27,16 @@ import (
clustercontroller "k8s.io/kubernetes/federation/pkg/federation-controller/cluster" clustercontroller "k8s.io/kubernetes/federation/pkg/federation-controller/cluster"
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
"k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/pkg/master"
"k8s.io/kubernetes/test/e2e_node/services"
"k8s.io/kubernetes/test/integration/framework" "k8s.io/kubernetes/test/integration/framework"
) )
type MemberCluster struct { type MemberCluster struct {
CloseFn framework.CloseFunc CloseFn framework.CloseFunc
Config *master.Config Config *master.Config
Client clientset.Interface Client clientset.Interface
Host string Host string
namespaceController *services.NamespaceController
} }
// FederationFixture manages a federation api server and a set of member clusters // FederationFixture manages a federation api server and a set of member clusters
@ -42,10 +44,11 @@ type FederationFixture struct {
APIFixture *FederationAPIFixture APIFixture *FederationAPIFixture
DesiredClusterCount int DesiredClusterCount int
Clusters []*MemberCluster Clusters []*MemberCluster
ClusterClients []clientset.Interface
ClusterController *clustercontroller.ClusterController ClusterClients []clientset.Interface
fedClient federationclientset.Interface ClusterController *clustercontroller.ClusterController
stopChan chan struct{} fedClient federationclientset.Interface
stopChan chan struct{}
} }
func (f *FederationFixture) SetUp(t *testing.T) { func (f *FederationFixture) SetUp(t *testing.T) {
@ -79,12 +82,18 @@ func (f *FederationFixture) StartCluster(t *testing.T) {
clusterClient := clientset.NewForConfigOrDie(config.GenericConfig.LoopbackClientConfig) clusterClient := clientset.NewForConfigOrDie(config.GenericConfig.LoopbackClientConfig)
f.ClusterClients = append(f.ClusterClients, clusterClient) f.ClusterClients = append(f.ClusterClients, clusterClient)
f.Clusters = append(f.Clusters, &MemberCluster{ memberCluster := &MemberCluster{
CloseFn: closeFn, CloseFn: closeFn,
Config: config, Config: config,
Client: clusterClient, Client: clusterClient,
Host: host, Host: host,
}) namespaceController: services.NewNamespaceController(host),
}
f.Clusters = append(f.Clusters, memberCluster)
err := memberCluster.namespaceController.Start()
if err != nil {
t.Fatal(err)
}
clusterId := len(f.ClusterClients) clusterId := len(f.ClusterClients)
@ -115,6 +124,10 @@ func (f *FederationFixture) TearDown(t *testing.T) {
f.stopChan = nil f.stopChan = nil
} }
for _, cluster := range f.Clusters { for _, cluster := range f.Clusters {
// Need to close controllers with active connections to the
// cluster api before stopping the api or the connections will
// hang until tcp timeout.
cluster.namespaceController.Stop()
cluster.CloseFn() cluster.CloseFn()
} }
f.Clusters = nil f.Clusters = nil