128 lines
3.7 KiB
Go
128 lines
3.7 KiB
Go
package actionssummerwindnet
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/actions/actions-runner-controller/apis/actions.summerwind.net/v1alpha1"
|
|
corev1 "k8s.io/api/core/v1"
|
|
)
|
|
|
|
func Test_filterLabels(t *testing.T) {
|
|
type args struct {
|
|
labels map[string]string
|
|
filter string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want map[string]string
|
|
}{
|
|
{
|
|
name: "ok",
|
|
args: args{
|
|
labels: map[string]string{LabelKeyRunnerTemplateHash: "abc", LabelKeyPodTemplateHash: "def"},
|
|
filter: LabelKeyRunnerTemplateHash,
|
|
},
|
|
want: map[string]string{LabelKeyPodTemplateHash: "def"},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := filterLabels(tt.args.labels, tt.args.filter); !reflect.DeepEqual(got, tt.want) {
|
|
t.Errorf("filterLabels() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_workVolumeClaimTemplateVolumeV1VolumeTransformation(t *testing.T) {
|
|
storageClassName := "local-storage"
|
|
workVolumeClaimTemplate := v1alpha1.WorkVolumeClaimTemplate{
|
|
StorageClassName: storageClassName,
|
|
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce, corev1.ReadWriteMany},
|
|
Resources: corev1.VolumeResourceRequirements{},
|
|
}
|
|
want := corev1.Volume{
|
|
Name: "work",
|
|
VolumeSource: corev1.VolumeSource{
|
|
Ephemeral: &corev1.EphemeralVolumeSource{
|
|
VolumeClaimTemplate: &corev1.PersistentVolumeClaimTemplate{
|
|
Spec: corev1.PersistentVolumeClaimSpec{
|
|
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce, corev1.ReadWriteMany},
|
|
StorageClassName: &storageClassName,
|
|
Resources: corev1.VolumeResourceRequirements{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
got := workVolumeClaimTemplate.V1Volume()
|
|
|
|
if got.Name != want.Name {
|
|
t.Errorf("want name %q, got %q\n", want.Name, got.Name)
|
|
}
|
|
|
|
if got.Ephemeral == nil {
|
|
t.Fatal("work volume claim template should transform itself into Ephemeral volume source\n")
|
|
}
|
|
|
|
if got.Ephemeral.VolumeClaimTemplate == nil {
|
|
t.Fatal("work volume claim template should have ephemeral volume claim template set\n")
|
|
}
|
|
|
|
gotClassName := *got.Ephemeral.VolumeClaimTemplate.Spec.StorageClassName
|
|
wantClassName := *want.Ephemeral.VolumeClaimTemplate.Spec.StorageClassName
|
|
if gotClassName != wantClassName {
|
|
t.Errorf("expected storage class name %q, got %q\n", wantClassName, gotClassName)
|
|
}
|
|
|
|
gotAccessModes := got.Ephemeral.VolumeClaimTemplate.Spec.AccessModes
|
|
wantAccessModes := want.Ephemeral.VolumeClaimTemplate.Spec.AccessModes
|
|
if len(gotAccessModes) != len(wantAccessModes) {
|
|
t.Fatalf("access modes lengths missmatch: got %v, expected %v\n", gotAccessModes, wantAccessModes)
|
|
}
|
|
|
|
diff := make(map[corev1.PersistentVolumeAccessMode]int, len(wantAccessModes))
|
|
for _, am := range wantAccessModes {
|
|
diff[am]++
|
|
}
|
|
|
|
for _, am := range gotAccessModes {
|
|
_, ok := diff[am]
|
|
if !ok {
|
|
t.Errorf("got access mode %v that is not in the wanted access modes\n", am)
|
|
}
|
|
|
|
diff[am]--
|
|
if diff[am] == 0 {
|
|
delete(diff, am)
|
|
}
|
|
}
|
|
|
|
if len(diff) != 0 {
|
|
t.Fatalf("got access modes did not take every access mode into account\nactual: %v expected: %v\n", gotAccessModes, wantAccessModes)
|
|
}
|
|
}
|
|
|
|
func Test_workVolumeClaimTemplateV1VolumeMount(t *testing.T) {
|
|
workVolumeClaimTemplate := v1alpha1.WorkVolumeClaimTemplate{
|
|
StorageClassName: "local-storage",
|
|
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce, corev1.ReadWriteMany},
|
|
Resources: corev1.VolumeResourceRequirements{},
|
|
}
|
|
|
|
mountPath := "/test/_work"
|
|
want := corev1.VolumeMount{
|
|
MountPath: mountPath,
|
|
Name: "work",
|
|
}
|
|
|
|
got := workVolumeClaimTemplate.V1VolumeMount(mountPath)
|
|
|
|
if want != got {
|
|
t.Fatalf("expected volume mount %+v, actual %+v\n", want, got)
|
|
}
|
|
}
|