package eks

import (
	"testing"

	"github.com/stretchr/testify/assert"
	appv1 "k8s.io/api/apps/v1"
	corev1 "k8s.io/api/core/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func Test_buildDaemonSetWithSELinuxVolumes(t *testing.T) {
	ds := &appv1.DaemonSet{
		ObjectMeta: metav1.ObjectMeta{
			Name:      "ebs-csi-node",
			Namespace: "test",
		},
		Spec: appv1.DaemonSetSpec{
			Template: corev1.PodTemplateSpec{
				Spec: corev1.PodSpec{
					Containers: []corev1.Container{
						{
							Name: "ebs-plugin",
							VolumeMounts: []corev1.VolumeMount{
								{
									Name:      "plugin-dir",
									MountPath: "/csi",
								},
								{
									Name:      "kubelet-dir",
									MountPath: "/var/lib/kubelet",
								},
							},
						},
						{
							Name: "node-driver-registrar",
							VolumeMounts: []corev1.VolumeMount{
								{
									Name:      "plugin-dir",
									MountPath: "/csi",
								},
							},
						},
					},
					Volumes: []corev1.Volume{
						{
							Name: "kubelet-dir",
							VolumeSource: corev1.VolumeSource{
								HostPath: &corev1.HostPathVolumeSource{
									Path: "/var/lib/kubelet",
								},
							},
						},
						{
							Name: "plugin-dir",
							VolumeSource: corev1.VolumeSource{
								HostPath: &corev1.HostPathVolumeSource{
									Path: "/var/lib/kubelet/plugins/ebs.csi.aws.com/",
								},
							},
						},
					},
				},
			},
		},
	}
	got := buildDaemonSetWithSELinuxVolumes(ds)

	assert.Equal(t, selinuxDSName, got.Name)
	assert.Equal(t, ds.GetNamespace(), got.Namespace)
	assert.Equal(t, len(ds.Spec.Template.Spec.Volumes)+2, len(got.Spec.Template.Spec.Volumes))
	assert.Equal(t, len(ds.Spec.Template.Spec.Containers[0].VolumeMounts)+2, len(got.Spec.Template.Spec.Containers[0].VolumeMounts))
	for i := 1; i < len(got.Spec.Template.Spec.Containers); i++ {
		assert.Equal(t, len(ds.Spec.Template.Spec.Containers[i].VolumeMounts), len(got.Spec.Template.Spec.Containers[i].VolumeMounts))
	}
}
