129 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Go
		
	
	
	
package controllers
 | 
						|
 | 
						|
import (
 | 
						|
	"reflect"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/actions-runner-controller/actions-runner-controller/api/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.ResourceRequirements{},
 | 
						|
	}
 | 
						|
	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.ResourceRequirements{},
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	got := workVolumeClaimTemplate.V1Volume()
 | 
						|
 | 
						|
	if got.Name != want.Name {
 | 
						|
		t.Errorf("want name %q, got %q\n", want.Name, got.Name)
 | 
						|
	}
 | 
						|
 | 
						|
	if got.VolumeSource.Ephemeral == nil {
 | 
						|
		t.Fatal("work volume claim template should transform itself into Ephemeral volume source\n")
 | 
						|
	}
 | 
						|
 | 
						|
	if got.VolumeSource.Ephemeral.VolumeClaimTemplate == nil {
 | 
						|
		t.Fatal("work volume claim template should have ephemeral volume claim template set\n")
 | 
						|
	}
 | 
						|
 | 
						|
	gotClassName := *got.VolumeSource.Ephemeral.VolumeClaimTemplate.Spec.StorageClassName
 | 
						|
	wantClassName := *want.VolumeSource.Ephemeral.VolumeClaimTemplate.Spec.StorageClassName
 | 
						|
	if gotClassName != wantClassName {
 | 
						|
		t.Errorf("expected storage class name %q, got %q\n", wantClassName, gotClassName)
 | 
						|
	}
 | 
						|
 | 
						|
	gotAccessModes := got.VolumeSource.Ephemeral.VolumeClaimTemplate.Spec.AccessModes
 | 
						|
	wantAccessModes := want.VolumeSource.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.ResourceRequirements{},
 | 
						|
	}
 | 
						|
 | 
						|
	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)
 | 
						|
	}
 | 
						|
}
 |