997787d8 |
package integration
import (
"path"
"testing"
"golang.org/x/net/context"
etcd "github.com/coreos/etcd/client"
testutil "github.com/openshift/origin/test/util"
testserver "github.com/openshift/origin/test/util/server"
kapi "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/unversioned" |
8201efbe |
"k8s.io/kubernetes/pkg/apis/autoscaling" |
508f280e |
"k8s.io/kubernetes/pkg/apis/batch" |
997787d8 |
"k8s.io/kubernetes/pkg/apis/extensions"
extensions_v1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" |
7cf64f47 |
kautoscalingclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned"
kbatchclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned"
kclientset14 "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_4" |
8201efbe |
"k8s.io/kubernetes/pkg/client/restclient" |
997787d8 |
"k8s.io/kubernetes/pkg/runtime"
)
// TODO: enable once storage is separable
// func TestStorageVersionsSeparated(t *testing.T) {
// runStorageTest(t, "separated",
// autoscaling_v1.SchemeGroupVersion,
// batch_v1.SchemeGroupVersion,
// extensions_v1beta1.SchemeGroupVersion,
// )
// }
func TestStorageVersionsUnified(t *testing.T) { |
9f6552c6 |
defer testutil.DumpEtcdOnFailure(t) |
997787d8 |
runStorageTest(t, "unified",
extensions_v1beta1.SchemeGroupVersion,
extensions_v1beta1.SchemeGroupVersion,
extensions_v1beta1.SchemeGroupVersion,
)
}
|
8201efbe |
type legacyExtensionsAutoscaling struct { |
7cf64f47 |
kautoscalingclient.HorizontalPodAutoscalerInterface |
8201efbe |
client *restclient.RESTClient
namespace string
}
// List takes label and field selectors, and returns the list of horizontalPodAutoscalers that match those selectors.
func (c legacyExtensionsAutoscaling) List(opts kapi.ListOptions) (result *autoscaling.HorizontalPodAutoscalerList, err error) {
result = &autoscaling.HorizontalPodAutoscalerList{}
err = c.client.Get().Namespace(c.namespace).Resource("horizontalPodAutoscalers").VersionedParams(&opts, kapi.ParameterCodec).Do().Into(result)
return
}
func (c legacyExtensionsAutoscaling) Create(hpa *autoscaling.HorizontalPodAutoscaler) (*autoscaling.HorizontalPodAutoscaler, error) {
var result autoscaling.HorizontalPodAutoscaler
return &result, c.client.Post().Resource("horizontalpodautoscalers").Namespace(c.namespace).Body(hpa).Do().Into(&result)
}
func (c legacyExtensionsAutoscaling) Get(name string) (*autoscaling.HorizontalPodAutoscaler, error) {
var result autoscaling.HorizontalPodAutoscaler
return &result, c.client.Get().Resource("horizontalpodautoscalers").Namespace(c.namespace).Name(name).Do().Into(&result)
}
|
997787d8 |
func runStorageTest(t *testing.T, ns string, autoscalingVersion, batchVersion, extensionsVersion unversioned.GroupVersion) {
etcdServer := testutil.RequireEtcd(t)
masterConfig, err := testserver.DefaultMasterOptions()
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
keys := etcd.NewKeysAPI(etcdServer.Client)
getGVKFromEtcd := func(prefix, name string) (*unversioned.GroupVersionKind, error) {
key := path.Join(masterConfig.EtcdStorageConfig.KubernetesStoragePrefix, prefix, ns, name)
resp, err := keys.Get(context.TODO(), key, nil)
if err != nil {
return nil, err
}
_, gvk, err := runtime.UnstructuredJSONScheme.Decode([]byte(resp.Node.Value), nil, nil)
return gvk, err
}
// TODO: Set storage versions for API groups
// masterConfig.EtcdStorageConfig.StorageVersions[autoscaling.GroupName] = autoscalingVersion.String()
// masterConfig.EtcdStorageConfig.StorageVersions[batch.GroupName] = batchVersion.String()
// masterConfig.EtcdStorageConfig.StorageVersions[extensions.GroupName] = extensionsVersion.String()
clusterAdminKubeConfig, err := testserver.StartConfiguredMaster(masterConfig)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
clusterAdminClient, err := testutil.GetClusterAdminClient(clusterAdminKubeConfig)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
clusterAdminClientConfig, err := testutil.GetClusterAdminClientConfig(clusterAdminKubeConfig)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
// create the containing project
if _, err := testserver.CreateNewProject(clusterAdminClient, *clusterAdminClientConfig, ns, "admin"); err != nil {
t.Fatalf("unexpected error creating the project: %v", err)
} |
7cf64f47 |
projectAdminClient, projectAdminKubeClient, projectAdminKubeConfig, err := testutil.GetClientForUser(*clusterAdminClientConfig, "admin") |
997787d8 |
if err != nil {
t.Fatalf("unexpected error getting project admin client: %v", err)
} |
7cf64f47 |
projectAdminKubeClient14 := kclientset14.NewForConfigOrDie(projectAdminKubeConfig) |
997787d8 |
if err := testutil.WaitForPolicyUpdate(projectAdminClient, ns, "get", extensions.Resource("horizontalpodautoscalers"), true); err != nil {
t.Fatalf("unexpected error waiting for policy update: %v", err)
}
jobTestcases := map[string]struct { |
7cf64f47 |
creator kbatchclient.JobInterface |
997787d8 |
}{ |
508f280e |
"batch": {creator: projectAdminKubeClient.Batch().Jobs(ns)}, |
997787d8 |
}
for name, testcase := range jobTestcases { |
508f280e |
job := batch.Job{ |
997787d8 |
ObjectMeta: kapi.ObjectMeta{Name: name + "-job"}, |
508f280e |
Spec: batch.JobSpec{ |
997787d8 |
Template: kapi.PodTemplateSpec{
Spec: kapi.PodSpec{
RestartPolicy: kapi.RestartPolicyNever,
Containers: []kapi.Container{{Name: "containername", Image: "containerimage"}},
},
},
},
}
// Create a Job
if _, err := testcase.creator.Create(&job); err != nil {
t.Fatalf("%s: unexpected error creating Job: %v", name, err)
}
// Ensure it is persisted correctly
if gvk, err := getGVKFromEtcd("jobs", job.Name); err != nil {
t.Fatalf("%s: unexpected error reading Job: %v", name, err)
} else if *gvk != batchVersion.WithKind("Job") {
t.Fatalf("%s: expected api version %s in etcd, got %s reading Job", name, batchVersion, gvk)
}
// Ensure it is accessible from both APIs
if _, err := projectAdminKubeClient.Batch().Jobs(ns).Get(job.Name); err != nil {
t.Errorf("%s: Error reading Job from the batch client: %#v", name, err)
} |
7cf64f47 |
if _, err := projectAdminKubeClient14.Extensions().Jobs(ns).Get(job.Name); err != nil { |
997787d8 |
t.Errorf("%s: Error reading Job from the extensions client: %#v", name, err)
}
}
|
8201efbe |
legacyClient := legacyExtensionsAutoscaling{
projectAdminKubeClient.Autoscaling().HorizontalPodAutoscalers(ns),
projectAdminKubeClient.AutoscalingClient.RESTClient,
ns,
} |
997787d8 |
hpaTestcases := map[string]struct { |
7cf64f47 |
creator kautoscalingclient.HorizontalPodAutoscalerInterface |
997787d8 |
}{
"autoscaling": {creator: projectAdminKubeClient.Autoscaling().HorizontalPodAutoscalers(ns)}, |
8201efbe |
"extensions": {
creator: legacyClient,
}, |
997787d8 |
}
for name, testcase := range hpaTestcases { |
8201efbe |
hpa := autoscaling.HorizontalPodAutoscaler{ |
997787d8 |
ObjectMeta: kapi.ObjectMeta{Name: name + "-hpa"}, |
8201efbe |
Spec: autoscaling.HorizontalPodAutoscalerSpec{
MaxReplicas: 1,
ScaleTargetRef: autoscaling.CrossVersionObjectReference{Kind: "ReplicationController", Name: "myrc"}, |
997787d8 |
},
}
// Create an HPA
if _, err := testcase.creator.Create(&hpa); err != nil {
t.Fatalf("%s: unexpected error creating HPA: %v", name, err)
}
// Make sure it is persisted correctly
if gvk, err := getGVKFromEtcd("horizontalpodautoscalers", hpa.Name); err != nil {
t.Fatalf("%s: unexpected error reading HPA: %v", name, err)
} else if *gvk != autoscalingVersion.WithKind("HorizontalPodAutoscaler") {
t.Fatalf("%s: expected api version %s in etcd, got %s reading HPA", name, autoscalingVersion, gvk)
}
|
8201efbe |
// Make sure it is available from the api |
997787d8 |
if _, err := projectAdminKubeClient.Autoscaling().HorizontalPodAutoscalers(ns).Get(hpa.Name); err != nil {
t.Errorf("%s: Error reading HPA.autoscaling from the autoscaling/v1 API: %#v", name, err)
} |
8201efbe |
if _, err := legacyClient.Get(hpa.Name); err != nil {
t.Errorf("%s: Error reading HPA.autoscaling from the extensions/v1beta1 API: %#v", name, err) |
997787d8 |
}
}
} |