Skip to content

Commit 6ea61f1

Browse files
committed
fix: r
Signed-off-by: Ashing Zheng <[email protected]>
1 parent c168633 commit 6ea61f1

File tree

7 files changed

+189
-31
lines changed

7 files changed

+189
-31
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ require (
2929
go.uber.org/zap v1.27.0
3030
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56
3131
golang.org/x/net v0.28.0
32+
gopkg.in/yaml.v2 v2.4.0
3233
gopkg.in/yaml.v3 v3.0.1
3334
helm.sh/helm/v3 v3.15.4
3435
k8s.io/api v0.31.1
@@ -206,7 +207,6 @@ require (
206207
gopkg.in/fsnotify.v1 v1.4.7 // indirect
207208
gopkg.in/inf.v0 v0.9.1 // indirect
208209
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
209-
gopkg.in/yaml.v2 v2.4.0 // indirect
210210
k8s.io/apiserver v0.31.1 // indirect
211211
k8s.io/cli-runtime v0.30.3 // indirect
212212
k8s.io/component-base v0.31.1 // indirect

internal/controller/gatewayproxy_controller.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,15 +193,18 @@ func (r *GatewayProxyController) Reconcile(ctx context.Context, req ctrl.Request
193193
}
194194

195195
func (r *GatewayProxyController) listGatewayProxiesForProviderService(ctx context.Context, obj client.Object) (requests []reconcile.Request) {
196+
r.Log.Info("listGatewayProxiesForProviderService", "obj", obj.GetName())
196197
service, ok := obj.(*corev1.Service)
197198
if !ok {
198199
r.Log.Error(errors.New("unexpected object type"), "failed to convert object to Service")
199200
return nil
200201
}
201202

202-
return ListRequests(ctx, r.Client, r.Log, &v1alpha1.GatewayProxyList{}, client.MatchingFields{
203+
requests = ListRequests(ctx, r.Client, r.Log, &v1alpha1.GatewayProxyList{}, client.MatchingFields{
203204
indexer.ServiceIndexRef: indexer.GenIndexKey(service.GetNamespace(), service.GetName()),
204205
})
206+
r.Log.Info("listGatewayProxiesForProviderService", "requests", requests)
207+
return requests
205208
}
206209

207210
func (r *GatewayProxyController) listGatewayProxiesForProviderEndpointSlice(ctx context.Context, obj client.Object) (requests []reconcile.Request) {

test/e2e/crds/v1alpha1/consumer.go

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,11 @@
1818
package v1alpha1
1919

2020
import (
21-
"context"
2221
"fmt"
2322
"time"
2423

2524
. "github.com/onsi/ginkgo/v2"
2625
. "github.com/onsi/gomega"
27-
"k8s.io/apimachinery/pkg/util/wait"
2826

2927
"github.com/apache/apisix-ingress-controller/internal/provider/adc"
3028
"github.com/apache/apisix-ingress-controller/test/e2e/framework"
@@ -675,16 +673,6 @@ spec:
675673
s.Deployer.ScaleDataplane(1)
676674
s.Deployer.ScaleIngress(1)
677675

678-
By("check pod ready")
679-
err := wait.PollUntilContextTimeout(context.Background(), time.Second, 60*time.Second, true, func(ctx context.Context) (done bool, err error) {
680-
endpoints := s.GetEndpoints(s.Namespace(), framework.ProviderType)
681-
if len(endpoints.Subsets) != 1 || len(endpoints.Subsets[0].Addresses) != 1 {
682-
return false, nil
683-
}
684-
return true, nil
685-
})
686-
Expect(err).NotTo(HaveOccurred(), "check pods ready")
687-
688676
By("check consumer sync")
689677
s.RequestAssert(&scaffold.RequestAssert{
690678
Method: "GET",
@@ -693,7 +681,8 @@ spec:
693681
Headers: map[string]string{
694682
"apikey": "sample-key",
695683
},
696-
Check: scaffold.WithExpectedStatus(200),
684+
Timeout: 1 * time.Minute,
685+
Check: scaffold.WithExpectedStatus(200),
697686
})
698687

699688
s.RequestAssert(&scaffold.RequestAssert{

test/e2e/crds/v2/route.go

Lines changed: 65 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,69 @@ var _ = Describe("Test ApisixRoute", Label("apisix.apache.org", "v2", "apisixrou
4444
applier = framework.NewApplier(s.GinkgoT, s.K8sClient, s.CreateResourceFromString)
4545
)
4646

47+
var gatewayProxyYaml = `
48+
apiVersion: apisix.apache.org/v1alpha1
49+
kind: GatewayProxy
50+
metadata:
51+
name: apisix-proxy-config
52+
spec:
53+
provider:
54+
type: ControlPlane
55+
controlPlane:
56+
service:
57+
name: %s
58+
port: 9180
59+
auth:
60+
type: AdminKey
61+
adminKey:
62+
value: "%s"
63+
`
64+
var gatewayProxyYamlAPI7 = `
65+
apiVersion: apisix.apache.org/v1alpha1
66+
kind: GatewayProxy
67+
metadata:
68+
name: apisix-proxy-config
69+
spec:
70+
provider:
71+
type: ControlPlane
72+
controlPlane:
73+
endpoints:
74+
- %s
75+
auth:
76+
type: AdminKey
77+
adminKey:
78+
value: "%s"
79+
`
80+
getGatewayProxySpec := func() string {
81+
if s.Deployer.Name() == adc.BackendModeAPI7EE {
82+
return fmt.Sprintf(gatewayProxyYamlAPI7, s.Deployer.GetAdminEndpoint(), s.AdminKey())
83+
}
84+
return fmt.Sprintf(gatewayProxyYaml, framework.ProviderType, s.AdminKey())
85+
}
86+
87+
const ingressClassYaml = `
88+
apiVersion: networking.k8s.io/%s
89+
kind: IngressClass
90+
metadata:
91+
name: apisix
92+
spec:
93+
controller: "apisix.apache.org/apisix-ingress-controller"
94+
parameters:
95+
apiGroup: "apisix.apache.org"
96+
kind: "GatewayProxy"
97+
name: "apisix-proxy-config"
98+
scope: Namespace
99+
namespace: %s
100+
`
47101
BeforeEach(func() {
48102
By("create GatewayProxy")
49-
gatewayProxy := fmt.Sprintf(gatewayProxyYaml, s.Deployer.GetAdminEndpoint(), s.AdminKey())
50-
err := s.CreateResourceFromStringWithNamespace(gatewayProxy, "default")
103+
err := s.CreateResourceFromString(getGatewayProxySpec())
51104
Expect(err).NotTo(HaveOccurred(), "creating GatewayProxy")
52105
time.Sleep(5 * time.Second)
53106

54107
By("create IngressClass")
55-
ingressClass := fmt.Sprintf(ingressClassYaml, framework.IngressVersion)
56-
err = s.CreateResourceFromStringWithNamespace(ingressClass, "")
108+
ingressClass := fmt.Sprintf(ingressClassYaml, framework.IngressVersion, s.Namespace())
109+
err = s.CreateResourceFromString(ingressClass)
57110
Expect(err).NotTo(HaveOccurred(), "creating IngressClass")
58111
time.Sleep(5 * time.Second)
59112
})
@@ -714,6 +767,9 @@ spec:
714767
servicePort: 80
715768
`
716769
It("Should sync ApisixRoute during startup", func() {
770+
if s.Deployer.Name() == adc.BackendModeAPI7EE {
771+
Skip("skipping test in API7EE mode")
772+
}
717773
By("apply ApisixRoute")
718774
Expect(s.CreateResourceFromString(route2)).ShouldNot(HaveOccurred(), "apply ApisixRoute with nonexistent ingressClassName")
719775
Expect(s.CreateResourceFromString(route3)).ShouldNot(HaveOccurred(), "apply ApisixRoute without ingressClassName")
@@ -745,10 +801,11 @@ spec:
745801
s.Deployer.ScaleIngress(1)
746802

747803
s.RequestAssert(&scaffold.RequestAssert{
748-
Method: "GET",
749-
Path: "/get",
750-
Host: "httpbin",
751-
Check: scaffold.WithExpectedStatus(http.StatusOK),
804+
Method: "GET",
805+
Path: "/get",
806+
Host: "httpbin",
807+
Timeout: 1 * time.Minute,
808+
Check: scaffold.WithExpectedStatus(http.StatusOK),
752809
})
753810
s.RequestAssert(&scaffold.RequestAssert{
754811
Method: "GET",

test/e2e/crds/v2/status.go

Lines changed: 85 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525

2626
. "github.com/onsi/ginkgo/v2"
2727
. "github.com/onsi/gomega"
28+
corev1 "k8s.io/api/core/v1"
2829
"k8s.io/apimachinery/pkg/types"
2930
"sigs.k8s.io/yaml"
3031

@@ -42,16 +43,71 @@ var _ = Describe("Test apisix.apache.org/v2 Status", Label("apisix.apache.org",
4243
applier = framework.NewApplier(s.GinkgoT, s.K8sClient, s.CreateResourceFromString)
4344
)
4445

46+
var gatewayProxyYaml = `
47+
apiVersion: apisix.apache.org/v1alpha1
48+
kind: GatewayProxy
49+
metadata:
50+
name: apisix-proxy-config
51+
spec:
52+
provider:
53+
type: ControlPlane
54+
controlPlane:
55+
service:
56+
name: %s
57+
port: 9180
58+
auth:
59+
type: AdminKey
60+
adminKey:
61+
value: "%s"
62+
`
63+
64+
var gatewayProxyYamlAPI7 = `
65+
apiVersion: apisix.apache.org/v1alpha1
66+
kind: GatewayProxy
67+
metadata:
68+
name: apisix-proxy-config
69+
spec:
70+
provider:
71+
type: ControlPlane
72+
controlPlane:
73+
endpoints:
74+
- %s
75+
auth:
76+
type: AdminKey
77+
adminKey:
78+
value: "%s"
79+
`
80+
getGatewayProxySpec := func() string {
81+
if s.Deployer.Name() == adc.BackendModeAPI7EE {
82+
return fmt.Sprintf(gatewayProxyYamlAPI7, s.Deployer.GetAdminEndpoint(), s.AdminKey())
83+
}
84+
return fmt.Sprintf(gatewayProxyYaml, framework.ProviderType, s.AdminKey())
85+
}
86+
4587
Context("Test ApisixRoute Sync Status", func() {
4688
BeforeEach(func() {
4789
By("create GatewayProxy")
48-
gatewayProxy := fmt.Sprintf(gatewayProxyYaml, s.Deployer.GetAdminEndpoint(), s.AdminKey())
49-
err := s.CreateResourceFromStringWithNamespace(gatewayProxy, "default")
90+
gatewayProxy := getGatewayProxySpec()
91+
err := s.CreateResourceFromString(gatewayProxy)
5092
Expect(err).NotTo(HaveOccurred(), "creating GatewayProxy")
5193
time.Sleep(5 * time.Second)
5294

5395
By("create IngressClass")
54-
ingressClass := fmt.Sprintf(ingressClassYaml, framework.IngressVersion)
96+
const ingressClassYaml = `
97+
apiVersion: networking.k8s.io/%s
98+
kind: IngressClass
99+
metadata:
100+
name: apisix
101+
spec:
102+
controller: "apisix.apache.org/apisix-ingress-controller"
103+
parameters:
104+
apiGroup: "apisix.apache.org"
105+
kind: "GatewayProxy"
106+
name: "apisix-proxy-config"
107+
scope: Namespace
108+
namespace: %s
109+
`
110+
ingressClass := fmt.Sprintf(ingressClassYaml, framework.IngressVersion, s.Namespace())
55111
err = s.CreateResourceFromStringWithNamespace(ingressClass, "")
56112
Expect(err).NotTo(HaveOccurred(), "creating IngressClass")
57113
time.Sleep(5 * time.Second)
@@ -157,7 +213,22 @@ spec:
157213
Check: scaffold.WithExpectedStatus(200),
158214
})
159215

160-
s.Deployer.ScaleDataplane(0)
216+
By("get yaml from service")
217+
serviceYaml, err := s.GetOutputFromString("svc", framework.ProviderType, "-o", "yaml")
218+
Expect(err).NotTo(HaveOccurred(), "getting service yaml")
219+
By("update service to type ExternalName with invalid host")
220+
var k8sservice corev1.Service
221+
err = yaml.Unmarshal([]byte(serviceYaml), &k8sservice)
222+
Expect(err).NotTo(HaveOccurred(), "unmarshalling service")
223+
oldSpec := k8sservice.Spec
224+
k8sservice.Spec = corev1.ServiceSpec{
225+
Type: corev1.ServiceTypeExternalName,
226+
ExternalName: "invalid.host",
227+
}
228+
newServiceYaml, err := yaml.Marshal(k8sservice)
229+
Expect(err).NotTo(HaveOccurred(), "marshalling service")
230+
err = s.CreateResourceFromString(string(newServiceYaml))
231+
Expect(err).NotTo(HaveOccurred(), "creating service")
161232

162233
By("check ApisixRoute status")
163234
s.RetryAssertion(func() string {
@@ -171,7 +242,16 @@ spec:
171242
),
172243
)
173244

174-
s.Deployer.ScaleDataplane(1)
245+
By("update service to original spec")
246+
serviceYaml, err = s.GetOutputFromString("svc", framework.ProviderType, "-o", "yaml")
247+
Expect(err).NotTo(HaveOccurred(), "getting service yaml")
248+
err = yaml.Unmarshal([]byte(serviceYaml), &k8sservice)
249+
Expect(err).NotTo(HaveOccurred(), "unmarshalling service")
250+
k8sservice.Spec = oldSpec
251+
newServiceYaml, err = yaml.Marshal(k8sservice)
252+
Expect(err).NotTo(HaveOccurred(), "marshalling service")
253+
err = s.CreateResourceFromString(string(newServiceYaml))
254+
Expect(err).NotTo(HaveOccurred(), "creating service")
175255

176256
By("check ApisixRoute status after scaling up")
177257
s.RetryAssertion(func() string {

test/e2e/gatewayapi/status.go

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,11 @@ import (
2424

2525
. "github.com/onsi/ginkgo/v2"
2626
. "github.com/onsi/gomega"
27+
"gopkg.in/yaml.v2"
28+
corev1 "k8s.io/api/core/v1"
2729

2830
"github.com/apache/apisix-ingress-controller/internal/provider/adc"
31+
"github.com/apache/apisix-ingress-controller/test/e2e/framework"
2932
"github.com/apache/apisix-ingress-controller/test/e2e/scaffold"
3033
)
3134

@@ -140,7 +143,22 @@ spec:
140143
Check: scaffold.WithExpectedStatus(200),
141144
})
142145

143-
s.Deployer.ScaleDataplane(0)
146+
By("get yaml from service")
147+
serviceYaml, err := s.GetOutputFromString("svc", framework.ProviderType, "-o", "yaml")
148+
Expect(err).NotTo(HaveOccurred(), "getting service yaml")
149+
By("update service to type ExternalName with invalid host")
150+
var k8sservice corev1.Service
151+
err = yaml.Unmarshal([]byte(serviceYaml), &k8sservice)
152+
Expect(err).NotTo(HaveOccurred(), "unmarshalling service")
153+
oldSpec := k8sservice.Spec
154+
k8sservice.Spec = corev1.ServiceSpec{
155+
Type: corev1.ServiceTypeExternalName,
156+
ExternalName: "invalid.host",
157+
}
158+
newServiceYaml, err := yaml.Marshal(k8sservice)
159+
Expect(err).NotTo(HaveOccurred(), "marshalling service")
160+
err = s.CreateResourceFromString(string(newServiceYaml))
161+
Expect(err).NotTo(HaveOccurred(), "creating service")
144162

145163
By("check ApisixRoute status")
146164
s.RetryAssertion(func() string {
@@ -154,7 +172,16 @@ spec:
154172
),
155173
)
156174

157-
s.Deployer.ScaleDataplane(1)
175+
By("update service to original spec")
176+
serviceYaml, err = s.GetOutputFromString("svc", framework.ProviderType, "-o", "yaml")
177+
Expect(err).NotTo(HaveOccurred(), "getting service yaml")
178+
err = yaml.Unmarshal([]byte(serviceYaml), &k8sservice)
179+
Expect(err).NotTo(HaveOccurred(), "unmarshalling service")
180+
k8sservice.Spec = oldSpec
181+
newServiceYaml, err = yaml.Marshal(k8sservice)
182+
Expect(err).NotTo(HaveOccurred(), "marshalling service")
183+
err = s.CreateResourceFromString(string(newServiceYaml))
184+
Expect(err).NotTo(HaveOccurred(), "creating service")
158185

159186
By("check ApisixRoute status after scaling up")
160187
s.RetryAssertion(func() string {

test/e2e/scaffold/assertion.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,9 @@ func WithExpectedHeaders(expectedHeaders map[string]string) ResponseCheckFunc {
150150
}
151151

152152
func (s *Scaffold) RequestAssert(r *RequestAssert) bool {
153-
r.Client = s.NewAPISIXClient()
153+
if r.Client == nil {
154+
r.Client = s.NewAPISIXClient()
155+
}
154156
if r.Method == "" {
155157
if len(r.Body) > 0 {
156158
r.Method = "POST"

0 commit comments

Comments
 (0)