- reduce complexity - use better tools to format the code - add more tests - and too many things to list here We are rewriting for V3, so these commits are sometimes big and not fully detailed. Of course, further work will be more documented.
116 lines
3.3 KiB
Go
116 lines
3.3 KiB
Go
package generator
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
v1 "k8s.io/api/apps/v1"
|
|
batchv1 "k8s.io/api/batch/v1"
|
|
corev1 "k8s.io/api/core/v1"
|
|
"sigs.k8s.io/yaml"
|
|
)
|
|
|
|
func TestBasicCronJob(t *testing.T) {
|
|
composeFile := `
|
|
services:
|
|
cron:
|
|
image: fedora
|
|
labels:
|
|
katenary.v3/cronjob: |
|
|
image: alpine
|
|
command: echo hello
|
|
schedule: "*/1 * * * *"
|
|
rbac: false
|
|
`
|
|
tmpDir := setup(composeFile)
|
|
defer teardown(tmpDir)
|
|
|
|
currentDir, _ := os.Getwd()
|
|
os.Chdir(tmpDir)
|
|
defer os.Chdir(currentDir)
|
|
|
|
output := _compile_test(t, "-s", "templates/cron/cronjob.yaml")
|
|
cronJob := batchv1.CronJob{}
|
|
if err := yaml.Unmarshal([]byte(output), &cronJob); err != nil {
|
|
t.Errorf(unmarshalError, err)
|
|
}
|
|
if cronJob.Spec.JobTemplate.Spec.Template.Spec.Containers[0].Image != "alpine:latest" {
|
|
t.Errorf("Expected image to be alpine, got %s", cronJob.Spec.JobTemplate.Spec.Template.Spec.Containers[0].Image)
|
|
}
|
|
combinedCommand := strings.Join(cronJob.Spec.JobTemplate.Spec.Template.Spec.Containers[0].Command, " ")
|
|
if combinedCommand != "sh -c echo hello" {
|
|
t.Errorf("Expected command to be sh -c echo hello, got %s", combinedCommand)
|
|
}
|
|
if cronJob.Spec.Schedule != "*/1 * * * *" {
|
|
t.Errorf("Expected schedule to be */1 * * * *, got %s", cronJob.Spec.Schedule)
|
|
}
|
|
|
|
// ensure that there are a deployment for the fedora Container
|
|
var err error
|
|
output, err = helmTemplate(ConvertOptions{
|
|
OutputDir: "./chart",
|
|
}, "-s", "templates/cron/deployment.yaml")
|
|
if err != nil {
|
|
t.Errorf("Error: %s", err)
|
|
}
|
|
deployment := v1.Deployment{}
|
|
if err := yaml.Unmarshal([]byte(output), &deployment); err != nil {
|
|
t.Errorf(unmarshalError, err)
|
|
}
|
|
if deployment.Spec.Template.Spec.Containers[0].Image != "fedora:latest" {
|
|
t.Errorf("Expected image to be fedora, got %s", deployment.Spec.Template.Spec.Containers[0].Image)
|
|
}
|
|
}
|
|
|
|
func TestCronJobbWithRBAC(t *testing.T) {
|
|
composeFile := `
|
|
services:
|
|
cron:
|
|
image: fedora
|
|
labels:
|
|
katenary.v3/cronjob: |
|
|
image: alpine
|
|
command: echo hello
|
|
schedule: "*/1 * * * *"
|
|
rbac: true
|
|
`
|
|
|
|
tmpDir := setup(composeFile)
|
|
defer teardown(tmpDir)
|
|
|
|
currentDir, _ := os.Getwd()
|
|
os.Chdir(tmpDir)
|
|
defer os.Chdir(currentDir)
|
|
|
|
output := _compile_test(t, "-s", "templates/cron/cronjob.yaml")
|
|
cronJob := batchv1.CronJob{}
|
|
if err := yaml.Unmarshal([]byte(output), &cronJob); err != nil {
|
|
t.Errorf(unmarshalError, err)
|
|
}
|
|
if cronJob.Spec.JobTemplate.Spec.Template.Spec.ServiceAccountName == "" {
|
|
t.Errorf("Expected ServiceAccountName to be set")
|
|
}
|
|
|
|
// find the service account file
|
|
output, err := helmTemplate(ConvertOptions{
|
|
OutputDir: "./chart",
|
|
}, "-s", "templates/cron/serviceaccount.yaml")
|
|
if err != nil {
|
|
t.Errorf("Error: %s", err)
|
|
}
|
|
serviceAccount := corev1.ServiceAccount{}
|
|
|
|
if err := yaml.Unmarshal([]byte(output), &serviceAccount); err != nil {
|
|
t.Errorf(unmarshalError, err)
|
|
}
|
|
if serviceAccount.Name == "" {
|
|
t.Errorf("Expected ServiceAccountName to be set")
|
|
}
|
|
|
|
// ensure that the serviceAccount is equal to the cronJob
|
|
if serviceAccount.Name != cronJob.Spec.JobTemplate.Spec.Template.Spec.ServiceAccountName {
|
|
t.Errorf("Expected ServiceAccountName to be %s, got %s", cronJob.Spec.JobTemplate.Spec.Template.Spec.ServiceAccountName, serviceAccount.Name)
|
|
}
|
|
}
|