Skip to content

Commit

Permalink
adding more UTs
Browse files Browse the repository at this point in the history
  • Loading branch information
svijaykumar-px committed Jun 13, 2024
1 parent 84cf0ce commit 33e0fc9
Show file tree
Hide file tree
Showing 2 changed files with 307 additions and 7 deletions.
7 changes: 4 additions & 3 deletions drivers/storage/portworx/component/csi.go
Original file line number Diff line number Diff line change
Expand Up @@ -498,10 +498,11 @@ func (c *csi) createDeployment(
cluster,
cluster.Status.DesiredImages.CSISnapshotController,
)
if snapshotControllerImage == "" {
return fmt.Errorf("csi snapshot controller image not found")
}
}
} else if cluster.Spec.CSI.InstallSnapshotController != nil &&
*cluster.Spec.CSI.InstallSnapshotController &&
cluster.Status.DesiredImages.CSISnapshotController == "" {
return fmt.Errorf("csi snapshot controller image not found")
}

if csiConfig.IncludeHealthMonitorController {
Expand Down
307 changes: 303 additions & 4 deletions drivers/storage/portworx/components_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3965,7 +3965,8 @@ func TestAutopilotWithDesiredImage(t *testing.T) {
reregisterComponents()
k8sClient := testutil.FakeK8sClient()
driver := portworx{}
err := driver.Init(k8sClient, runtime.NewScheme(), record.NewFakeRecorder(0))
recorder := record.NewFakeRecorder(10)
err := driver.Init(k8sClient, runtime.NewScheme(), recorder)
require.NoError(t, err)

cluster := &corev1.StorageCluster{
Expand All @@ -3979,12 +3980,23 @@ func TestAutopilotWithDesiredImage(t *testing.T) {
},
},
Status: corev1.StorageClusterStatus{
DesiredImages: &corev1.ComponentImages{
Autopilot: "portworx/autopilot:status",
},
DesiredImages: &corev1.ComponentImages{},
},
}

// If desired images is empty, give failed component warning
err = driver.PreInstall(cluster)
require.NoError(t, err)

require.Contains(t, <-recorder.Events,
fmt.Sprintf("%v %v %v",
v1.EventTypeWarning, util.FailedComponentReason, "Failed to setup Autopilot. autopilot image cannot be empty"))

// If desired image is present, then use it
cluster.Status.DesiredImages = &corev1.ComponentImages{
Autopilot: "portworx/autopilot:status",
}

err = driver.PreInstall(cluster)
require.NoError(t, err)

Expand Down Expand Up @@ -6379,6 +6391,138 @@ func TestCSIInstallDisable(t *testing.T) {
require.Error(t, err)
}

func TestCSIInstallWithEmptyImages(t *testing.T) {
versionClient := fakek8sclient.NewSimpleClientset()
coreops.SetInstance(coreops.New(versionClient))
versionClient.Discovery().(*fakediscovery.FakeDiscovery).FakedServerVersion = &version.Info{
GitVersion: "v1.24.4",
}
reregisterComponents()
k8sClient := testutil.FakeK8sClient()
driver := portworx{}
recorder := record.NewFakeRecorder(10)
err := driver.Init(k8sClient, runtime.NewScheme(), recorder)
require.NoError(t, err)

installsnapshotctr := true
cluster := &corev1.StorageCluster{
ObjectMeta: metav1.ObjectMeta{
Name: "px-cluster",
Namespace: "kube-test",
Annotations: map[string]string{
pxutil.AnnotationPVCController: "false",
},
},
Spec: corev1.StorageClusterSpec{
Image: "portworx/image:2.4.2",
Placement: &corev1.PlacementSpec{
NodeAffinity: &v1.NodeAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: &v1.NodeSelector{
NodeSelectorTerms: []v1.NodeSelectorTerm{
{
MatchExpressions: []v1.NodeSelectorRequirement{
{
Key: "px/enabled",
Operator: v1.NodeSelectorOpNotIn,
Values: []string{"false"},
},
{
Key: "kubernetes.io/os",
Operator: v1.NodeSelectorOpIn,
Values: []string{"linux"},
},
{
Key: "node-role.kubernetes.io/master",
Operator: v1.NodeSelectorOpDoesNotExist,
},
},
},
},
},
},
},
Monitoring: &corev1.MonitoringSpec{Telemetry: &corev1.TelemetrySpec{}},
CSI: &corev1.CSISpec{
Enabled: true,
InstallSnapshotController: &installsnapshotctr,
},
},
Status: corev1.StorageClusterStatus{
ClusterUID: "test-clusteruid",
},
}
err = driver.SetDefaultsOnStorageCluster(cluster)
cluster.Status.DesiredImages = &corev1.ComponentImages{}

require.NoError(t, err)
err = driver.PreInstall(cluster)
require.NoError(t, err)

require.Contains(t, <-recorder.Events,
fmt.Sprintf("%v %v %v",
v1.EventTypeWarning, util.FailedComponentReason, "Failed to setup CSI. csi provisioner image not found"))

cluster.Status.DesiredImages = &corev1.ComponentImages{
CSIProvisioner: "quay.io/k8scsi/csi-provisioner:v1.2.3",
}

err = driver.PreInstall(cluster)
require.NoError(t, err)

require.Contains(t, <-recorder.Events,
fmt.Sprintf("%v %v %v",
v1.EventTypeWarning, util.FailedComponentReason, "Failed to setup CSI. csi snapshotter image not found"))

cluster.Status.DesiredImages = &corev1.ComponentImages{
CSIProvisioner: "quay.io/k8scsi/csi-provisioner:v1.2.3",
CSISnapshotter: "quay.io/k8scsi/csi-snapshotter:v1.2.3",
}

err = driver.PreInstall(cluster)
require.NoError(t, err)

require.Contains(t, <-recorder.Events,
fmt.Sprintf("%v %v %v",
v1.EventTypeWarning, util.FailedComponentReason, "Failed to setup CSI. csi resizer image not found"))

cluster.Status.DesiredImages = &corev1.ComponentImages{
CSIProvisioner: "quay.io/k8scsi/csi-provisioner:v1.2.3",
CSIAttacher: "quay.io/k8scsi/csi-attacher:v1.2.3",
CSISnapshotter: "quay.io/k8scsi/csi-snapshotter:v1.2.3",
CSIResizer: "quay.io/k8scsi/csi-resizer:v1.2.3",
}

err = driver.PreInstall(cluster)
require.NoError(t, err)

require.Contains(t, <-recorder.Events,
fmt.Sprintf("%v %v %v",
v1.EventTypeWarning, util.FailedComponentReason, "Failed to setup CSI. csi snapshot controller image not found"))

deploymentList := &appsv1.DeploymentList{}
err = testutil.List(k8sClient, deploymentList)
require.NoError(t, err)
require.Len(t, deploymentList.Items, 0)

cluster.Status.DesiredImages = &corev1.ComponentImages{
CSIProvisioner: "quay.io/k8scsi/csi-provisioner:v1.2.3",
CSIAttacher: "quay.io/k8scsi/csi-attacher:v1.2.3",
CSISnapshotter: "quay.io/k8scsi/csi-snapshotter:v1.2.3",
CSIResizer: "quay.io/k8scsi/csi-resizer:v1.2.3",
CSISnapshotController: "quay.io/k8scsi/snapshot-controller:v1.2.3",
}

err = driver.PreInstall(cluster)
require.NoError(t, err)

// CSI snapshot controller deployment is created
deploymentList = &appsv1.DeploymentList{}
err = testutil.List(k8sClient, deploymentList)
require.NoError(t, err)
require.Len(t, deploymentList.Items, 1)

}

func TestCSIInstall(t *testing.T) {
versionClient := fakek8sclient.NewSimpleClientset()
coreops.SetInstance(coreops.New(versionClient))
Expand Down Expand Up @@ -8225,6 +8369,73 @@ func TestPrometheusInstall(t *testing.T) {
require.Equal(t, prometheus.Spec.Volumes, cluster.Spec.Monitoring.Prometheus.Volumes)
}

func TestPrometheusInstallWithEmtpyImages(t *testing.T) {
coreops.SetInstance(coreops.New(fakek8sclient.NewSimpleClientset()))
reregisterComponents()
k8sClient := testutil.FakeK8sClient()
driver := portworx{}
recorder := record.NewFakeRecorder(10)
err := driver.Init(k8sClient, runtime.NewScheme(), recorder)
require.NoError(t, err)

cluster := &corev1.StorageCluster{
ObjectMeta: metav1.ObjectMeta{
Name: "px-cluster",
Namespace: "kube-test",
Annotations: map[string]string{
pxutil.AnnotationPVCController: "true",
},
},
Spec: corev1.StorageClusterSpec{
Monitoring: &corev1.MonitoringSpec{
Prometheus: &corev1.PrometheusSpec{
Enabled: true,
},
Telemetry: &corev1.TelemetrySpec{},
},
},
}

// Testcase: When Prometheus operator image is not got from the versions configmap
cluster.Status.DesiredImages = &corev1.ComponentImages{}

err = driver.PreInstall(cluster)
require.NoError(t, err)

require.Contains(t, <-recorder.Events,
fmt.Sprintf("%v %v %v",
v1.EventTypeWarning, util.FailedComponentReason, "Failed to setup Prometheus. prometheus operator image not found"))

// Case 2: When prometheus operator image is found but prometheus config reloader image is not found
cluster.Status.DesiredImages = &corev1.ComponentImages{
PrometheusOperator: "quay.io/coreos/prometheus-operator:v1.2.3",
}

err = driver.PreInstall(cluster)
require.NoError(t, err)

require.Contains(t, <-recorder.Events,
fmt.Sprintf("%v %v %v",
v1.EventTypeWarning, util.FailedComponentReason, "Failed to setup Prometheus. prometheus config reloader image not found"))
deployment := &appsv1.Deployment{}
err = testutil.Get(k8sClient, deployment, component.PrometheusOperatorDeploymentName, cluster.Namespace)
require.True(t, errors.IsNotFound(err))
require.Empty(t, deployment.Name)

// Case 3: When prometheus operator and config reloader verions are given but prometheus image is not found

cluster.Status.DesiredImages = &corev1.ComponentImages{
PrometheusOperator: "quay.io/coreos/prometheus-operator:v1.2.3",
PrometheusConfigReloader: "quay.io/coreos/prometheus-config-reloader:v1.2.3",
}
err = driver.PreInstall(cluster)
require.NoError(t, err)
require.Contains(t, <-recorder.Events,
fmt.Sprintf("%v %v %v",
v1.EventTypeWarning, util.FailedComponentReason, "Failed to setup Prometheus. prometheus image not found"))

}

func TestGrafanaInstall(t *testing.T) {
coreops.SetInstance(coreops.New(fakek8sclient.NewSimpleClientset()))
reregisterComponents()
Expand Down Expand Up @@ -14748,6 +14959,94 @@ func TestTelemetryContainerOrchestratorEnable(t *testing.T) {
require.Contains(t, configMap.Data["config_properties_px.yaml"], "serverAddress: \"127.0.0.1:17022\"")
}

func TestTelemetryWithEmptyImagest(t *testing.T) {
coreops.SetInstance(coreops.New(fakek8sclient.NewSimpleClientset()))
reregisterComponents()
k8sClient := testutil.FakeK8sClient()
driver := portworx{}
recorder := record.NewFakeRecorder(10)
err := driver.Init(k8sClient, runtime.NewScheme(), recorder)
require.NoError(t, err)

cluster := &corev1.StorageCluster{
ObjectMeta: metav1.ObjectMeta{
Name: "px-cluster",
Namespace: "kube-test",
},
Spec: corev1.StorageClusterSpec{
Image: "portworx/oci-monitor:3.0.0",
Monitoring: &corev1.MonitoringSpec{
Telemetry: &corev1.TelemetrySpec{
Enabled: true,
},
},
CSI: &corev1.CSISpec{
Enabled: false,
},
},
Status: corev1.StorageClusterStatus{
ClusterUID: "test-clusteruid",
},
}
createTelemetrySecret(t, k8sClient, cluster.Namespace)
err = driver.SetDefaultsOnStorageCluster(cluster)
require.NoError(t, err)
cluster.Status.DesiredImages = &corev1.ComponentImages{}
err = driver.PreInstall(cluster)
require.NoError(t, err)

require.Contains(t, <-recorder.Events,
fmt.Sprintf("%v %v %v",
v1.EventTypeWarning, util.FailedComponentReason, "Failed to setup Portworx Telemetry. telemetry image is empty"))

cluster.Status.DesiredImages = &corev1.ComponentImages{
Telemetry: "purestorage/ccm-go:1.2.2",
}
err = driver.PreInstall(cluster)
require.NoError(t, err)
require.Contains(t, <-recorder.Events,
fmt.Sprintf("%v %v %v",
v1.EventTypeWarning, util.FailedComponentReason, "Failed to setup Portworx Telemetry. telemetry proxy image is empty"))

cluster.Status.DesiredImages = &corev1.ComponentImages{
Telemetry: "purestorage/ccm-go:1.2.2",
TelemetryProxy: "purestorage/telemetry-envoy:1.1.15",
}
err = driver.PreInstall(cluster)
require.NoError(t, err)

require.Contains(t, <-recorder.Events,
fmt.Sprintf("%v %v %v",
v1.EventTypeWarning, util.FailedComponentReason, "Failed to setup Portworx Telemetry. log uploader image is empty"))

cluster.Status.DesiredImages = &corev1.ComponentImages{
Telemetry: "purestorage/ccm-go:1.2.2",
TelemetryProxy: "purestorage/telemetry-envoy:1.1.15",
LogUploader: "purestorage/log-uploader:1.1.8",
}
err = driver.PreInstall(cluster)
require.NoError(t, err)

require.Contains(t, <-recorder.Events,
fmt.Sprintf("%v %v %v",
v1.EventTypeWarning, util.FailedComponentReason, "Failed to setup Portworx Telemetry. metrics collector image is empty"))

cluster.Status.DesiredImages = &corev1.ComponentImages{
Telemetry: "purestorage/ccm-go:1.2.2",
TelemetryProxy: "purestorage/telemetry-envoy:1.1.15",
LogUploader: "purestorage/log-uploader:1.1.8",
MetricsCollector: "purestorage/realtime-metrics:1.0.23",
}
err = driver.PreInstall(cluster)
require.NoError(t, err)

// Will contain 3 deployments - portworx-pvc-controller , px-telemetry-metrics-collector and px-telemetry-registration
deploymentList := &appsv1.DeploymentList{}
err = testutil.List(k8sClient, deploymentList)
require.NoError(t, err)
require.Len(t, deploymentList.Items, 3)
}

func TestValidateTelemetryEnabled(t *testing.T) {
coreops.SetInstance(coreops.New(fakek8sclient.NewSimpleClientset()))
reregisterComponents()
Expand Down

0 comments on commit 33e0fc9

Please sign in to comment.