Skip to content

Commit

Permalink
wip: fix panic
Browse files Browse the repository at this point in the history
  • Loading branch information
gabrieljackson committed Nov 14, 2019
1 parent c03e606 commit 50a46b7
Show file tree
Hide file tree
Showing 2 changed files with 140 additions and 2 deletions.
2 changes: 1 addition & 1 deletion pkg/controller/clusterinstallation/mattermost.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,8 @@ func (r *ReconcileClusterInstallation) checkMattermostIngress(mattermost *matter

func (r *ReconcileClusterInstallation) checkMattermostDeployment(mattermost *mattermostv1alpha1.ClusterInstallation, resourceName, ingressName, imageName string, reqLogger logr.Logger) error {
var externalDB, isLicensed bool
var dbInfo *databaseInfo
var err error
dbInfo := &databaseInfo{}

if mattermost.Spec.Database.Secret == "" {
dbInfo, err = r.getOrCreateMySQLSecrets(mattermost, reqLogger)
Expand Down
140 changes: 139 additions & 1 deletion pkg/controller/clusterinstallation/mattermost_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import (
logf "sigs.k8s.io/controller-runtime/pkg/runtime/log"
)

func TestCheckMattermost(t *testing.T) {
func TestCheckMattermostExternalDB(t *testing.T) {
// Setup logging for the reconciler so we can see what happened on failure.
logger := logmo.InitLogger()
logger = logger.WithName("test.opr")
Expand Down Expand Up @@ -154,3 +154,141 @@ func TestCheckMattermost(t *testing.T) {
})
})
}

func TestCheckMattermost(t *testing.T) {
// Setup logging for the reconciler so we can see what happened on failure.
logger := logmo.InitLogger()
logger = logger.WithName("test.opr")
logf.SetLogger(logger)

ciName := "foo"
ciNamespace := "default"
replicas := int32(4)
externalDBSecretName := "externalDB"
ci := &mattermostv1alpha1.ClusterInstallation{
ObjectMeta: metav1.ObjectMeta{
Name: ciName,
Namespace: ciNamespace,
UID: types.UID("test"),
},
Spec: mattermostv1alpha1.ClusterInstallationSpec{
Replicas: replicas,
Image: "mattermost/mattermost-enterprise-edition",
Version: "5.15.0",
IngressName: "foo.mattermost.dev",
Database: mattermostv1alpha1.Database{
Secret: externalDBSecretName,
},
},
}

apis.AddToScheme(scheme.Scheme)
s := scheme.Scheme
s.AddKnownTypes(mattermostv1alpha1.SchemeGroupVersion, ci)
r := &ReconcileClusterInstallation{client: fake.NewFakeClient(), scheme: s}

err := prepAllDependencyTestResources(r.client, ci)
require.NoError(t, err)

externalDBSecret := &corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: externalDBSecretName,
Namespace: ciNamespace,
},
Data: map[string][]byte{
"DB_CONNECTION_STRING": []byte("mysql://test"),
},
}
err = r.client.Create(context.TODO(), externalDBSecret)
require.NoError(t, err)

t.Run("service", func(t *testing.T) {
err = r.checkMattermostService(ci, ci.Name, ci.Name, logger)
assert.NoError(t, err)

found := &corev1.Service{}
err = r.client.Get(context.TODO(), types.NamespacedName{Name: ciName, Namespace: ciNamespace}, found)
require.NoError(t, err)
require.NotNil(t, found)

original := found.DeepCopy()
modified := found.DeepCopy()
modified.Labels = nil
modified.Annotations = nil
modified.Spec = corev1.ServiceSpec{}

err = r.client.Update(context.TODO(), modified)
require.NoError(t, err)
err = r.checkMattermostService(ci, ci.Name, ci.Name, logger)
require.NoError(t, err)
err = r.client.Get(context.TODO(), types.NamespacedName{Name: ciName, Namespace: ciNamespace}, found)
require.NoError(t, err)
assert.Equal(t, original, found)
})

t.Run("ingress", func(t *testing.T) {
err = r.checkMattermostIngress(ci, ci.Name, ci.Spec.IngressName, ci.Spec.IngressAnnotations, logger)
assert.NoError(t, err)

found := &v1beta1.Ingress{}
err = r.client.Get(context.TODO(), types.NamespacedName{Name: ciName, Namespace: ciNamespace}, found)
require.NoError(t, err)
require.NotNil(t, found)

original := found.DeepCopy()
modified := found.DeepCopy()
modified.Labels = nil
modified.Annotations = nil
modified.Spec = v1beta1.IngressSpec{}

err = r.client.Update(context.TODO(), modified)
require.NoError(t, err)
err = r.checkMattermostIngress(ci, ci.Name, ci.Spec.IngressName, ci.Spec.IngressAnnotations, logger)
require.NoError(t, err)
err = r.client.Get(context.TODO(), types.NamespacedName{Name: ciName, Namespace: ciNamespace}, found)
require.NoError(t, err)
assert.Equal(t, original, found)
})

t.Run("deployment", func(t *testing.T) {
updateName := "mattermost-update-check"
now := metav1.Now()
job := &batchv1.Job{
ObjectMeta: metav1.ObjectMeta{
Name: updateName,
Namespace: ci.GetNamespace(),
},
Status: batchv1.JobStatus{
Succeeded: 1,
CompletionTime: &now,
},
}
err := r.client.Create(context.TODO(), job)
require.NoError(t, err)

err = r.checkMattermostDeployment(ci, ci.Name, ci.Spec.IngressName, ci.GetImageName(), logger)
assert.NoError(t, err)

found := &appsv1.Deployment{}
err = r.client.Get(context.TODO(), types.NamespacedName{Name: ciName, Namespace: ciNamespace}, found)
require.NoError(t, err)
require.NotNil(t, found)

original := found.DeepCopy()
modified := found.DeepCopy()
modified.Labels = nil
newReplicas := int32(0)
modified.Spec.Replicas = &newReplicas
modified.Spec.Template.Spec.Containers[0].Image = "not-mattermost:latest"

err = r.client.Update(context.TODO(), modified)
require.NoError(t, err)
err = r.checkMattermostDeployment(ci, ci.Name, ci.Spec.IngressName, ci.GetImageName(), logger)
require.NoError(t, err)
err = r.client.Get(context.TODO(), types.NamespacedName{Name: ciName, Namespace: ciNamespace}, found)
require.NoError(t, err)
assert.Equal(t, original.Labels, found.Labels)
assert.Equal(t, original.Spec.Replicas, found.Spec.Replicas)
assert.Equal(t, original.Spec.Template, found.Spec.Template)
})
}

0 comments on commit 50a46b7

Please sign in to comment.