diff --git a/cmd/integration/integration.go b/cmd/integration/integration.go index 7cc176791e2..283d31823f4 100644 --- a/cmd/integration/integration.go +++ b/cmd/integration/integration.go @@ -19,7 +19,6 @@ limitations under the License. package main import ( - "errors" "fmt" "io/ioutil" "net" @@ -37,10 +36,8 @@ import ( kubeletapp "k8s.io/kubernetes/cmd/kubelet/app" "k8s.io/kubernetes/pkg/api" apierrors "k8s.io/kubernetes/pkg/api/errors" - "k8s.io/kubernetes/pkg/api/latest" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" - "k8s.io/kubernetes/pkg/apiserver" "k8s.io/kubernetes/pkg/client/record" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/controller" @@ -55,17 +52,16 @@ import ( kubetypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/master" - "k8s.io/kubernetes/pkg/storage/etcd/etcdtest" "k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util/sets" "k8s.io/kubernetes/pkg/util/wait" "k8s.io/kubernetes/pkg/volume/empty_dir" - "k8s.io/kubernetes/plugin/pkg/admission/admit" "k8s.io/kubernetes/plugin/pkg/scheduler" _ "k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider" "k8s.io/kubernetes/plugin/pkg/scheduler/factory" "k8s.io/kubernetes/test/e2e" "k8s.io/kubernetes/test/integration" + "k8s.io/kubernetes/test/integration/framework" "github.com/coreos/go-etcd/etcd" "github.com/golang/glog" @@ -83,12 +79,6 @@ var ( maxTestTimeout = time.Minute * 10 ) -type fakeKubeletClient struct{} - -func (fakeKubeletClient) GetConnectionInfo(ctx api.Context, nodeName string) (string, uint, http.RoundTripper, error) { - return "", 0, nil, errors.New("Not Implemented") -} - type delegateHandler struct { delegate http.Handler } @@ -140,21 +130,6 @@ func startComponents(firstManifestURL, secondManifestURL string) (string, string // We will fix this by supporting multiple group versions in Config cl.ExtensionsClient = client.NewExtensionsOrDie(&client.Config{Host: apiServer.URL, GroupVersion: testapi.Extensions.GroupVersion()}) - storageVersions := make(map[string]string) - etcdStorage, err := master.NewEtcdStorage(etcdClient, latest.GroupOrDie("").InterfacesFor, testapi.Default.GroupAndVersion(), etcdtest.PathPrefix()) - storageVersions[""] = testapi.Default.GroupAndVersion() - if err != nil { - glog.Fatalf("Unable to get etcd storage: %v", err) - } - expEtcdStorage, err := master.NewEtcdStorage(etcdClient, latest.GroupOrDie("extensions").InterfacesFor, testapi.Extensions.GroupAndVersion(), etcdtest.PathPrefix()) - storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - if err != nil { - glog.Fatalf("Unable to get etcd storage for experimental: %v", err) - } - storageDestinations := master.NewStorageDestinations() - storageDestinations.AddAPIGroup("", etcdStorage) - storageDestinations.AddAPIGroup("extensions", expEtcdStorage) - // Master host, port, err := net.SplitHostPort(strings.TrimLeft(apiServer.URL, "http://")) if err != nil { @@ -177,22 +152,15 @@ func startComponents(firstManifestURL, secondManifestURL string) (string, string "Fail to get a valid public address for master.", err) } + masterConfig := framework.NewMasterConfig() + masterConfig.EnableCoreControllers = true + masterConfig.EnableProfiling = true + masterConfig.ReadWritePort = portNumber + masterConfig.PublicAddress = hostIP + masterConfig.CacheTimeout = 2 * time.Second + // Create a master and install handlers into mux. - m := master.New(&master.Config{ - StorageDestinations: storageDestinations, - KubeletClient: fakeKubeletClient{}, - EnableCoreControllers: true, - EnableLogsSupport: false, - EnableProfiling: true, - APIPrefix: "/api", - APIGroupPrefix: "/apis", - Authorizer: apiserver.NewAlwaysAllowAuthorizer(), - AdmissionControl: admit.NewAlwaysAdmit(), - ReadWritePort: portNumber, - PublicAddress: hostIP, - CacheTimeout: 2 * time.Second, - StorageVersions: storageVersions, - }) + m := master.New(masterConfig) handler.delegate = m.Handler // Scheduler diff --git a/test/integration/auth_test.go b/test/integration/auth_test.go index 96f0bc881c2..53cc1b37a43 100644 --- a/test/integration/auth_test.go +++ b/test/integration/auth_test.go @@ -387,42 +387,14 @@ func TestAuthModeAlwaysAllow(t *testing.T) { framework.DeleteAllEtcdKeys() // Set up a master - etcdStorage, err := framework.NewEtcdStorage() - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - expEtcdStorage, err := framework.NewExtensionsEtcdStorage(nil) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - storageDestinations := master.NewStorageDestinations() - storageDestinations.AddAPIGroup("", etcdStorage) - storageDestinations.AddAPIGroup("extensions", expEtcdStorage) - - storageVersions := make(map[string]string) - storageVersions[""] = testapi.Default.Version() - storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - var m *master.Master s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { m.Handler.ServeHTTP(w, req) })) defer s.Close() - m = master.New(&master.Config{ - StorageDestinations: storageDestinations, - KubeletClient: client.FakeKubeletClient{}, - EnableCoreControllers: true, - EnableLogsSupport: false, - EnableUISupport: false, - EnableIndex: true, - APIPrefix: "/api", - Authorizer: apiserver.NewAlwaysAllowAuthorizer(), - AdmissionControl: admit.NewAlwaysAdmit(), - StorageVersions: storageVersions, - PublicAddress: net.ParseIP("192.168.10.4"), - }) + masterConfig := framework.NewIntegrationTestMasterConfig() + m = master.New(masterConfig) transport := http.DefaultTransport previousResourceVersion := make(map[string]float64) diff --git a/test/integration/extender_test.go b/test/integration/extender_test.go index b9ab80a669a..240cc90e4f6 100644 --- a/test/integration/extender_test.go +++ b/test/integration/extender_test.go @@ -33,14 +33,11 @@ import ( "k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" - "k8s.io/kubernetes/pkg/apiserver" "k8s.io/kubernetes/pkg/client/record" client "k8s.io/kubernetes/pkg/client/unversioned" - kubeletclient "k8s.io/kubernetes/pkg/kubelet/client" "k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util/wait" - "k8s.io/kubernetes/plugin/pkg/admission/admit" "k8s.io/kubernetes/plugin/pkg/scheduler" _ "k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider" schedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api" @@ -188,23 +185,6 @@ func machine_3_Prioritizer(pod *api.Pod, nodes *api.NodeList) (*schedulerapi.Hos } func TestSchedulerExtender(t *testing.T) { - etcdStorage, err := framework.NewEtcdStorage() - if err != nil { - t.Fatalf("Couldn't create etcd storage: %v", err) - } - expEtcdStorage, err := framework.NewExtensionsEtcdStorage(nil) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - storageDestinations := master.NewStorageDestinations() - storageDestinations.AddAPIGroup("", etcdStorage) - storageDestinations.AddAPIGroup("extensions", expEtcdStorage) - - storageVersions := make(map[string]string) - storageVersions[""] = testapi.Default.Version() - storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - framework.DeleteAllEtcdKeys() var m *master.Master @@ -213,18 +193,8 @@ func TestSchedulerExtender(t *testing.T) { })) defer s.Close() - m = master.New(&master.Config{ - StorageDestinations: storageDestinations, - KubeletClient: kubeletclient.FakeKubeletClient{}, - EnableCoreControllers: true, - EnableLogsSupport: false, - EnableUISupport: false, - EnableIndex: true, - APIPrefix: "/api", - Authorizer: apiserver.NewAlwaysAllowAuthorizer(), - AdmissionControl: admit.NewAlwaysAdmit(), - StorageVersions: storageVersions, - }) + masterConfig := framework.NewIntegrationTestMasterConfig() + m = master.New(masterConfig) restClient := client.NewOrDie(&client.Config{Host: s.URL, GroupVersion: testapi.Default.GroupVersion()}) diff --git a/test/integration/framework/master_utils.go b/test/integration/framework/master_utils.go index 896549444b3..3eedbda12a2 100644 --- a/test/integration/framework/master_utils.go +++ b/test/integration/framework/master_utils.go @@ -18,6 +18,7 @@ package framework import ( "io/ioutil" + "net" "net/http" "net/http/httptest" "runtime" @@ -126,40 +127,52 @@ func startMasterOrDie(masterConfig *master.Config) (*master.Master, *httptest.Se })) if masterConfig == nil { - etcdClient := NewEtcdClient() - storageVersions := make(map[string]string) - etcdStorage, err := master.NewEtcdStorage(etcdClient, latest.GroupOrDie("").InterfacesFor, latest.GroupOrDie("").GroupVersion.String(), etcdtest.PathPrefix()) - storageVersions[""] = latest.GroupOrDie("").GroupVersion.String() - if err != nil { - glog.Fatalf("Failed to create etcd storage for master %v", err) - } - expEtcdStorage, err := NewExtensionsEtcdStorage(etcdClient) - storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - if err != nil { - glog.Fatalf("Failed to create etcd storage for master %v", err) - } - storageDestinations := master.NewStorageDestinations() - storageDestinations.AddAPIGroup("", etcdStorage) - storageDestinations.AddAPIGroup("extensions", expEtcdStorage) - - masterConfig = &master.Config{ - StorageDestinations: storageDestinations, - StorageVersions: storageVersions, - KubeletClient: kubeletclient.FakeKubeletClient{}, - EnableLogsSupport: false, - EnableProfiling: true, - EnableSwaggerSupport: true, - EnableUISupport: false, - APIPrefix: "/api", - APIGroupPrefix: "/apis", - Authorizer: apiserver.NewAlwaysAllowAuthorizer(), - AdmissionControl: admit.NewAlwaysAdmit(), - } + masterConfig = NewMasterConfig() + masterConfig.EnableProfiling = true + masterConfig.EnableSwaggerSupport = true } m = master.New(masterConfig) return m, s } +// Returns a basic master config. +func NewMasterConfig() *master.Config { + etcdClient := NewEtcdClient() + storageVersions := make(map[string]string) + etcdStorage, err := master.NewEtcdStorage(etcdClient, latest.GroupOrDie("").InterfacesFor, testapi.Default.GroupAndVersion(), etcdtest.PathPrefix()) + storageVersions[""] = testapi.Default.GroupAndVersion() + if err != nil { + glog.Fatalf("Failed to create etcd storage for master %v", err) + } + expEtcdStorage, err := NewExtensionsEtcdStorage(etcdClient) + storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() + if err != nil { + glog.Fatalf("Failed to create etcd storage for master %v", err) + } + storageDestinations := master.NewStorageDestinations() + storageDestinations.AddAPIGroup("", etcdStorage) + storageDestinations.AddAPIGroup("extensions", expEtcdStorage) + + return &master.Config{ + StorageDestinations: storageDestinations, + StorageVersions: storageVersions, + KubeletClient: kubeletclient.FakeKubeletClient{}, + APIPrefix: "/api", + APIGroupPrefix: "/apis", + Authorizer: apiserver.NewAlwaysAllowAuthorizer(), + AdmissionControl: admit.NewAlwaysAdmit(), + } +} + +// Returns the master config appropriate for most integration tests. +func NewIntegrationTestMasterConfig() *master.Config { + masterConfig := NewMasterConfig() + masterConfig.EnableCoreControllers = true + masterConfig.EnableIndex = true + masterConfig.PublicAddress = net.ParseIP("192.168.10.4") + return masterConfig +} + func (m *MasterComponents) stopRCManager() { close(m.rcStopCh) } diff --git a/test/integration/scheduler_test.go b/test/integration/scheduler_test.go index 80e77fcbc6b..bdbf8a3a009 100644 --- a/test/integration/scheduler_test.go +++ b/test/integration/scheduler_test.go @@ -22,7 +22,6 @@ package integration import ( "fmt" - "net" "net/http" "net/http/httptest" "sync" @@ -34,15 +33,12 @@ import ( "k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" - "k8s.io/kubernetes/pkg/apiserver" "k8s.io/kubernetes/pkg/client/cache" "k8s.io/kubernetes/pkg/client/record" client "k8s.io/kubernetes/pkg/client/unversioned" - kubeletclient "k8s.io/kubernetes/pkg/kubelet/client" "k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util/wait" - "k8s.io/kubernetes/plugin/pkg/admission/admit" "k8s.io/kubernetes/plugin/pkg/scheduler" _ "k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider" "k8s.io/kubernetes/plugin/pkg/scheduler/factory" @@ -57,23 +53,6 @@ type nodeStateManager struct { } func TestUnschedulableNodes(t *testing.T) { - etcdStorage, err := framework.NewEtcdStorage() - if err != nil { - t.Fatalf("Couldn't create etcd storage: %v", err) - } - expEtcdStorage, err := framework.NewExtensionsEtcdStorage(nil) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - storageDestinations := master.NewStorageDestinations() - storageDestinations.AddAPIGroup("", etcdStorage) - storageDestinations.AddAPIGroup("extensions", expEtcdStorage) - - storageVersions := make(map[string]string) - storageVersions[""] = testapi.Default.Version() - storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - framework.DeleteAllEtcdKeys() var m *master.Master @@ -82,19 +61,8 @@ func TestUnschedulableNodes(t *testing.T) { })) defer s.Close() - m = master.New(&master.Config{ - StorageDestinations: storageDestinations, - KubeletClient: kubeletclient.FakeKubeletClient{}, - EnableCoreControllers: true, - EnableLogsSupport: false, - EnableUISupport: false, - EnableIndex: true, - APIPrefix: "/api", - Authorizer: apiserver.NewAlwaysAllowAuthorizer(), - AdmissionControl: admit.NewAlwaysAdmit(), - StorageVersions: storageVersions, - PublicAddress: net.ParseIP("192.168.10.4"), - }) + masterConfig := framework.NewIntegrationTestMasterConfig() + m = master.New(masterConfig) restClient := client.NewOrDie(&client.Config{Host: s.URL, GroupVersion: testapi.Default.GroupVersion()}) @@ -308,23 +276,6 @@ func DoTestUnschedulableNodes(t *testing.T, restClient *client.Client, nodeStore } func BenchmarkScheduling(b *testing.B) { - etcdStorage, err := framework.NewEtcdStorage() - if err != nil { - b.Fatalf("Couldn't create etcd storage: %v", err) - } - expEtcdStorage, err := framework.NewExtensionsEtcdStorage(nil) - if err != nil { - b.Fatalf("unexpected error: %v", err) - } - - storageDestinations := master.NewStorageDestinations() - storageDestinations.AddAPIGroup("", etcdStorage) - storageDestinations.AddAPIGroup("extensions", expEtcdStorage) - - storageVersions := make(map[string]string) - storageVersions[""] = testapi.Default.Version() - storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - framework.DeleteAllEtcdKeys() var m *master.Master @@ -333,19 +284,8 @@ func BenchmarkScheduling(b *testing.B) { })) defer s.Close() - m = master.New(&master.Config{ - StorageDestinations: storageDestinations, - KubeletClient: kubeletclient.FakeKubeletClient{}, - EnableCoreControllers: true, - EnableLogsSupport: false, - EnableUISupport: false, - EnableIndex: true, - APIPrefix: "/api", - Authorizer: apiserver.NewAlwaysAllowAuthorizer(), - AdmissionControl: admit.NewAlwaysAdmit(), - StorageVersions: storageVersions, - PublicAddress: net.ParseIP("192.168.10.4"), - }) + masterConfig := framework.NewIntegrationTestMasterConfig() + m = master.New(masterConfig) c := client.NewOrDie(&client.Config{ Host: s.URL, diff --git a/test/integration/secret_test.go b/test/integration/secret_test.go index 4ecf62103b2..617b0e6cd5a 100644 --- a/test/integration/secret_test.go +++ b/test/integration/secret_test.go @@ -21,18 +21,14 @@ package integration // This file tests use of the secrets API resource. import ( - "net" "net/http" "net/http/httptest" "testing" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" - "k8s.io/kubernetes/pkg/apiserver" client "k8s.io/kubernetes/pkg/client/unversioned" - kubeletclient "k8s.io/kubernetes/pkg/kubelet/client" "k8s.io/kubernetes/pkg/master" - "k8s.io/kubernetes/plugin/pkg/admission/admit" "k8s.io/kubernetes/test/integration/framework" ) @@ -49,42 +45,14 @@ func deleteSecretOrErrorf(t *testing.T, c *client.Client, ns, name string) { // TestSecrets tests apiserver-side behavior of creation of secret objects and their use by pods. func TestSecrets(t *testing.T) { - etcdStorage, err := framework.NewEtcdStorage() - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - expEtcdStorage, err := framework.NewExtensionsEtcdStorage(nil) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - storageDestinations := master.NewStorageDestinations() - storageDestinations.AddAPIGroup("", etcdStorage) - storageDestinations.AddAPIGroup("extensions", expEtcdStorage) - - storageVersions := make(map[string]string) - storageVersions[""] = testapi.Default.Version() - storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - var m *master.Master s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { m.Handler.ServeHTTP(w, req) })) defer s.Close() - m = master.New(&master.Config{ - StorageDestinations: storageDestinations, - KubeletClient: kubeletclient.FakeKubeletClient{}, - EnableCoreControllers: true, - EnableLogsSupport: false, - EnableUISupport: false, - EnableIndex: true, - APIPrefix: "/api", - Authorizer: apiserver.NewAlwaysAllowAuthorizer(), - AdmissionControl: admit.NewAlwaysAdmit(), - StorageVersions: storageVersions, - PublicAddress: net.ParseIP("192.168.10.4"), - }) + masterConfig := framework.NewIntegrationTestMasterConfig() + m = master.New(masterConfig) framework.DeleteAllEtcdKeys() client := client.NewOrDie(&client.Config{Host: s.URL, GroupVersion: testapi.Default.GroupVersion()}) diff --git a/test/integration/service_account_test.go b/test/integration/service_account_test.go index 59e0d4dd0a5..f61914972f1 100644 --- a/test/integration/service_account_test.go +++ b/test/integration/service_account_test.go @@ -42,7 +42,6 @@ import ( client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/controller/serviceaccount" "k8s.io/kubernetes/pkg/fields" - kubeletclient "k8s.io/kubernetes/pkg/kubelet/client" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/pkg/util/sets" @@ -341,25 +340,6 @@ func startServiceAccountTestServer(t *testing.T) (*client.Client, client.Config, deleteAllEtcdKeys() - // Etcd - etcdStorage, err := framework.NewEtcdStorage() - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - expEtcdStorage, err := framework.NewExtensionsEtcdStorage(nil) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - storageDestinations := master.NewStorageDestinations() - storageDestinations.AddAPIGroup("", etcdStorage) - storageDestinations.AddAPIGroup("extensions", expEtcdStorage) - - storageVersions := make(map[string]string) - storageVersions[""] = testapi.Default.Version() - storageVersions["extensions"] = testapi.Extensions.GroupAndVersion() - // Listener var m *master.Master apiServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { @@ -380,7 +360,7 @@ func startServiceAccountTestServer(t *testing.T) (*client.Client, client.Config, } return nil, false, nil }) - serviceAccountKey, err := rsa.GenerateKey(rand.Reader, 2048) + serviceAccountKey, _ := rsa.GenerateKey(rand.Reader, 2048) serviceAccountTokenGetter := serviceaccount.NewGetterFromClient(rootClient) serviceAccountTokenAuth := serviceaccount.JWTTokenAuthenticator([]*rsa.PublicKey{&serviceAccountKey.PublicKey}, true, serviceAccountTokenGetter) authenticator := union.New( @@ -423,19 +403,14 @@ func startServiceAccountTestServer(t *testing.T) (*client.Client, client.Config, // Set up admission plugin to auto-assign serviceaccounts to pods serviceAccountAdmission := serviceaccountadmission.NewServiceAccount(rootClient) + masterConfig := framework.NewMasterConfig() + masterConfig.EnableIndex = true + masterConfig.Authenticator = authenticator + masterConfig.Authorizer = authorizer + masterConfig.AdmissionControl = serviceAccountAdmission + // Create a master and install handlers into mux. - m = master.New(&master.Config{ - StorageDestinations: storageDestinations, - KubeletClient: kubeletclient.FakeKubeletClient{}, - EnableLogsSupport: false, - EnableUISupport: false, - EnableIndex: true, - APIPrefix: "/api", - Authenticator: authenticator, - Authorizer: authorizer, - AdmissionControl: serviceAccountAdmission, - StorageVersions: storageVersions, - }) + m = master.New(masterConfig) // Start the service account and service account token controllers tokenController := serviceaccount.NewTokensController(rootClient, serviceaccount.TokensControllerOptions{TokenGenerator: serviceaccount.JWTTokenGenerator(serviceAccountKey)})