chore: move httpbun to be part of framework (#9955)
Signed-off-by: Spazzy <brendankamp757@gmail.com>
This commit is contained in:
parent
90ed0ccdbe
commit
60bf6ba642
13 changed files with 265 additions and 204 deletions
|
|
@ -43,12 +43,28 @@ const HTTPBunService = "httpbun"
|
|||
// NipService name of external service using nip.io
|
||||
const NIPService = "external-nip"
|
||||
|
||||
// HTTPBunImage is the default image that is used to deploy HTTPBun with the framwork
|
||||
var HTTPBunImage = os.Getenv("HTTPBUN_IMAGE")
|
||||
|
||||
// EchoImage is the default image to be used by the echo service
|
||||
const EchoImage = "registry.k8s.io/ingress-nginx/e2e-test-echo@sha256:4938d1d91a2b7d19454460a8c1b010b89f6ff92d2987fd889ac3e8fc3b70d91a"
|
||||
|
||||
// TODO: change all Deployment functions to use these options
|
||||
// in order to reduce complexity and have a unified API accross the
|
||||
// framework
|
||||
type deploymentOptions struct {
|
||||
namespace string
|
||||
name string
|
||||
replicas int
|
||||
svcAnnotations map[string]string
|
||||
namespace string
|
||||
image string
|
||||
port int32
|
||||
replicas int
|
||||
command []string
|
||||
args []string
|
||||
env []corev1.EnvVar
|
||||
volumeMounts []corev1.VolumeMount
|
||||
volumes []corev1.Volume
|
||||
svcAnnotations map[string]string
|
||||
setProbe bool
|
||||
}
|
||||
|
||||
// WithDeploymentNamespace allows configuring the deployment's namespace
|
||||
|
|
@ -100,22 +116,25 @@ func (f *Framework) NewEchoDeployment(opts ...func(*deploymentOptions)) {
|
|||
namespace: f.Namespace,
|
||||
name: EchoService,
|
||||
replicas: 1,
|
||||
image: "registry.k8s.io/ingress-nginx/e2e-test-echo@sha256:6fc5aa2994c86575975bb20a5203651207029a0d28e3f491d8a127d08baadab4",
|
||||
image: EchoImage,
|
||||
}
|
||||
for _, o := range opts {
|
||||
o(options)
|
||||
}
|
||||
|
||||
deployment := newDeployment(options.name, options.namespace, options.image, 80, int32(options.replicas),
|
||||
f.EnsureDeployment(newDeployment(
|
||||
options.name,
|
||||
options.namespace,
|
||||
options.image,
|
||||
80,
|
||||
int32(options.replicas),
|
||||
nil, nil, nil,
|
||||
[]corev1.VolumeMount{},
|
||||
[]corev1.Volume{},
|
||||
true,
|
||||
)
|
||||
))
|
||||
|
||||
f.EnsureDeployment(deployment)
|
||||
|
||||
service := &corev1.Service{
|
||||
f.EnsureService(&corev1.Service{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: options.name,
|
||||
Namespace: options.namespace,
|
||||
|
|
@ -134,11 +153,15 @@ func (f *Framework) NewEchoDeployment(opts ...func(*deploymentOptions)) {
|
|||
"app": options.name,
|
||||
},
|
||||
},
|
||||
}
|
||||
})
|
||||
|
||||
f.EnsureService(service)
|
||||
|
||||
err := WaitForEndpoints(f.KubeClientSet, DefaultTimeout, options.name, options.namespace, options.replicas)
|
||||
err := WaitForEndpoints(
|
||||
f.KubeClientSet,
|
||||
DefaultTimeout,
|
||||
options.name,
|
||||
options.namespace,
|
||||
options.replicas,
|
||||
)
|
||||
assert.Nil(ginkgo.GinkgoT(), err, "waiting for endpoints to become ready")
|
||||
}
|
||||
|
||||
|
|
@ -147,6 +170,12 @@ func BuildNIPHost(ip string) string {
|
|||
return fmt.Sprintf("%s.nip.io", ip)
|
||||
}
|
||||
|
||||
// GetNipHost used to generate a nip host for external DNS resolving
|
||||
// for the instance deployed by the framework
|
||||
func (f *Framework) GetNIPHost() string {
|
||||
return BuildNIPHost(f.HTTPBunIP)
|
||||
}
|
||||
|
||||
// BuildNIPExternalNameService used to generate a service pointing to nip.io to
|
||||
// help resolve to an IP address
|
||||
func BuildNIPExternalNameService(f *Framework, ip, portName string) *corev1.Service {
|
||||
|
|
@ -177,22 +206,27 @@ func (f *Framework) NewHttpbunDeployment(opts ...func(*deploymentOptions)) strin
|
|||
namespace: f.Namespace,
|
||||
name: HTTPBunService,
|
||||
replicas: 1,
|
||||
image: "registry.k8s.io/ingress-nginx/e2e-test-httpbun:v20230505-v0.0.1",
|
||||
image: HTTPBunImage,
|
||||
}
|
||||
for _, o := range opts {
|
||||
o(options)
|
||||
}
|
||||
|
||||
deployment := newDeployment(options.name, options.namespace, options.image, 80, int32(options.replicas),
|
||||
// Create the HTTPBun Deployment
|
||||
f.EnsureDeployment(newDeployment(
|
||||
options.name,
|
||||
options.namespace,
|
||||
options.image,
|
||||
80,
|
||||
int32(options.replicas),
|
||||
nil, nil, nil,
|
||||
[]corev1.VolumeMount{},
|
||||
[]corev1.Volume{},
|
||||
true,
|
||||
)
|
||||
))
|
||||
|
||||
f.EnsureDeployment(deployment)
|
||||
|
||||
service := &corev1.Service{
|
||||
// Create a service pointing to deployment
|
||||
f.EnsureService(&corev1.Service{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: options.name,
|
||||
Namespace: options.namespace,
|
||||
|
|
@ -211,14 +245,26 @@ func (f *Framework) NewHttpbunDeployment(opts ...func(*deploymentOptions)) strin
|
|||
"app": options.name,
|
||||
},
|
||||
},
|
||||
}
|
||||
})
|
||||
|
||||
s := f.EnsureService(service)
|
||||
|
||||
err := WaitForEndpoints(f.KubeClientSet, DefaultTimeout, options.name, options.namespace, options.replicas)
|
||||
// Wait for deployment to become available
|
||||
err := WaitForEndpoints(
|
||||
f.KubeClientSet,
|
||||
DefaultTimeout,
|
||||
options.name,
|
||||
options.namespace,
|
||||
options.replicas,
|
||||
)
|
||||
assert.Nil(ginkgo.GinkgoT(), err, "waiting for endpoints to become ready")
|
||||
|
||||
return s.Spec.ClusterIPs[0]
|
||||
// Get cluster ip for HTTPBun to be used in tests
|
||||
e, err := f.KubeClientSet.
|
||||
CoreV1().
|
||||
Endpoints(f.Namespace).
|
||||
Get(context.TODO(), HTTPBunService, metav1.GetOptions{})
|
||||
assert.Nil(ginkgo.GinkgoT(), err, "failed to get httpbun endpoint")
|
||||
|
||||
return e.Subsets[0].Addresses[0].IP
|
||||
}
|
||||
|
||||
// NewSlowEchoDeployment creates a new deployment of the slow echo server image in a particular namespace.
|
||||
|
|
@ -276,13 +322,16 @@ func (f *Framework) NGINXDeployment(name string, cfg string, waitendpoint bool)
|
|||
"nginx.conf": cfg,
|
||||
}
|
||||
|
||||
_, err := f.KubeClientSet.CoreV1().ConfigMaps(f.Namespace).Create(context.TODO(), &corev1.ConfigMap{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: name,
|
||||
Namespace: f.Namespace,
|
||||
},
|
||||
Data: cfgMap,
|
||||
}, metav1.CreateOptions{})
|
||||
_, err := f.KubeClientSet.
|
||||
CoreV1().
|
||||
ConfigMaps(f.Namespace).
|
||||
Create(context.TODO(), &corev1.ConfigMap{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: name,
|
||||
Namespace: f.Namespace,
|
||||
},
|
||||
Data: cfgMap,
|
||||
}, metav1.CreateOptions{})
|
||||
assert.Nil(ginkgo.GinkgoT(), err, "creating configmap")
|
||||
|
||||
deployment := newDeployment(name, f.Namespace, f.GetNginxBaseImage(), 80, 1,
|
||||
|
|
|
|||
|
|
@ -67,16 +67,32 @@ type Framework struct {
|
|||
IngressClass string
|
||||
|
||||
pod *v1.Pod
|
||||
// We use httpbun as a service that we route to in our tests through
|
||||
// the ingress controller. We add it as part of the framework as it
|
||||
// is used extensively
|
||||
HTTPBunIP string
|
||||
HTTPBunEnabled bool
|
||||
}
|
||||
|
||||
// WithHTTPBunEnabled deploys an instance of HTTPBun for the specific test
|
||||
func WithHTTPBunEnabled() func(*Framework) {
|
||||
return func(f *Framework) {
|
||||
f.HTTPBunEnabled = true
|
||||
}
|
||||
}
|
||||
|
||||
// NewDefaultFramework makes a new framework and sets up a BeforeEach/AfterEach for
|
||||
// you (you can write additional before/after each functions).
|
||||
func NewDefaultFramework(baseName string) *Framework {
|
||||
func NewDefaultFramework(baseName string, opts ...func(*Framework)) *Framework {
|
||||
defer ginkgo.GinkgoRecover()
|
||||
|
||||
f := &Framework{
|
||||
BaseName: baseName,
|
||||
}
|
||||
// set framework options
|
||||
for _, o := range opts {
|
||||
o(f)
|
||||
}
|
||||
|
||||
ginkgo.BeforeEach(f.BeforeEach)
|
||||
ginkgo.AfterEach(f.AfterEach)
|
||||
|
|
@ -86,12 +102,16 @@ func NewDefaultFramework(baseName string) *Framework {
|
|||
|
||||
// NewSimpleFramework makes a new framework that allows the usage of a namespace
|
||||
// for arbitraty tests.
|
||||
func NewSimpleFramework(baseName string) *Framework {
|
||||
func NewSimpleFramework(baseName string, opts ...func(*Framework)) *Framework {
|
||||
defer ginkgo.GinkgoRecover()
|
||||
|
||||
f := &Framework{
|
||||
BaseName: baseName,
|
||||
}
|
||||
// set framework options
|
||||
for _, o := range opts {
|
||||
o(f)
|
||||
}
|
||||
|
||||
ginkgo.BeforeEach(f.CreateEnvironment)
|
||||
ginkgo.AfterEach(f.DestroyEnvironment)
|
||||
|
|
@ -140,6 +160,11 @@ func (f *Framework) BeforeEach() {
|
|||
assert.Nil(ginkgo.GinkgoT(), err, "updating ingress controller pod information")
|
||||
|
||||
f.WaitForNginxListening(80)
|
||||
|
||||
// If HTTPBun is enabled deploy an instance to the namespace
|
||||
if f.HTTPBunEnabled {
|
||||
f.HTTPBunIP = f.NewHttpbunDeployment()
|
||||
}
|
||||
}
|
||||
|
||||
// AfterEach deletes the namespace, after reading its events.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue