You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2022/01/12 13:54:17 UTC
[camel-k] 31/31: chore(e2e): Move HTTPD resources creation in separate functions
This is an automated email from the ASF dual-hosted git repository.
astefanutti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 863887e33acb66f3495a154f75ac2fb86e24678c
Author: Antonin Stefanutti <an...@stefanutti.fr>
AuthorDate: Wed Jan 12 11:52:01 2022 +0100
chore(e2e): Move HTTPD resources creation in separate functions
---
e2e/common/build/maven_http_proxy_test.go | 363 ++++++++++++++++--------------
1 file changed, 188 insertions(+), 175 deletions(-)
diff --git a/e2e/common/build/maven_http_proxy_test.go b/e2e/common/build/maven_http_proxy_test.go
index 9bbcbe3..4197672 100644
--- a/e2e/common/build/maven_http_proxy_test.go
+++ b/e2e/common/build/maven_http_proxy_test.go
@@ -49,10 +49,11 @@ import (
v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
)
+var httpdTlsMountPath = "/etc/tls/private"
+
func TestMavenProxy(t *testing.T) {
WithNewTestNamespace(t, func(ns string) {
hostname := fmt.Sprintf("%s.%s.svc", "proxy", ns)
- tlsMountPath := "/etc/tls/private"
// Generate the TLS certificate
serialNumber := big.NewInt(rand2.Int63())
@@ -107,184 +108,15 @@ func TestMavenProxy(t *testing.T) {
}
Expect(TestClient().Create(TestContext, secret)).To(Succeed())
- // HTTPD configuration
- config := &corev1.ConfigMap{
- TypeMeta: metav1.TypeMeta{
- Kind: "ConfigMap",
- APIVersion: corev1.SchemeGroupVersion.String(),
- },
- ObjectMeta: metav1.ObjectMeta{
- Namespace: ns,
- Name: "httpd-config",
- },
- Data: map[string]string{
- "httpd.conf": fmt.Sprintf(`
-ServerRoot "/etc/httpd
-
-PidFile /var/run/httpd/httpd.pid"
-
-LoadModule mpm_event_module /usr/local/apache2/modules/mod_mpm_event.so
-LoadModule authn_core_module /usr/local/apache2/modules/mod_authn_core.so
-LoadModule authz_core_module /usr/local/apache2/modules/mod_authz_core.so
-LoadModule proxy_module /usr/local/apache2/modules/mod_proxy.so
-LoadModule proxy_http_module /usr/local/apache2/modules/mod_proxy_http.so
-LoadModule proxy_connect_module /usr/local/apache2/modules/mod_proxy_connect.so
-LoadModule headers_module /usr/local/apache2/modules/mod_headers.so
-LoadModule setenvif_module /usr/local/apache2/modules/mod_setenvif.so
-LoadModule version_module /usr/local/apache2/modules/mod_version.so
-LoadModule log_config_module /usr/local/apache2/modules/mod_log_config.so
-LoadModule env_module /usr/local/apache2/modules/mod_env.so
-LoadModule unixd_module /usr/local/apache2/modules/mod_unixd.so
-LoadModule status_module /usr/local/apache2/modules/mod_status.so
-LoadModule autoindex_module /usr/local/apache2/modules/mod_autoindex.so
-LoadModule ssl_module /usr/local/apache2/modules/mod_ssl.so
-
-Mutex posixsem
-
-LogFormat "%%h %%l %%u %%t \"%%r\" %%>s %%b" common
-CustomLog /dev/stdout common
-ErrorLog /dev/stderr
-
-LogLevel warn
-
-Listen 8080
-Listen 8443
-
-ServerName %s
-
-ProxyRequests On
-ProxyVia Off
-
-<VirtualHost *:8443>
- SSLEngine on
-
- SSLCertificateFile "%s/%s"
- SSLCertificateKeyFile "%s/%s"
-
- AllowEncodedSlashes NoDecode
-</VirtualHost>
-`,
- hostname, tlsMountPath, corev1.TLSCertKey, tlsMountPath, corev1.TLSPrivateKeyKey,
- ),
- },
- }
+ // HTTPD ConfigMap
+ config := newHTTPDConfigMap(ns, hostname)
Expect(TestClient().Create(TestContext, config)).To(Succeed())
- // Deploy HTTPD
- // $ curl --proxy-cacert ca.crt --proxy https://proxy.http-proxy.svc:443 https://www.google.com
- // https://github.com/curl/curl/pull/1127
- deployment := &appsv1.Deployment{
- TypeMeta: metav1.TypeMeta{
- Kind: "Deployment",
- APIVersion: appsv1.SchemeGroupVersion.String(),
- },
- ObjectMeta: metav1.ObjectMeta{
- Namespace: ns,
- Name: "proxy",
- },
- Spec: appsv1.DeploymentSpec{
- Selector: &metav1.LabelSelector{
- MatchLabels: map[string]string{
- "app": "proxy",
- },
- },
- Template: corev1.PodTemplateSpec{
- ObjectMeta: metav1.ObjectMeta{
- Labels: map[string]string{
- "app": "proxy",
- },
- },
- Spec: corev1.PodSpec{
- Containers: []corev1.Container{
- {
- Name: "httpd",
- Image: "httpd:2.4.46",
- Command: []string{"httpd", "-f", "/etc/httpd/httpd.conf", "-DFOREGROUND"},
- Ports: []corev1.ContainerPort{
- {
- Name: "http",
- ContainerPort: 8080,
- },
- {
- Name: "https",
- ContainerPort: 8443,
- },
- },
- VolumeMounts: []corev1.VolumeMount{
- {
- Name: "tls",
- MountPath: tlsMountPath,
- ReadOnly: true,
- },
- {
- Name: "httpd-conf",
- MountPath: "/etc/httpd",
- ReadOnly: true,
- },
- {
- Name: "httpd-run",
- MountPath: "/var/run/httpd",
- },
- },
- },
- },
- Volumes: []corev1.Volume{
- {
- Name: "tls",
- VolumeSource: corev1.VolumeSource{
- Secret: &corev1.SecretVolumeSource{
- SecretName: secret.Name,
- },
- },
- },
- {
- Name: "httpd-conf",
- VolumeSource: corev1.VolumeSource{
- ConfigMap: &corev1.ConfigMapVolumeSource{
- LocalObjectReference: corev1.LocalObjectReference{
- Name: config.Name,
- },
- },
- },
- },
- {
- Name: "httpd-run",
- VolumeSource: corev1.VolumeSource{
- EmptyDir: &corev1.EmptyDirVolumeSource{},
- },
- },
- },
- },
- },
- },
- }
+ // HTTPD Deployment
+ deployment := newHTTPDDeployment(ns, config.Name, secret.Name)
Expect(TestClient().Create(TestContext, deployment)).To(Succeed())
- service := &corev1.Service{
- TypeMeta: metav1.TypeMeta{
- Kind: "Service",
- APIVersion: corev1.SchemeGroupVersion.String(),
- },
- ObjectMeta: metav1.ObjectMeta{
- Namespace: ns,
- Name: deployment.Name,
- },
- Spec: corev1.ServiceSpec{
- Selector: deployment.Spec.Template.Labels,
- Ports: []corev1.ServicePort{
- {
- Name: "http",
- Port: 80,
- TargetPort: intstr.FromString("http"),
- },
- {
- Name: "https",
- Port: 443,
- TargetPort: intstr.FromString("https"),
- },
- },
- },
- }
+ service := newHTTPDService(deployment)
Expect(TestClient().Create(TestContext, service)).To(Succeed())
// Wait for the Deployment to become ready
@@ -352,3 +184,184 @@ ProxyVia Off
Expect(TestClient().Delete(TestContext, config)).To(Succeed())
})
}
+
+func newHTTPDConfigMap(ns, hostname string) *corev1.ConfigMap {
+ return &corev1.ConfigMap{
+ TypeMeta: metav1.TypeMeta{
+ Kind: "ConfigMap",
+ APIVersion: corev1.SchemeGroupVersion.String(),
+ },
+ ObjectMeta: metav1.ObjectMeta{
+ Namespace: ns,
+ Name: "httpd-config",
+ },
+ Data: map[string]string{
+ "httpd.conf": fmt.Sprintf(`
+ServerRoot "/etc/httpd
+
+PidFile /var/run/httpd/httpd.pid"
+
+LoadModule mpm_event_module /usr/local/apache2/modules/mod_mpm_event.so
+LoadModule authn_core_module /usr/local/apache2/modules/mod_authn_core.so
+LoadModule authz_core_module /usr/local/apache2/modules/mod_authz_core.so
+LoadModule proxy_module /usr/local/apache2/modules/mod_proxy.so
+LoadModule proxy_http_module /usr/local/apache2/modules/mod_proxy_http.so
+LoadModule proxy_connect_module /usr/local/apache2/modules/mod_proxy_connect.so
+LoadModule headers_module /usr/local/apache2/modules/mod_headers.so
+LoadModule setenvif_module /usr/local/apache2/modules/mod_setenvif.so
+LoadModule version_module /usr/local/apache2/modules/mod_version.so
+LoadModule log_config_module /usr/local/apache2/modules/mod_log_config.so
+LoadModule env_module /usr/local/apache2/modules/mod_env.so
+LoadModule unixd_module /usr/local/apache2/modules/mod_unixd.so
+LoadModule status_module /usr/local/apache2/modules/mod_status.so
+LoadModule autoindex_module /usr/local/apache2/modules/mod_autoindex.so
+LoadModule ssl_module /usr/local/apache2/modules/mod_ssl.so
+
+Mutex posixsem
+
+LogFormat "%%h %%l %%u %%t \"%%r\" %%>s %%b" common
+CustomLog /dev/stdout common
+ErrorLog /dev/stderr
+
+LogLevel warn
+
+Listen 8080
+Listen 8443
+
+ServerName %s
+
+ProxyRequests On
+ProxyVia Off
+
+<VirtualHost *:8443>
+ SSLEngine on
+
+ SSLCertificateFile "%s/%s"
+ SSLCertificateKeyFile "%s/%s"
+
+ AllowEncodedSlashes NoDecode
+</VirtualHost>
+`,
+ hostname, httpdTlsMountPath, corev1.TLSCertKey, httpdTlsMountPath, corev1.TLSPrivateKeyKey,
+ ),
+ },
+ }
+}
+
+func newHTTPDDeployment(ns, configName, secretName string) *appsv1.Deployment {
+ // $ curl --proxy-cacert ca.crt --proxy https://proxy.http-proxy.svc:443 https://www.google.com
+ // https://github.com/curl/curl/pull/1127
+ return &appsv1.Deployment{
+ TypeMeta: metav1.TypeMeta{
+ Kind: "Deployment",
+ APIVersion: appsv1.SchemeGroupVersion.String(),
+ },
+ ObjectMeta: metav1.ObjectMeta{
+ Namespace: ns,
+ Name: "proxy",
+ },
+ Spec: appsv1.DeploymentSpec{
+ Selector: &metav1.LabelSelector{
+ MatchLabels: map[string]string{
+ "app": "proxy",
+ },
+ },
+ Template: corev1.PodTemplateSpec{
+ ObjectMeta: metav1.ObjectMeta{
+ Labels: map[string]string{
+ "app": "proxy",
+ },
+ },
+ Spec: corev1.PodSpec{
+ Containers: []corev1.Container{
+ {
+ Name: "httpd",
+ Image: "httpd:2.4.46",
+ Command: []string{"httpd", "-f", "/etc/httpd/httpd.conf", "-DFOREGROUND"},
+ Ports: []corev1.ContainerPort{
+ {
+ Name: "http",
+ ContainerPort: 8080,
+ },
+ {
+ Name: "https",
+ ContainerPort: 8443,
+ },
+ },
+ VolumeMounts: []corev1.VolumeMount{
+ {
+ Name: "tls",
+ MountPath: httpdTlsMountPath,
+ ReadOnly: true,
+ },
+ {
+ Name: "httpd-conf",
+ MountPath: "/etc/httpd",
+ ReadOnly: true,
+ },
+ {
+ Name: "httpd-run",
+ MountPath: "/var/run/httpd",
+ },
+ },
+ },
+ },
+ Volumes: []corev1.Volume{
+ {
+ Name: "tls",
+ VolumeSource: corev1.VolumeSource{
+ Secret: &corev1.SecretVolumeSource{
+ SecretName: secretName,
+ },
+ },
+ },
+ {
+ Name: "httpd-conf",
+ VolumeSource: corev1.VolumeSource{
+ ConfigMap: &corev1.ConfigMapVolumeSource{
+ LocalObjectReference: corev1.LocalObjectReference{
+ Name: configName,
+ },
+ },
+ },
+ },
+ {
+ Name: "httpd-run",
+ VolumeSource: corev1.VolumeSource{
+ EmptyDir: &corev1.EmptyDirVolumeSource{},
+ },
+ },
+ },
+ },
+ },
+ },
+ }
+}
+
+func newHTTPDService(deployment *appsv1.Deployment) *corev1.Service {
+ return &corev1.Service{
+ TypeMeta: metav1.TypeMeta{
+ Kind: "Service",
+ APIVersion: corev1.SchemeGroupVersion.String(),
+ },
+ ObjectMeta: metav1.ObjectMeta{
+ Namespace: deployment.Namespace,
+ Name: deployment.Name,
+ },
+ Spec: corev1.ServiceSpec{
+ Selector: deployment.Spec.Template.Labels,
+ Ports: []corev1.ServicePort{
+ {
+ Name: "http",
+ Port: 80,
+ TargetPort: intstr.FromString("http"),
+ },
+ {
+ Name: "https",
+ Port: 443,
+ TargetPort: intstr.FromString("https"),
+ },
+ },
+ },
+ }
+}