Skip to content

Commit 30315ea

Browse files
authored
test: simplify func-git service (knative#2926)
Use k8s primitives pod/svc/ingress instead of knative service. Signed-off-by: Matej Vašek <[email protected]>
1 parent 589bbe8 commit 30315ea

File tree

2 files changed

+102
-64
lines changed

2 files changed

+102
-64
lines changed

hack/install-git-server.sh

Lines changed: 67 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,31 +17,79 @@ set -o nounset
1717
set -o pipefail
1818

1919
git_server() {
20-
echo "Creating Git Server Knative service..."
21-
cat << EOF | kubectl apply -f -
22-
apiVersion: serving.knative.dev/v1
23-
kind: Service
20+
echo "Creating Git Server"
21+
22+
local name="func-git"
23+
24+
local namespace
25+
namespace="$(kubectl config view --minify --output 'jsonpath={..namespace}')"
26+
namespace="${namespace:-"default"}"
27+
28+
29+
local ingress_class="contour-external"
30+
local cluster_domain="localtest.me"
31+
if kubectl api-versions | grep -q openshift.io; then
32+
cluster_domain="$(kubectl get ingresses.config/cluster -o jsonpath='{.spec.domain}')"
33+
ingress_class="openshift-default"
34+
fi
35+
36+
37+
local -r func_git_host="${name}.${namespace}.${cluster_domain}"
38+
39+
kubectl apply -f - <<EOF
40+
apiVersion: v1
41+
kind: Pod
2442
metadata:
25-
name: func-git
43+
name: "${name}"
44+
namespace: "${namespace}"
2645
labels:
27-
app: git
46+
app.kubernetes.io/name: "${name}"
2847
spec:
29-
template:
30-
metadata:
31-
annotations:
32-
autoscaling.knative.dev/max-scale: "1"
33-
autoscaling.knative.dev/min-scale: "1"
34-
client.knative.dev/user-image: ghcr.io/matejvasek/func/gitserver:latest
35-
spec:
36-
containers:
37-
- image: ghcr.io/matejvasek/func/gitserver:latest
38-
ports:
48+
containers:
49+
- name: "${name}"
50+
image: ghcr.io/matejvasek/func/gitserver:latest
51+
ports:
3952
- containerPort: 8080
40-
resources: {}
41-
status: {}
53+
name: http
54+
---
55+
apiVersion: v1
56+
kind: Service
57+
metadata:
58+
name: "${name}"
59+
namespace: "${namespace}"
60+
spec:
61+
selector:
62+
app.kubernetes.io/name: "${name}"
63+
ports:
64+
- name: http
65+
protocol: TCP
66+
port: 80
67+
targetPort: http
68+
type: ClusterIP
69+
---
70+
apiVersion: networking.k8s.io/v1
71+
kind: Ingress
72+
metadata:
73+
name: "${name}"
74+
namespace: "${namespace}"
75+
spec:
76+
ingressClassName: "${ingress_class}"
77+
rules:
78+
- host: "${func_git_host}"
79+
http:
80+
paths:
81+
- backend:
82+
service:
83+
name: "${name}"
84+
port:
85+
number: 80
86+
pathType: Prefix
87+
path: /
4288
EOF
4389

44-
kubectl wait ksvc --for=condition=RoutesReady --timeout=30s -l "app=git"
90+
echo "starting func-git service at: ${func_git_host}"
91+
92+
kubectl wait --for=condition=Ready "pod/${name}" --timeout=30s
4593
}
4694

4795
git_server

test/common/gitserver.go

Lines changed: 35 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ package common
22

33
import (
44
"context"
5+
"fmt"
56

67
"strings"
78
"testing"
89

9-
"knative.dev/func/pkg/k8s"
10-
1110
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
12-
"k8s.io/client-go/kubernetes"
11+
12+
"knative.dev/func/pkg/k8s"
1313
)
1414

1515
var DefaultGitServer GitProvider
@@ -39,71 +39,61 @@ type GitProvider interface {
3939
// ------------------------------------------------------
4040

4141
type GitTestServerKnativeProvider struct {
42-
PodName string
43-
ServiceUrl string
44-
Kubectl *TestExecCmd
45-
t *testing.T
42+
Kubectl *TestExecCmd
43+
namespace string
44+
externalHost string
45+
t *testing.T
4646
}
4747

48-
func (g *GitTestServerKnativeProvider) Init(T *testing.T) {
49-
50-
g.t = T
51-
if g.PodName == "" {
52-
config, err := k8s.GetClientConfig().ClientConfig()
53-
if err != nil {
54-
T.Fatal(err.Error())
55-
}
56-
clientSet, err := kubernetes.NewForConfig(config)
57-
if err != nil {
58-
T.Fatal(err.Error())
59-
}
60-
ctx := context.Background()
61-
62-
namespace, _, _ := k8s.GetClientConfig().Namespace()
63-
podList, err := clientSet.CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{
64-
LabelSelector: "serving.knative.dev/service=func-git",
65-
})
66-
if err != nil {
67-
T.Fatal(err.Error())
68-
}
69-
for _, pod := range podList.Items {
70-
g.PodName = pod.Name
71-
}
72-
}
73-
74-
if g.ServiceUrl == "" {
75-
// Get Route Name
76-
_, g.ServiceUrl = GetKnativeServiceRevisionAndUrl(T, "func-git")
77-
}
48+
// name of the pod,svc and ingress
49+
const podName = "func-git"
50+
const svcName = podName
51+
const ingressName = podName
7852

53+
func (g *GitTestServerKnativeProvider) Init(t *testing.T) {
54+
g.t = t
7955
if g.Kubectl == nil {
8056
g.Kubectl = &TestExecCmd{
8157
Binary: "kubectl",
8258
ShouldDumpCmdLine: true,
8359
ShouldDumpOnSuccess: true,
84-
T: T,
60+
T: t,
61+
}
62+
}
63+
if g.namespace == "" {
64+
g.namespace, _, _ = k8s.GetClientConfig().Namespace()
65+
}
66+
67+
if g.externalHost == "" {
68+
cli, err := k8s.NewKubernetesClientset()
69+
if err != nil {
70+
t.Fatal(err)
8571
}
72+
i, err := cli.NetworkingV1().Ingresses(g.namespace).Get(context.Background(), ingressName, metav1.GetOptions{})
73+
if err != nil {
74+
t.Fatal(err)
75+
}
76+
g.externalHost = i.Spec.Rules[0].Host
8677
}
87-
T.Logf("Initialized HTTP Func Git Server: Server URL = %v Pod Name = %v\n", g.ServiceUrl, g.PodName)
78+
79+
t.Logf("Initialized HTTP Func Git Server: Server URL = %s Pod Name = %s\n", g.externalHost, podName)
8880
}
8981

9082
func (g *GitTestServerKnativeProvider) CreateRepository(repoName string) *GitRemoteRepo {
91-
// kubectl exec $podname -c user-container -- git-repo create $reponame
92-
cmdResult := g.Kubectl.Exec("exec", g.PodName, "-c", "user-container", "--", "git-repo", "create", repoName)
83+
cmdResult := g.Kubectl.Exec("exec", podName, "--", "git-repo", "create", repoName)
9384
if !strings.Contains(cmdResult.Out, "created") {
9485
g.t.Fatal("unable to create git bare repository " + repoName)
9586
}
96-
namespace, _, _ := k8s.GetClientConfig().Namespace()
9787
gitRepo := &GitRemoteRepo{
9888
RepoName: repoName,
99-
ExternalCloneURL: g.ServiceUrl + "/" + repoName + ".git",
100-
ClusterCloneURL: "http://func-git." + namespace + ".svc.cluster.local/" + repoName + ".git",
89+
ExternalCloneURL: fmt.Sprintf("http://%s/%s.git", g.externalHost, repoName),
90+
ClusterCloneURL: fmt.Sprintf("http://%s.%s.svc.cluster.local/%s.git", svcName, g.namespace, repoName),
10191
}
10292
return gitRepo
10393
}
10494

10595
func (g *GitTestServerKnativeProvider) DeleteRepository(repoName string) {
106-
cmdResult := g.Kubectl.Exec("exec", g.PodName, "-c", "user-container", "--", "git-repo", "delete", repoName)
96+
cmdResult := g.Kubectl.Exec("exec", podName, "--", "git-repo", "delete", repoName)
10797
if !strings.Contains(cmdResult.Out, "deleted") {
10898
g.t.Fatal("unable to delete git bare repository " + repoName)
10999
}

0 commit comments

Comments
 (0)