github.com/aiven/aiven-go-client@v1.36.0/kafka_topic_acc_test.go (about)

     1  package aiven
     2  
     3  import (
     4  	"math/rand"
     5  	"os"
     6  	"strconv"
     7  	"time"
     8  
     9  	. "github.com/onsi/ginkgo"
    10  	. "github.com/onsi/gomega"
    11  )
    12  
    13  var _ = Describe("Kafka Topic", func() {
    14  	var (
    15  		projectName string
    16  		project     *Project
    17  		err         error
    18  	)
    19  
    20  	Context("Kafka Topic CRUD", func() {
    21  		It("should not error", func() {
    22  			projectName = os.Getenv("AIVEN_PROJECT_NAME")
    23  			project, err = client.Projects.Get(projectName)
    24  
    25  			Expect(err).NotTo(HaveOccurred())
    26  		})
    27  
    28  		It("should populate fields properly", func() {
    29  			Expect(project).NotTo(BeNil())
    30  
    31  			if project != nil {
    32  				Expect(project.Name).NotTo(BeEmpty())
    33  			}
    34  		})
    35  
    36  		// kafka service
    37  		var (
    38  			serviceName string
    39  			service     *Service
    40  			errS        error
    41  		)
    42  
    43  		It("creating service", func() {
    44  			serviceName = "test-acc-kafka-topic-sr-" + strconv.Itoa(rand.Int())
    45  			service, errS = client.Services.Create(projectName, CreateServiceRequest{
    46  				Cloud:        "google-europe-west1",
    47  				Plan:         "business-4",
    48  				ProjectVPCID: nil,
    49  				ServiceName:  serviceName,
    50  				ServiceType:  "kafka",
    51  			})
    52  		})
    53  
    54  		It("should not error", func() {
    55  			Expect(errS).NotTo(HaveOccurred())
    56  		})
    57  
    58  		It("should populate fields properly", func() {
    59  			Expect(service).NotTo(BeNil())
    60  
    61  			if service != nil {
    62  				Expect(service.Name).NotTo(BeEmpty())
    63  				Expect(service.Plan).NotTo(BeEmpty())
    64  				Expect(service.Type).Should(Equal("kafka"))
    65  
    66  				Eventually(func() string {
    67  					service, _ = client.Services.Get(projectName, serviceName)
    68  					return service.State
    69  				}, 25*time.Minute, 1*time.Minute).Should(Equal("RUNNING"))
    70  			}
    71  		})
    72  
    73  		// kafka topic
    74  		var (
    75  			errC            error
    76  			topicName       string
    77  			segmentJitterMs int64
    78  		)
    79  		segmentJitterMs = 10
    80  		topicName = "test1"
    81  
    82  		It("create kafka topic", func() {
    83  			time.Sleep(10 * time.Second)
    84  			errC = client.KafkaTopics.Create(projectName, serviceName, CreateKafkaTopicRequest{
    85  				TopicName: topicName,
    86  				Config: KafkaTopicConfig{
    87  					CleanupPolicy:   "compact",
    88  					SegmentJitterMs: &segmentJitterMs,
    89  				},
    90  				Tags: []KafkaTopicTag{
    91  					{
    92  						Key:   "tag1-key",
    93  						Value: "tag1-value",
    94  					},
    95  				},
    96  			})
    97  
    98  			Eventually(func() string {
    99  				topic, _ := client.KafkaTopics.Get(projectName, serviceName, topicName)
   100  
   101  				if topic != nil {
   102  					return topic.State
   103  				}
   104  
   105  				return ""
   106  			}, 25*time.Minute, 1*time.Minute).Should(Equal("ACTIVE"))
   107  		})
   108  
   109  		It("should not error kafka topic with config", func() {
   110  			Expect(errC).NotTo(HaveOccurred())
   111  		})
   112  
   113  		It("should populate fields properly", func() {
   114  			t, errT := client.KafkaTopics.Get(projectName, serviceName, topicName)
   115  			Expect(errT).NotTo(HaveOccurred())
   116  
   117  			if t != nil {
   118  				Expect(t.Config.CleanupPolicy.Value).NotTo(BeEmpty())
   119  				Expect(t.Config.SegmentJitterMs.Value).To(Equal(segmentJitterMs))
   120  				Expect(t.Tags).NotTo(BeEmpty())
   121  				Expect(t.Tags[0].Key).To(Equal("tag1-key"))
   122  				Expect(t.Tags[0].Value).To(Equal("tag1-value"))
   123  			}
   124  		})
   125  
   126  		It("should update topic config", func() {
   127  			var uncleanLeaderElectionEnable = true
   128  
   129  			errU := client.KafkaTopics.Update(projectName, serviceName, topicName, UpdateKafkaTopicRequest{
   130  				Config: KafkaTopicConfig{
   131  					UncleanLeaderElectionEnable: &uncleanLeaderElectionEnable,
   132  				},
   133  				Tags: []KafkaTopicTag{
   134  					{
   135  						Key:   "tag1-key",
   136  						Value: "tag1-value",
   137  					},
   138  					{
   139  						Key:   "tag2-key",
   140  						Value: "tag2-value",
   141  					},
   142  				},
   143  			})
   144  			Expect(errU).NotTo(HaveOccurred())
   145  
   146  			t2, errG := client.KafkaTopics.Get(projectName, serviceName, topicName)
   147  			Expect(errG).NotTo(HaveOccurred())
   148  			Expect(t2).NotTo(BeNil())
   149  
   150  			if t2 != nil {
   151  				Expect(t2.Config.UncleanLeaderElectionEnable.Value).Should(Equal(true))
   152  				Expect(t2.Tags).ShouldNot(BeEmpty())
   153  				Expect(len(t2.Tags)).To(Equal(2))
   154  			}
   155  		})
   156  
   157  		It("list v2", func() {
   158  			list, errV2 := client.KafkaTopics.V2List(projectName, serviceName, []string{topicName})
   159  			Expect(errV2).NotTo(HaveOccurred())
   160  
   161  			Expect(len(list)).Should(Equal(1))
   162  			Expect(list[0].Config.CleanupPolicy.Value).NotTo(BeEmpty())
   163  			Expect(list[0].Config.SegmentJitterMs.Value).To(Equal(segmentJitterMs))
   164  			Expect(list[0].Tags).NotTo(BeEmpty())
   165  			Expect(len(list[0].Tags)).To(Equal(2))
   166  		})
   167  
   168  		It("delete Kafka Topic and Kafka service", func() {
   169  			if errD := client.KafkaTopics.Delete(projectName, serviceName, topicName); errD != nil {
   170  				Fail("cannot delete kafka topic:" + errD.Error())
   171  			}
   172  
   173  			if errD := client.Services.Delete(projectName, serviceName); errD != nil {
   174  				Fail("cannot delete service:" + errD.Error())
   175  			}
   176  		})
   177  	})
   178  })