minio_test.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package minio_test
  2. import (
  3. "context"
  4. "fmt"
  5. "time"
  6. utils "github.com/bitnami/charts/.vib/common-tests/ginkgo-utils"
  7. . "github.com/onsi/ginkgo/v2"
  8. . "github.com/onsi/gomega"
  9. appsv1 "k8s.io/api/apps/v1"
  10. batchv1 "k8s.io/api/batch/v1"
  11. metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  12. "k8s.io/client-go/kubernetes"
  13. )
  14. const (
  15. PollingInterval = 1 * time.Second
  16. )
  17. var _ = Describe("Minio", Ordered, func() {
  18. var c *kubernetes.Clientset
  19. var ctx context.Context
  20. var cancel context.CancelFunc
  21. BeforeEach(func() {
  22. ctx, cancel = context.WithCancel(context.Background())
  23. conf := utils.MustBuildClusterConfig(kubeconfig)
  24. c = kubernetes.NewForConfigOrDie(conf)
  25. })
  26. When("a bucket is created and Minio is scaled down to 0 replicas and back up", func() {
  27. It("should have accedpl to the created bucket", func() {
  28. getAvailableReplicas := func(dpl *appsv1.Deployment) int32 { return dpl.Status.AvailableReplicas }
  29. getSucceededJobs := func(j *batchv1.Job) int32 { return j.Status.Succeeded }
  30. getOpts := metav1.GetOptions{}
  31. By("checking all the replicas are available")
  32. dpl, err := c.AppsV1().Deployments(namespace).Get(ctx, deployName, getOpts)
  33. Expect(err).NotTo(HaveOccurred())
  34. Expect(dpl.Status.Replicas).NotTo(BeZero())
  35. origReplicas := *dpl.Spec.Replicas
  36. Eventually(func() (*appsv1.Deployment, error) {
  37. return c.AppsV1().Deployments(namespace).Get(ctx, deployName, getOpts)
  38. }, timeout, PollingInterval).Should(WithTransform(getAvailableReplicas, Equal(origReplicas)))
  39. svc, err := c.CoreV1().Services(namespace).Get(ctx, deployName, getOpts)
  40. Expect(err).NotTo(HaveOccurred())
  41. port, err := utils.SvcGetPortByName(svc, "tcp-api")
  42. Expect(err).NotTo(HaveOccurred())
  43. image, err := utils.DplGetContainerImage(dpl, "minio")
  44. Expect(err).NotTo(HaveOccurred())
  45. jobSuffix := time.Now().Format("20060102150405")
  46. By("creating a job to create a new test bucket")
  47. createDBJobName := fmt.Sprintf("%s-mb-%s",
  48. deployName, jobSuffix)
  49. bucketName := fmt.Sprintf("test%s", jobSuffix)
  50. err = createJob(ctx, c, createDBJobName, port, image, fmt.Sprintf("mc mb miniotest/%s", bucketName))
  51. Expect(err).NotTo(HaveOccurred())
  52. Eventually(func() (*batchv1.Job, error) {
  53. return c.BatchV1().Jobs(namespace).Get(ctx, createDBJobName, getOpts)
  54. }, timeout, PollingInterval).Should(WithTransform(getSucceededJobs, Equal(int32(1))))
  55. By("scaling down to 0 replicas")
  56. dpl, err = utils.DplScale(ctx, c, dpl, 0)
  57. Expect(err).NotTo(HaveOccurred())
  58. Eventually(func() (*appsv1.Deployment, error) {
  59. return c.AppsV1().Deployments(namespace).Get(ctx, deployName, getOpts)
  60. }, timeout, PollingInterval).Should(WithTransform(getAvailableReplicas, BeZero()))
  61. By("scaling up to the original replicas")
  62. dpl, err = utils.DplScale(ctx, c, dpl, origReplicas)
  63. Expect(err).NotTo(HaveOccurred())
  64. Eventually(func() (*appsv1.Deployment, error) {
  65. return c.AppsV1().Deployments(namespace).Get(ctx, deployName, getOpts)
  66. }, timeout, PollingInterval).Should(WithTransform(getAvailableReplicas, Equal(origReplicas)))
  67. By("creating a job to drop the test bucket")
  68. deleteDBJobName := fmt.Sprintf("%s-delb-%s",
  69. deployName, jobSuffix)
  70. err = createJob(ctx, c, deleteDBJobName, port, image, fmt.Sprintf("mc rb miniotest/%s", bucketName))
  71. Expect(err).NotTo(HaveOccurred())
  72. Eventually(func() (*batchv1.Job, error) {
  73. return c.BatchV1().Jobs(namespace).Get(ctx, deleteDBJobName, getOpts)
  74. }, timeout, PollingInterval).Should(WithTransform(getSucceededJobs, Equal(int32(1))))
  75. })
  76. })
  77. AfterEach(func() {
  78. cancel()
  79. })
  80. })