Documentation
¶
Overview ¶
Package testutils provides common test helpers for testing Single Step Instrumentation in Kubernetes.
Index ¶
- Constants
- type ContainerInjectionValidator
- type ContainerValidator
- func (v *ContainerValidator) RequireCommand(t *testing.T, expected string)
- func (v *ContainerValidator) RequireEnvs(t *testing.T, expected map[string]string)
- func (v *ContainerValidator) RequireInjection(t *testing.T)
- func (v *ContainerValidator) RequireMissingEnvs(t *testing.T, missing []string)
- func (v *ContainerValidator) RequireMissingVolumeMounts(t *testing.T, missing []corev1.VolumeMount)
- func (v *ContainerValidator) RequireNoInjection(t *testing.T)
- func (v *ContainerValidator) RequireNoVolumeMounts(t *testing.T)
- func (v *ContainerValidator) RequireResourceRequirements(t *testing.T, expected *corev1.ResourceRequirements)
- func (v *ContainerValidator) RequireSecurityContext(t *testing.T, expected *corev1.SecurityContext)
- func (v *ContainerValidator) RequireUnmutated(t *testing.T)
- func (v *ContainerValidator) RequireVolumeMounts(t *testing.T, expected []corev1.VolumeMount)
- type ImageValidator
- type InjectionMode
- type InjectionValidator
- type PodValidator
- func (v *PodValidator) RequireAnnotations(t *testing.T, expected map[string]string)
- func (v *PodValidator) RequireEnvs(t *testing.T, expected map[string]string, expectedContainers []string)
- func (v *PodValidator) RequireInitContainerImages(t *testing.T, expected []string)
- func (v *PodValidator) RequireInitResourceRequirements(t *testing.T, expected *corev1.ResourceRequirements)
- func (v *PodValidator) RequireInitSecurityContext(t *testing.T, expected *corev1.SecurityContext)
- func (v *PodValidator) RequireInjection(t *testing.T, expectedContainers []string)
- func (v *PodValidator) RequireInjectorVersion(t *testing.T, expected string)
- func (v *PodValidator) RequireLibraryVersions(t *testing.T, expected map[string]string)
- func (v *PodValidator) RequireMissingEnvs(t *testing.T, missing []string, expectedContainers []string)
- func (v *PodValidator) RequireMissingVolumeNames(t *testing.T, missing []string)
- func (v *PodValidator) RequireNoInjection(t *testing.T)
- func (v *PodValidator) RequireUnmutatedContainers(t *testing.T, containerNames []string)
- func (v *PodValidator) RequireVolumeNames(t *testing.T, expected []string)
Constants ¶
const K8sAutoscalerSafeToEvictVolumesAnnotation = "cluster-autoscaler.kubernetes.io/safe-to-evict-local-volumes"
K8sAutoscalerSafeToEvictVolumesAnnotation is the annotation used by the Kubernetes cluster-autoscaler to mark a volume as safe to evict.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ContainerInjectionValidator ¶ added in v0.77.0
type ContainerInjectionValidator interface {
RequireContainerInjection(t *testing.T, container *ContainerValidator)
RequireNoContainerInjection(t *testing.T, container *ContainerValidator)
}
ContainerInjectionValidator validates container-level injection.
type ContainerValidator ¶
type ContainerValidator struct {
// contains filtered or unexported fields
}
ContainerValidator provides a test friendly structure to run assertions on container states for SSI.
func NewContainerValidator ¶
func NewContainerValidator(container *corev1.Container, injection ContainerInjectionValidator) *ContainerValidator
NewContainerValidator initializes a container validator and converts the Kubernetes spec into a test friendly struct.
func (*ContainerValidator) RequireCommand ¶
func (v *ContainerValidator) RequireCommand(t *testing.T, expected string)
RequireCommand ensures the provided command line is the one present in the container. The validator converts the command with args list into a string for your convenience.
func (*ContainerValidator) RequireEnvs ¶
func (v *ContainerValidator) RequireEnvs(t *testing.T, expected map[string]string)
RequireEnvs ensures the map of key/value pairs both exist and are set to the expected value.
func (*ContainerValidator) RequireInjection ¶
func (v *ContainerValidator) RequireInjection(t *testing.T)
RequireInjection ensures a container was injected for SSI. It's a high level function that should be modified if the implementation or meaning of injection changes over time.
func (*ContainerValidator) RequireMissingEnvs ¶
func (v *ContainerValidator) RequireMissingEnvs(t *testing.T, missing []string)
RequireMissingEnvs ensures the list of keys are missing in the container.
func (*ContainerValidator) RequireMissingVolumeMounts ¶
func (v *ContainerValidator) RequireMissingVolumeMounts(t *testing.T, missing []corev1.VolumeMount)
RequireMissingVolumeMounts ensures the list of provided volume mounts do not exist in the container.
func (*ContainerValidator) RequireNoInjection ¶
func (v *ContainerValidator) RequireNoInjection(t *testing.T)
RequireNoInjection ensures a container was not injected for SSI.
func (*ContainerValidator) RequireNoVolumeMounts ¶
func (v *ContainerValidator) RequireNoVolumeMounts(t *testing.T)
RequireNoVolumeMounts ensures the container has no volume mounts.
func (*ContainerValidator) RequireResourceRequirements ¶
func (v *ContainerValidator) RequireResourceRequirements(t *testing.T, expected *corev1.ResourceRequirements)
RequireResourceRequirements ensures the resource requirements for the container match the expected.
func (*ContainerValidator) RequireSecurityContext ¶
func (v *ContainerValidator) RequireSecurityContext(t *testing.T, expected *corev1.SecurityContext)
RequireSecurityContext ensures the provided security context matches the security context on the container.
func (*ContainerValidator) RequireUnmutated ¶ added in v0.76.0
func (v *ContainerValidator) RequireUnmutated(t *testing.T)
RequireUnmutated ensures no Datadog-related environment variables exist in the container. This includes any env var starting with "DD_" or "LD_PRELOAD".
func (*ContainerValidator) RequireVolumeMounts ¶
func (v *ContainerValidator) RequireVolumeMounts(t *testing.T, expected []corev1.VolumeMount)
RequireVolumeMounts ensures the list of provided volume mounts exist in the container.
type ImageValidator ¶
type ImageValidator struct {
// contains filtered or unexported fields
}
ImageValidator provides a validation struct for container images.
func NewImageValidator ¶
func NewImageValidator(i string) *ImageValidator
NewImageValidator takes an image string provided from a container spec and initializes a new ImageValidator.
func (*ImageValidator) RequireName ¶
func (v *ImageValidator) RequireName(t *testing.T, expected string)
RequireName ensures the image has the expected image name.
func (*ImageValidator) RequireRegistry ¶
func (v *ImageValidator) RequireRegistry(t *testing.T, expected string)
RequireRegistry ensures the image has the expected registry.
func (*ImageValidator) RequireTag ¶
func (v *ImageValidator) RequireTag(t *testing.T, expected string)
RequireTag ensures the image has the expected tag/version.
type InjectionMode ¶ added in v0.77.0
type InjectionMode string
InjectionMode represents the method used to inject APM libraries into pods.
const ( // InjectionModeAuto uses init containers (the current default injection method). InjectionModeAuto InjectionMode = "auto" // InjectionModeInitContainer uses init containers to copy library files. InjectionModeInitContainer InjectionMode = "init_container" // InjectionModeCSI uses the Datadog CSI driver to mount library files. InjectionModeCSI InjectionMode = "csi" )
type InjectionValidator ¶ added in v0.77.0
type InjectionValidator interface {
ContainerInjectionValidator
// RequireInjection validates mode-specific pod-level injection (volumes, annotations, init containers).
RequireInjection(t *testing.T)
// RequireNoInjection validates that no mode-specific injection artifacts exist.
RequireNoInjection(t *testing.T)
// RequireLibraryVersions validates the injected library versions.
RequireLibraryVersions(t *testing.T, expected map[string]string)
// RequireInjectorVersion validates the injector version.
RequireInjectorVersion(t *testing.T, expected string)
}
InjectionValidator validates injection-specific aspects of a pod. It also implements ContainerInjectionValidator for container-level validation.
type PodValidator ¶
type PodValidator struct {
// contains filtered or unexported fields
}
PodValidator provides a test friendly structure to run assertions on pod states for SSI.
func NewPodValidator ¶
func NewPodValidator(pod *corev1.Pod, mode InjectionMode) *PodValidator
NewPodValidator initializes a new PodValidator from a Kubernetes pod spec. It creates container validators for every container and init container in the pod.
func (*PodValidator) RequireAnnotations ¶
func (v *PodValidator) RequireAnnotations(t *testing.T, expected map[string]string)
RequireAnnotations ensures the pod has the expected annotations keys and that the values match the expected value.
func (*PodValidator) RequireEnvs ¶
func (v *PodValidator) RequireEnvs(t *testing.T, expected map[string]string, expectedContainers []string)
RequireEnvs ensures the expected env vars exist in the expected containers with the expected values.
func (*PodValidator) RequireInitContainerImages ¶
func (v *PodValidator) RequireInitContainerImages(t *testing.T, expected []string)
RequireInitContainerImages ensures the list of init container image strings matches the expected list.
func (*PodValidator) RequireInitResourceRequirements ¶
func (v *PodValidator) RequireInitResourceRequirements(t *testing.T, expected *corev1.ResourceRequirements)
RequireInitResourceRequirements ensures all Datadog init containers in the pod have the expected resource requirements.
func (*PodValidator) RequireInitSecurityContext ¶
func (v *PodValidator) RequireInitSecurityContext(t *testing.T, expected *corev1.SecurityContext)
RequireInitSecurityContext ensures all Datadog init containers in the pod have the expected security context.
func (*PodValidator) RequireInjection ¶
func (v *PodValidator) RequireInjection(t *testing.T, expectedContainers []string)
RequireInjection is a high level function that ensures injection has occurred for the pod and expected containers. This can and should change when the definition of injection changes.
func (*PodValidator) RequireInjectorVersion ¶
func (v *PodValidator) RequireInjectorVersion(t *testing.T, expected string)
RequireInjectorVersion is a high level function to ensure the injector version found for the pod matches expected.
func (*PodValidator) RequireLibraryVersions ¶
func (v *PodValidator) RequireLibraryVersions(t *testing.T, expected map[string]string)
RequireLibraryVersions ensures the map of library name to version matches what is found in the pod. Ex. python -> v3.
func (*PodValidator) RequireMissingEnvs ¶
func (v *PodValidator) RequireMissingEnvs(t *testing.T, missing []string, expectedContainers []string)
RequireMissingEnvs ensures that the list of missing keys do not exist in any of the containers provided.
func (*PodValidator) RequireMissingVolumeNames ¶
func (v *PodValidator) RequireMissingVolumeNames(t *testing.T, missing []string)
RequireVolumeNames ensures the list of volume names exist in the pod.
func (*PodValidator) RequireNoInjection ¶
func (v *PodValidator) RequireNoInjection(t *testing.T)
RequireNoInjection is a high level function that ensures a pod was not injected for SSI.
func (*PodValidator) RequireUnmutatedContainers ¶ added in v0.76.0
func (v *PodValidator) RequireUnmutatedContainers(t *testing.T, containerNames []string)
RequireUnmutatedContainers ensures that the specified containers have no Datadog-related environment variables.
func (*PodValidator) RequireVolumeNames ¶
func (v *PodValidator) RequireVolumeNames(t *testing.T, expected []string)
RequireVolumeNames ensures the list of volume names exist in the pod.