我正在为使用Kubebuilder创建的示例Kubernetes CRD和控制器编写一些单元测试。控制器中的主要代码创建Kubernetes资源(其中包含名称空间和ResourceQuota)。在我的单元测试中,我想验证控制器是否确实创建了这些。我使用使用默认<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="map-poi-nav">
<ul class="map-poi-nav-dropdown">
//Parent #1
<li class="sub-menu-link" id="sub-menu-link-1">
<a href="#">
<img src="https://svgshare.com/i/ADc.svg"> Activities
</a>
</li>
<li class="sub-menu">
<ul class="sub-menu-list" id="sub-menu-list-1">
<li><a><span>•</span>Golden State Park</a></li>
<li><a><span>•</span>Sunrise Oaks City Park</a></li>
</ul>
</li>
</ul>
<ul class="map-poi-nav-dropdown">
//Parent #2
<li class="sub-menu-link" id="sub-menu-link-2">
<a href="#">
<img src="https://svgshare.com/i/ADc.svg"> Dining
</a>
</li>
<li class="sub-menu">
<ul class="sub-menu-list" id="sub-menu-list-2">
<li><a><span>•</span>The Loft Grill</a></li>
<li><a><span>•</span>Fish Grill & Bar</a></li>
</ul>
</li>
</ul>
</div>
对象创建的client.Client
对象。
sigs.k8s.io/controller-runtime/pkg/manager
我知道主要代码可以正常工作,因为我在真实的实时环境中对其进行了测试。我看到从单元测试中调用了主代码。但是,上面的代码在单元测试中不起作用。即对Get()的调用确实返回了我期望的ResourceQuota。我也尝试过List()API,但是也不会返回任何东西。也没有错误。只是一个空洞的反应。
我是否需要做一些特殊/不同的事情才能使Kubebuilder中的K8S控制平面运行单元测试?
答案 0 :(得分:0)
将其发布以防其他人发现它有用。如果要访问其他K8S资源,则需要使用Kubernetes的client-go中的标准clientSet
对象。例如如果要确认存在名为targetNamespace
的特定名称空间:
mgr, _ := manager.New(cfg, manager.Options{})
generatedClient := kubernetes.NewForConfigOrDie(mgr.GetConfig())
nsFound := false
namespaces := generatedClient.CoreV1().Namespaces()
namespaceList, _ := namespaces.List(metav1.ListOptions{})
for _, ns := range namespaceList.Items {
if ns.Name == targetNamespace {
nsFound = true
break
}
}
g.Expect(nsFound).To(gomega.BeTrue())
log.Printf("Namespace %s verified", targetNamespace)