...

Source file src/edge-infra.dev/pkg/edge/webhooks/edge-injector/resourcerequest_test.go

Documentation: edge-infra.dev/pkg/edge/webhooks/edge-injector

     1  //nolint:typecheck
     2  package edgeinjector
     3  
     4  import (
     5  	"context"
     6  	"fmt"
     7  	"testing"
     8  
     9  	. "github.com/onsi/ginkgo/v2" //nolint:revive
    10  	. "github.com/onsi/gomega"    //nolint:revive
    11  	appsv1 "k8s.io/api/apps/v1"
    12  	corev1 "k8s.io/api/core/v1"
    13  	"k8s.io/apimachinery/pkg/api/resource"
    14  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    15  	"sigs.k8s.io/controller-runtime/pkg/client/fake"
    16  
    17  	"edge-infra.dev/pkg/sds/devices/class"
    18  	dsv1 "edge-infra.dev/pkg/sds/devices/k8s/apis/v1"
    19  )
    20  
    21  const (
    22  	xserver      = "xserver"
    23  	xserverImage = "workloads/xserver"
    24  	className    = "display"
    25  )
    26  
    27  var expectedGroups = []int64{997, 1015}
    28  
    29  var resourceName = class.FmtClassLabel(className)
    30  
    31  func TestDeviceAnnotationWebhook(t *testing.T) {
    32  	RegisterFailHandler(Fail)
    33  	RunSpecs(t, "Device annotation tests")
    34  }
    35  
    36  var _ = Describe("Device annotation webhook", func() {
    37  	It("Add display request annotations", func() {
    38  		ctx := context.Background()
    39  
    40  		deployment := generateDeployment()
    41  		deviceStatus := generateDeviceStatuses()
    42  
    43  		fakeClient := fake.NewClientBuilder().WithScheme(createScheme()).WithObjects(deviceStatus).Build()
    44  		daw := &ResourceRequestWebhook{Client: fakeClient}
    45  
    46  		expectedAnnotationPrefix := fmt.Sprintf("%s/%s", class.DeviceClassPrefix, xserver)
    47  		Expect(daw.Default(ctx, deployment)).To(BeNil())
    48  		Expect(deployment.Spec.Template.ObjectMeta.Annotations[expectedAnnotationPrefix]).To(BeEquivalentTo(fmt.Sprintf("%s,%s", className, "default")))
    49  		Expect(deployment.Spec.Template.Spec.SecurityContext.SupplementalGroups).To(BeEquivalentTo(expectedGroups))
    50  	})
    51  })
    52  
    53  func generateDeployment() *appsv1.Deployment {
    54  	return &appsv1.Deployment{
    55  		ObjectMeta: metav1.ObjectMeta{
    56  			Name:      xserver,
    57  			Namespace: xserver,
    58  		},
    59  		Spec: appsv1.DeploymentSpec{
    60  			Template: corev1.PodTemplateSpec{
    61  				Spec: corev1.PodSpec{
    62  					Containers: []corev1.Container{
    63  						{
    64  							Name:  xserver,
    65  							Image: xserverImage,
    66  							Resources: corev1.ResourceRequirements{
    67  								Limits: corev1.ResourceList{
    68  									corev1.ResourceName(resourceName): resource.MustParse("1"),
    69  								},
    70  								Requests: corev1.ResourceList{
    71  									corev1.ResourceName(resourceName): resource.MustParse("1"),
    72  								},
    73  							},
    74  						},
    75  					},
    76  				},
    77  			},
    78  		},
    79  	}
    80  }
    81  
    82  func generateDeviceStatuses() *dsv1.DeviceStatuses {
    83  	return &dsv1.DeviceStatuses{
    84  		TypeMeta: metav1.TypeMeta{
    85  			APIVersion: dsv1.GroupVersion.Version,
    86  			Kind:       "DeviceStatuses",
    87  		},
    88  		ObjectMeta: metav1.ObjectMeta{
    89  			Name: "node-1",
    90  		},
    91  		Spec: dsv1.DeviceStatusesSpec{
    92  			DeviceGroups: map[string][]int64{
    93  				resourceName: expectedGroups,
    94  			},
    95  			Devices: map[string][]dsv1.DeviceState{
    96  				resourceName: {
    97  					{
    98  						Name: "test-device",
    99  					},
   100  				},
   101  			},
   102  		},
   103  	}
   104  }
   105  

View as plain text