Add test for defining labels for routes (#477)

Signed-off-by: Anatolii Bazko <abazko@redhat.com>
pull/480/head
Anatolii Bazko 2020-09-29 09:51:39 +03:00 committed by GitHub
parent c2ac0b75a6
commit dbb2c61b6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 138 additions and 71 deletions

View File

@ -36,6 +36,7 @@ import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/kubernetes/scheme"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/client/fake"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
logf "sigs.k8s.io/controller-runtime/pkg/runtime/log"
@ -43,6 +44,11 @@ import (
"testing"
)
var (
name = "eclipse-che"
namespace = "eclipse-che"
)
func init() {
operator := &appsv1.Deployment{}
data, err := ioutil.ReadFile("../../../deploy/operator.yaml")
@ -58,79 +64,16 @@ func TestCheController(t *testing.T) {
// Set the logger to development mode for verbose logs.
logf.SetLogger(logf.ZapLogger(true))
var (
name = "eclipse-che"
namespace = "eclipse-che"
)
pgPod := &corev1.Pod{
TypeMeta: metav1.TypeMeta{
Kind: "Pod",
APIVersion: "v1",
},
ObjectMeta: metav1.ObjectMeta{
Name: "fake-pg-pod",
Namespace: "eclipse-che",
Labels: map[string]string{
"component": "postgres",
},
},
}
// A CheCluster custom resource with metadata and spec
cheCR := &orgv1.CheCluster{
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: namespace,
},
Spec: orgv1.CheClusterSpec{
// todo add some spec to check controller ifs like external db, ssl etc
Server: orgv1.CheClusterSpecServer{
CheWorkspaceClusterRole: "cluster-admin",
},
},
}
userList := &userv1.UserList{
Items: []userv1.User{
userv1.User{
ObjectMeta: metav1.ObjectMeta{
Name: "user1",
},
},
userv1.User{
ObjectMeta: metav1.ObjectMeta{
Name: "user2",
},
},
},
}
// Objects to track in the fake client.
objs := []runtime.Object{
cheCR, pgPod, userList,
}
route := &routev1.Route{}
oAuthClient := &oauth.OAuthClient{}
users := &userv1.UserList{}
user := &userv1.User{}
// Register operator types with the runtime scheme
s := scheme.Scheme
s.AddKnownTypes(orgv1.SchemeGroupVersion, cheCR)
s.AddKnownTypes(routev1.SchemeGroupVersion, route)
s.AddKnownTypes(oauth.SchemeGroupVersion, oAuthClient)
s.AddKnownTypes(userv1.SchemeGroupVersion, users, user)
s.AddKnownTypes(console.GroupVersion, &console.ConsoleLink{})
// Create a fake client to mock API calls
cl := fake.NewFakeClient(objs...)
tests := true
cl, scheme := Init()
// Create a ReconcileChe object with the scheme and fake client
r := &ReconcileChe{client: cl, nonCachedClient: cl, scheme: s, tests: tests}
r := &ReconcileChe{client: cl, nonCachedClient: cl, scheme: &scheme, tests: true}
// get CR
cheCR := &orgv1.CheCluster{}
if err := cl.Get(context.TODO(), types.NamespacedName{Name: name, Namespace: namespace}, cheCR); err != nil {
t.Errorf("CR not found")
}
// Mock request to simulate Reconcile() being called on an event for a
// watched resource .
@ -193,6 +136,7 @@ func TestCheController(t *testing.T) {
if cm.Data["CHE_INFRA_OPENSHIFT_TLS__ENABLED"] != "true" {
t.Errorf("ConfigMap wasn't updated. Extecting true, got: %s", cm.Data["CHE_INFRA_OPENSHIFT_TLS__ENABLED"])
}
route := &routev1.Route{}
if err := cl.Get(context.TODO(), types.NamespacedName{Name: deploy.DefaultCheFlavor(cheCR), Namespace: cheCR.Namespace}, route); err != nil {
t.Errorf("Route %s not found: %s", cm.Name, err)
}
@ -250,6 +194,7 @@ func TestCheController(t *testing.T) {
}
oAuthClientName := cheCR.Spec.Auth.OAuthClientName
oauthSecret := cheCR.Spec.Auth.OAuthSecret
oAuthClient := &oauth.OAuthClient{}
if err = r.client.Get(context.TODO(), types.NamespacedName{Name: oAuthClientName, Namespace: ""}, oAuthClient); err != nil {
t.Errorf("Failed to Get oAuthClient %s: %s", oAuthClient.Name, err)
}
@ -319,3 +264,125 @@ func TestCheController(t *testing.T) {
}
logrus.Infof("Disregard the error above. OauthClient %s has been deleted", oauthClientName)
}
func TestConfiguringLabelsForRoutes(t *testing.T) {
// Set the logger to development mode for verbose logs.
logf.SetLogger(logf.ZapLogger(true))
cl, scheme := Init()
// Create a ReconcileChe object with the scheme and fake client
r := &ReconcileChe{client: cl, nonCachedClient: cl, scheme: &scheme, tests: true}
// get CR
cheCR := &orgv1.CheCluster{}
if err := cl.Get(context.TODO(), types.NamespacedName{Name: name, Namespace: namespace}, cheCR); err != nil {
t.Errorf("CR not found")
}
// Mock request to simulate Reconcile() being called on an event for a
// watched resource .
req := reconcile.Request{
NamespacedName: types.NamespacedName{
Name: name,
Namespace: namespace,
},
}
// reconcile
_, err := r.Reconcile(req)
if err != nil {
t.Fatalf("reconcile: (%v)", err)
}
cheCR.Spec.Server.CheServerRoute.Labels = "route=one"
if err := cl.Update(context.TODO(), cheCR); err != nil {
t.Error("Failed to update CheCluster custom resource")
}
// reconcile again
_, err = r.Reconcile(req)
if err != nil {
t.Fatalf("reconcile: (%v)", err)
}
// get route
route := &routev1.Route{}
if err := cl.Get(context.TODO(), types.NamespacedName{Name: "che", Namespace: cheCR.Namespace}, route); err != nil {
t.Errorf("Route %s not found: %s", route.Name, err)
}
if route.ObjectMeta.Labels["route"] != "one" {
t.Fatalf("Route '%s' does not have label '%s'", route.Name, route)
}
}
func Init() (client.Client, runtime.Scheme) {
pgPod := &corev1.Pod{
TypeMeta: metav1.TypeMeta{
Kind: "Pod",
APIVersion: "v1",
},
ObjectMeta: metav1.ObjectMeta{
Name: "fake-pg-pod",
Namespace: "eclipse-che",
Labels: map[string]string{
"component": "postgres",
},
},
}
// A CheCluster custom resource with metadata and spec
cheCR := &orgv1.CheCluster{
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: namespace,
},
Spec: orgv1.CheClusterSpec{
// todo add some spec to check controller ifs like external db, ssl etc
Server: orgv1.CheClusterSpecServer{
CheWorkspaceClusterRole: "cluster-admin",
},
},
}
userList := &userv1.UserList{
Items: []userv1.User{
userv1.User{
ObjectMeta: metav1.ObjectMeta{
Name: "user1",
},
},
userv1.User{
ObjectMeta: metav1.ObjectMeta{
Name: "user2",
},
},
},
}
route := &routev1.Route{
ObjectMeta: metav1.ObjectMeta{
Name: "che",
Namespace: namespace,
},
}
// Objects to track in the fake client.
objs := []runtime.Object{
cheCR, pgPod, userList, route,
}
oAuthClient := &oauth.OAuthClient{}
users := &userv1.UserList{}
user := &userv1.User{}
// Register operator types with the runtime scheme
scheme := scheme.Scheme
scheme.AddKnownTypes(orgv1.SchemeGroupVersion, cheCR)
scheme.AddKnownTypes(routev1.SchemeGroupVersion, route)
scheme.AddKnownTypes(oauth.SchemeGroupVersion, oAuthClient)
scheme.AddKnownTypes(userv1.SchemeGroupVersion, users, user)
scheme.AddKnownTypes(console.GroupVersion, &console.ConsoleLink{})
// Create a fake client to mock API calls
return fake.NewFakeClient(objs...), *scheme
}