2022-12-08 13:05:19 -03:00

103 lines
2.6 KiB
Go

// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
/// Licensed under the GNU Affero General Public License (AGPL).
// See License.AGPL.txt in the project root for license information.
package usage
import (
"testing"
"github.com/stretchr/testify/require"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
)
func TestDeployment_ContainsDBEnvVars(t *testing.T) {
ctx := renderContextWithUsageEnabled(t)
objs, err := deployment(ctx)
require.NoError(t, err)
dpl, ok := objs[0].(*appsv1.Deployment)
require.True(t, ok)
containers := dpl.Spec.Template.Spec.Containers
require.Len(t, containers, 2)
usageContainer := containers[0]
secretRef := corev1.LocalObjectReference{Name: ctx.Config.Database.CloudSQL.ServiceAccount.Name}
require.Contains(t, usageContainer.Env, corev1.EnvVar{
Name: "DB_HOST",
Value: "cloudsqlproxy",
})
require.Contains(t, usageContainer.Env, corev1.EnvVar{
Name: "DB_PORT",
Value: "3306",
})
require.Contains(t, usageContainer.Env, corev1.EnvVar{
Name: "DB_PASSWORD",
ValueFrom: &corev1.EnvVarSource{SecretKeyRef: &corev1.SecretKeySelector{
LocalObjectReference: secretRef,
Key: "password",
}},
})
require.Contains(t, usageContainer.Env, corev1.EnvVar{
Name: "DB_USERNAME",
ValueFrom: &corev1.EnvVarSource{SecretKeyRef: &corev1.SecretKeySelector{
LocalObjectReference: secretRef,
Key: "username",
}},
})
}
func TestDeployment_EnablesPaymentWhenAStripeSecretIsPresent(t *testing.T) {
ctx := renderContextWithStripeSecretSet(t)
objs, err := deployment(ctx)
require.NoError(t, err)
dpl, ok := objs[0].(*appsv1.Deployment)
require.True(t, ok)
spec := dpl.Spec
require.Contains(t, spec.Template.Spec.Volumes, corev1.Volume{
Name: "stripe-secret",
VolumeSource: corev1.VolumeSource{
Secret: &corev1.SecretVolumeSource{
SecretName: "some-stripe-secret",
},
},
})
containers := dpl.Spec.Template.Spec.Containers
require.Len(t, containers, 2)
usageContainer := containers[0]
require.Contains(t, usageContainer.VolumeMounts, corev1.VolumeMount{
Name: "stripe-secret",
MountPath: stripeSecretMountPath,
ReadOnly: true,
})
}
func TestDeployment_DisablesPaymentWhenAStripeSecretIsNotPresent(t *testing.T) {
ctx := renderContextWithUsageEnabled(t)
objs, err := deployment(ctx)
require.NoError(t, err)
dpl, ok := objs[0].(*appsv1.Deployment)
require.True(t, ok)
containers := dpl.Spec.Template.Spec.Containers
require.Len(t, containers, 2)
usageContainer := containers[0]
for _, arg := range usageContainer.Args {
require.NotContains(t, arg, "--stripe-secret-path")
}
}