1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-10 18:06:55 +00:00
kyverno/test/e2e/framework/client/client.go
Charles-Edouard Brétéché e1db7c9814
feat: add e2e framework and verify image new test (#4094)
Signed-off-by: Charles-Edouard Brétéché <charled.breteche@gmail.com>
2022-06-09 21:58:07 +08:00

92 lines
2.6 KiB
Go

package client
import (
"fmt"
"testing"
"time"
"github.com/kyverno/kyverno/test/e2e"
"github.com/kyverno/kyverno/test/e2e/framework/id"
"github.com/kyverno/kyverno/test/e2e/framework/resource"
"github.com/kyverno/kyverno/test/e2e/framework/utils"
"github.com/onsi/ginkgo"
"github.com/onsi/gomega"
apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
)
type Client interface {
CreateResource(resource.Resource) *unstructured.Unstructured
GetResource(id.Id) *unstructured.Unstructured
DeleteResource(id.Id)
}
type client struct {
t *testing.T
client *e2e.E2EClient
}
func New(t *testing.T) Client {
c, err := e2e.NewE2EClient()
gomega.Expect(err).NotTo(gomega.HaveOccurred())
return &client{t, c}
}
func (c *client) CreateResource(resource resource.Resource) *unstructured.Unstructured {
u := resource.Unstructured()
ginkgo.By(fmt.Sprintf("Creating %s : %s", resource.Gvr(), utils.Key(u)))
var err error
if u.GetNamespace() != "" {
u, err = c.client.CreateNamespacedResource(resource.Gvr(), u.GetNamespace(), u)
} else {
u, err = c.client.CreateClusteredResource(resource.Gvr(), u)
}
gomega.Expect(err).NotTo(gomega.HaveOccurred())
c.t.Cleanup(func() {
c.DeleteResource(id.New(resource.Gvr(), u.GetNamespace(), u.GetName()))
})
return u
}
func (c *client) DeleteResource(id id.Id) {
ginkgo.By(fmt.Sprintf("Deleting %s : %s", id.GetGvr(), utils.Key(id)))
var err error
if id.IsClustered() {
err = c.client.DeleteClusteredResource(id.GetGvr(), id.GetName())
} else {
err = c.client.DeleteNamespacedResource(id.GetGvr(), id.GetNamespace(), id.GetName())
}
if !apierrors.IsNotFound(err) {
err = e2e.GetWithRetry(1*time.Second, 15, func() error {
if id.IsClustered() {
_, err = c.client.GetClusteredResource(id.GetGvr(), id.GetName())
} else {
_, err = c.client.GetNamespacedResource(id.GetGvr(), id.GetNamespace(), id.GetName())
}
if err == nil {
return fmt.Errorf("resource still exists: %s, %s", id.GetGvr(), utils.Key(id))
}
if apierrors.IsNotFound(err) {
return nil
}
return err
})
}
gomega.Expect(err).NotTo(gomega.HaveOccurred())
}
func (c *client) GetResource(id id.Id) *unstructured.Unstructured {
ginkgo.By(fmt.Sprintf("Getting %s : %s", id.GetGvr(), utils.Key(id)))
var u *unstructured.Unstructured
err := e2e.GetWithRetry(1*time.Second, 15, func() error {
var err error
if id.IsClustered() {
u, err = c.client.GetClusteredResource(id.GetGvr(), id.GetName())
} else {
u, err = c.client.GetNamespacedResource(id.GetGvr(), id.GetNamespace(), id.GetName())
}
return err
})
gomega.Expect(err).NotTo(gomega.HaveOccurred())
return u
}