test: Add test for runner with generic ephemeral volume as "work" (#1472)
This adds the test to verify the runner pod generation logic for the case that you use a generic ephemeral volume as "work". It is almost an adaptation of the test cases writetn for RunnerSet in #1471, to RunnerDeployment and Runner.
This commit is contained in:
parent
63be0223ad
commit
c7eea169ad
|
|
@ -13,7 +13,37 @@ import (
|
||||||
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
|
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func newWorkGenericEphemeralVolume(t *testing.T, storageReq string) corev1.Volume {
|
||||||
|
GBs, err := resource.ParseQuantity(storageReq)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return corev1.Volume{
|
||||||
|
Name: "work",
|
||||||
|
VolumeSource: corev1.VolumeSource{
|
||||||
|
Ephemeral: &corev1.EphemeralVolumeSource{
|
||||||
|
VolumeClaimTemplate: &corev1.PersistentVolumeClaimTemplate{
|
||||||
|
Spec: corev1.PersistentVolumeClaimSpec{
|
||||||
|
AccessModes: []corev1.PersistentVolumeAccessMode{
|
||||||
|
corev1.ReadWriteOnce,
|
||||||
|
},
|
||||||
|
StorageClassName: strPtr("runner-work-dir"),
|
||||||
|
Resources: corev1.ResourceRequirements{
|
||||||
|
Requests: corev1.ResourceList{
|
||||||
|
corev1.ResourceStorage: GBs,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestNewRunnerPod(t *testing.T) {
|
func TestNewRunnerPod(t *testing.T) {
|
||||||
|
workGenericEphemeralVolume := newWorkGenericEphemeralVolume(t, "10Gi")
|
||||||
|
|
||||||
type testcase struct {
|
type testcase struct {
|
||||||
description string
|
description string
|
||||||
|
|
||||||
|
|
@ -22,11 +52,6 @@ func TestNewRunnerPod(t *testing.T) {
|
||||||
want corev1.Pod
|
want corev1.Pod
|
||||||
}
|
}
|
||||||
|
|
||||||
tenGB, err := resource.ParseQuantity("10Gi")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("%v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
base := corev1.Pod{
|
base := corev1.Pod{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Labels: map[string]string{
|
Labels: map[string]string{
|
||||||
|
|
@ -325,27 +350,6 @@ func TestNewRunnerPod(t *testing.T) {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
workGenericEphemeralVolume := corev1.Volume{
|
|
||||||
Name: "work",
|
|
||||||
VolumeSource: corev1.VolumeSource{
|
|
||||||
Ephemeral: &corev1.EphemeralVolumeSource{
|
|
||||||
VolumeClaimTemplate: &corev1.PersistentVolumeClaimTemplate{
|
|
||||||
Spec: corev1.PersistentVolumeClaimSpec{
|
|
||||||
AccessModes: []corev1.PersistentVolumeAccessMode{
|
|
||||||
corev1.ReadWriteOnce,
|
|
||||||
},
|
|
||||||
StorageClassName: strPtr("runner-work-dir"),
|
|
||||||
Resources: corev1.ResourceRequirements{
|
|
||||||
Requests: corev1.ResourceList{
|
|
||||||
corev1.ResourceStorage: tenGB,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
newTestPod := func(base corev1.Pod, f func(*corev1.Pod)) corev1.Pod {
|
newTestPod := func(base corev1.Pod, f func(*corev1.Pod)) corev1.Pod {
|
||||||
pod := base.DeepCopy()
|
pod := base.DeepCopy()
|
||||||
if f != nil {
|
if f != nil {
|
||||||
|
|
@ -523,6 +527,8 @@ func strPtr(s string) *string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNewRunnerPodFromRunnerController(t *testing.T) {
|
func TestNewRunnerPodFromRunnerController(t *testing.T) {
|
||||||
|
workGenericEphemeralVolume := newWorkGenericEphemeralVolume(t, "10Gi")
|
||||||
|
|
||||||
type testcase struct {
|
type testcase struct {
|
||||||
description string
|
description string
|
||||||
|
|
||||||
|
|
@ -993,6 +999,96 @@ func TestNewRunnerPodFromRunnerController(t *testing.T) {
|
||||||
p.Spec.Containers[0].SecurityContext.Privileged = boolPtr(true)
|
p.Spec.Containers[0].SecurityContext.Privileged = boolPtr(true)
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
description: "Mount generic ephemeral volume onto work (with explicit volumeMount)",
|
||||||
|
runner: arcv1alpha1.Runner{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: "runner",
|
||||||
|
},
|
||||||
|
Spec: arcv1alpha1.RunnerSpec{
|
||||||
|
RunnerPodSpec: arcv1alpha1.RunnerPodSpec{
|
||||||
|
Containers: []corev1.Container{
|
||||||
|
{
|
||||||
|
Name: "runner",
|
||||||
|
VolumeMounts: []corev1.VolumeMount{
|
||||||
|
{
|
||||||
|
Name: "work",
|
||||||
|
MountPath: "/runner/_work",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Volumes: []corev1.Volume{
|
||||||
|
workGenericEphemeralVolume,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
want: newTestPod(base, func(p *corev1.Pod) {
|
||||||
|
p.Spec.Volumes = []corev1.Volume{
|
||||||
|
{
|
||||||
|
Name: "runner",
|
||||||
|
VolumeSource: corev1.VolumeSource{
|
||||||
|
EmptyDir: &corev1.EmptyDirVolumeSource{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "certs-client",
|
||||||
|
VolumeSource: corev1.VolumeSource{
|
||||||
|
EmptyDir: &corev1.EmptyDirVolumeSource{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
workGenericEphemeralVolume,
|
||||||
|
}
|
||||||
|
p.Spec.Containers[0].VolumeMounts = []corev1.VolumeMount{
|
||||||
|
{
|
||||||
|
Name: "work",
|
||||||
|
MountPath: "/runner/_work",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "runner",
|
||||||
|
MountPath: "/runner",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "certs-client",
|
||||||
|
MountPath: "/certs/client",
|
||||||
|
ReadOnly: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "Mount generic ephemeral volume onto work (without explicit volumeMount)",
|
||||||
|
runner: arcv1alpha1.Runner{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: "runner",
|
||||||
|
},
|
||||||
|
Spec: arcv1alpha1.RunnerSpec{
|
||||||
|
RunnerPodSpec: arcv1alpha1.RunnerPodSpec{
|
||||||
|
Volumes: []corev1.Volume{
|
||||||
|
workGenericEphemeralVolume,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
want: newTestPod(base, func(p *corev1.Pod) {
|
||||||
|
p.Spec.Volumes = []corev1.Volume{
|
||||||
|
{
|
||||||
|
Name: "runner",
|
||||||
|
VolumeSource: corev1.VolumeSource{
|
||||||
|
EmptyDir: &corev1.EmptyDirVolumeSource{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "certs-client",
|
||||||
|
VolumeSource: corev1.VolumeSource{
|
||||||
|
EmptyDir: &corev1.EmptyDirVolumeSource{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
workGenericEphemeralVolume,
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue