diff --git a/exporter/test/e2e/helper.go b/exporter/test/e2e/helper.go index a68c97c7..d9f5d430 100644 --- a/exporter/test/e2e/helper.go +++ b/exporter/test/e2e/helper.go @@ -41,16 +41,46 @@ func newAppDeployment(namespace string, name string, replicas int32, containerNa } } +func newSidecarContainerDeployment(namespace string, name string, replicas int32, containerName string, image string, initContainerName string, initImage string, initCommand []string) *appsv1.Deployment { + labels := map[string]string{"app": name} + restartPolicy := corev1.ContainerRestartPolicyAlways + emptyDir := corev1.EmptyDirVolumeSource{} + volumeSource := corev1.VolumeSource{EmptyDir: &emptyDir} + return &appsv1.Deployment{ + ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: namespace}, + Spec: appsv1.DeploymentSpec{ + Replicas: &replicas, + Selector: &metav1.LabelSelector{ + MatchLabels: labels, + }, + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{Labels: labels}, + Spec: corev1.PodSpec{Containers: []corev1.Container{{Name: containerName, Image: image, VolumeMounts: []corev1.VolumeMount{{Name: "data", MountPath: "/opt"}}}}, + InitContainers: []corev1.Container{{Name: initContainerName, Image: initImage, RestartPolicy: &restartPolicy, Command: initCommand, VolumeMounts: []corev1.VolumeMount{{Name: "data", MountPath: "/opt"}}}}, + Volumes: []corev1.Volume{{Name: "data", VolumeSource: volumeSource}}, + }, + }, + }, + } +} + func getContainerIDAndWorkerNode(ctx context.Context, c *envconf.Config, g *Ω.WithT, namespace string, selector string, containerName string) (namespacedContainerId, string) { pod := getPod(ctx, c, g, namespace, selector) g.Expect(len(pod.Status.ContainerStatuses)).Should(Ω.Equal(1)) container := pod.Status.ContainerStatuses[0] - g.Expect(container.Name).Should(Ω.Equal(containerName)) - + containerId := container.ContainerID + if container.Name == containerName { + containerId = container.ContainerID + } else { + g.Expect(len(pod.Status.InitContainerStatuses)).Should(Ω.Equal(1)) + initContainer := pod.Status.InitContainerStatuses[0] + g.Expect(initContainer.Name).Should(Ω.Equal(containerName)) + containerId = initContainer.ContainerID + } return namespacedContainerId{ namespace: namespace, podName: pod.ObjectMeta.Name, - containerId: container.ContainerID, + containerId: containerId, }, pod.Spec.NodeName } diff --git a/exporter/test/e2e/sidecar_test.go b/exporter/test/e2e/sidecar_test.go new file mode 100644 index 00000000..1d5b4590 --- /dev/null +++ b/exporter/test/e2e/sidecar_test.go @@ -0,0 +1,47 @@ +package e2e + +import ( + "exporter/pkg/types" + "testing" + + Ω "github.com/onsi/gomega" + "sigs.k8s.io/e2e-framework/pkg/features" +) + +func TestSidecarContainer(t *testing.T) { + + appName := "sidecar-container" + containerName := "main" + image := "quay.io/insights-runtime-extractor-samples/rhbq-app:3.15.3" + initContainerName := "logshipper" + initImage := "quay.io/insights-runtime-extractor-samples/centos:7" + initCommand := []string{"sh", "-c", "tail -F /opt/logs.txt"} + + deployment := newSidecarContainerDeployment(namespace, appName, 1, containerName, image, initContainerName, initImage, initCommand) + + featureMain := features.New("Sidecar container deployment. Main image: "+image+" Init image: "+initImage). + Setup(deployTestResource(deployment, appName)). + Teardown(undeployTestResource(deployment, appName)). + Assess("runtime info extracted from main container", checkExtractedRuntimeInfo(namespace, "app="+appName, containerName, func(g *Ω.WithT, runtimeInfo types.ContainerRuntimeInfo) { + expected := types.ContainerRuntimeInfo{ + Os: "rhel", + OsVersion: "8.10", + Kind: "Java", + KindVersion: "17.0.13", + KindImplementer: "Red Hat, Inc.", + Runtimes: []types.RuntimeComponent{{ + Name: "Quarkus", + Version: "3.15.3.redhat-00002", + }}, + } + g.Expect(runtimeInfo).Should(Ω.Equal(expected)) + })). + Assess("runtime info extracted from init container", checkExtractedRuntimeInfo(namespace, "app="+appName, initContainerName, func(g *Ω.WithT, runtimeInfo types.ContainerRuntimeInfo) { + expected := types.ContainerRuntimeInfo{ + Os: "centos", + OsVersion: "7", + } + g.Expect(runtimeInfo).Should(Ω.Equal(expected)) + })) + _ = testenv.Test(t, featureMain.Feature()) +}