mac上实践k8s operator笔记(二)

这篇博客记录了在Mac上为k8s Operator添加单元测试(UT)和实现基于Ginkgo的测试驱动开发(TDD)过程。博主选择了Azure作为CI框架,创建pipeline确保每次PR都伴随测试。内容包括如何引入Ginkgo测试框架,编写测试用例,以及配置Azure pipeline以展示build badge。
摘要由CSDN通过智能技术生成

要做什么?

这次我要给我们的operator加上UT和pipeline,作为一个简单的BDD/TDD的sample。
因此我采用的测试框架为Ginkgo, CI框架为Azure
我们一个简单的逻辑
为我们的CR添加两个参数,Image和EnvValue

怎么做?

Ginkgo TDD

首先,在operator的目录里加上Ginkgo

type MykindSpec struct {
	Size      int32  `json:"size"`
	Image     string `json:"Image"`
	EnvsValue string `json:"Envs"`
}
operator-sdk generate k8s
operator-sdk generate crds

在controller.go中将fun重命名为NewPodForCR, 并且生成测试文件

ginkgo bootstrap
ginkgo generate controller

其次,添加测试

	Context("newPodForCR", func() {
		It("should use busybox as image by default", func() {
			cr := mykindv1alpha1.MykindSpec{}
			instance := &mykindv1alpha1.Mykind{Spec: cr}
			Pod := mykind.NewPodForCR(instance)
			Expect("busybox").To(Equal(Pod.Spec.Containers[0].Image))
		})

		It("should use image by given", func() {
			cr := mykindv1alpha1.MykindSpec{Image: "test"}
			instance := &mykindv1alpha1.Mykind{Spec: cr}
			Pod := mykind.NewPodForCR(instance)
			Expect("test").To(Equal(Pod.Spec.Containers[0].Image))
		})

		It("should pass envs if given", func() {
			cr := mykindv1alpha1.MykindSpec{EnvsValue: "value"}
			instance := &mykindv1alpha1.Mykind{Spec: cr}
			Pod := mykind.NewPodForCR(instance)
			Expect("value").To(Equal(Pod.Spec.Containers[0].Env[0].Value))
		})
	})

编写逻辑代码直至测试通过

func NewPodForCR(cr *mykindv1alpha1.Mykind) *corev1.Pod {
	labels := map[string]string{
		"app": cr.Name,
	}
	image := "busybox"
	if cr.Spec.Image != "" {
		image = cr.Spec.Image
	}

	EnvVar := corev1.EnvVar{
		Name:  "dummy",
		Value: cr.Spec.EnvsValue,
	}

	return &corev1.Pod{
		ObjectMeta: metav1.ObjectMeta{
			Name:      cr.Name + "-pod",
			Namespace: cr.Namespace,
			Labels:    labels,
		},
		Spec: corev1.PodSpec{
			Containers: []corev1.Container{
				{
					Name:    "busybox",
					Image:   image,
					Command: []string{"sleep", "3600"},
					Env:     []corev1.EnvVar{EnvVar},
				},
			},
		},
	}
}

Azure

pipeline

我们用Azure来保证pr都有测试了

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

jobs: 
  - job: 
    displayName: build
    steps:
    - task: Go@0
      inputs:
        command: 'test'
        arguments: '-v ./...'
        workingDirectory: 'learning'

Build badge

Ref: https://docs.microsoft.com/en-us/learn/modules/implement-code-workflow/6-add-build-badge
在这里插入图片描述

结果

在这里插入图片描述
前一篇,初始化operator项目

Ref:

https://blog.csdn.net/oe1019/article/details/106876471
https://docs.microsoft.com/en-us/learn/modules/implement-code-workflow/6-add-build-badge

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值