This is an automated email from the ASF dual-hosted git repository. tsato pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 69ded0727210195e9250b9b81839490ea50e4de6 Author: phantomjinx <[email protected]> AuthorDate: Mon Oct 3 21:58:53 2022 +0100 fix(e2e): Replaces update scale with patch scale * The use of UpdateScale is unreliable in producing the well-known error "the object has been modified; please apply your changes to the latest version and try again". * Replacing UpdateScale with PatchScale avoids this error and allows the test to continue successfully --- e2e/global/common/scale_integration_test.go | 12 +++++++++--- e2e/support/test_support.go | 7 +++++++ .../versioned/typed/camel/v1/fake/fake_integration.go | 10 ++++++++++ .../clientset/versioned/typed/camel/v1/integration.go | 16 ++++++++++++++++ 4 files changed, 42 insertions(+), 3 deletions(-) diff --git a/e2e/global/common/scale_integration_test.go b/e2e/global/common/scale_integration_test.go index e9789f2ce..504e374d8 100644 --- a/e2e/global/common/scale_integration_test.go +++ b/e2e/global/common/scale_integration_test.go @@ -23,6 +23,7 @@ limitations under the License. package common import ( + "encoding/json" "fmt" "testing" @@ -95,9 +96,14 @@ func TestIntegrationScale(t *testing.T) { Expect(integrationScale.Spec.Replicas).To(BeNumerically("==", 2)) Expect(integrationScale.Status.Replicas).To(BeNumerically("==", 2)) - // Setter - integrationScale.Spec.Replicas = 1 - integrationScale, err = camel.CamelV1().Integrations(ns).UpdateScale(TestContext, name, integrationScale, metav1.UpdateOptions{}) + payload := []PatchUInt32Value{{ + Op: "replace", + Path: "/spec/replicas", + Value: 1, + }} + payloadBytes, _ := json.Marshal(payload) + + integrationScale, err = camel.CamelV1().Integrations(ns).PatchScale(TestContext, name, types.JSONPatchType, payloadBytes, metav1.PatchOptions{}) Expect(err).To(BeNil()) // Check the readiness condition is still truthy as down-scaling diff --git a/e2e/support/test_support.go b/e2e/support/test_support.go index d363b620c..7cee2a0b8 100644 --- a/e2e/support/test_support.go +++ b/e2e/support/test_support.go @@ -102,6 +102,13 @@ var NoOlmOperatorImage string var TestContext context.Context var testClient client.Client +// patchUint32Value specifies a patch operation for a uint32. +type PatchUInt32Value struct { + Op string `json:"op"` + Path string `json:"path"` + Value uint32 `json:"value"` +} + var testLocus *testing.T func setTestLocus(t *testing.T) { diff --git a/pkg/client/camel/clientset/versioned/typed/camel/v1/fake/fake_integration.go b/pkg/client/camel/clientset/versioned/typed/camel/v1/fake/fake_integration.go index 0c729b36c..5efa7b05a 100644 --- a/pkg/client/camel/clientset/versioned/typed/camel/v1/fake/fake_integration.go +++ b/pkg/client/camel/clientset/versioned/typed/camel/v1/fake/fake_integration.go @@ -164,3 +164,13 @@ func (c *FakeIntegrations) UpdateScale(ctx context.Context, integrationName stri } return obj.(*autoscalingv1.Scale), err } + +func (c *FakeIntegrations) PatchScale(ctx context.Context, integrationName string, pt types.PatchType, data []byte, opts v1.PatchOptions) (result *autoscalingv1.Scale, err error) { + obj, err := c.Fake. + Invokes(testing.NewPatchSubresourceAction(integrationsResource, c.ns, integrationName, pt, data, "scale"), &autoscalingv1.Scale{}) + + if obj == nil { + return nil, err + } + return obj.(*autoscalingv1.Scale), err +} diff --git a/pkg/client/camel/clientset/versioned/typed/camel/v1/integration.go b/pkg/client/camel/clientset/versioned/typed/camel/v1/integration.go index 47b7d98a1..52696b2c8 100644 --- a/pkg/client/camel/clientset/versioned/typed/camel/v1/integration.go +++ b/pkg/client/camel/clientset/versioned/typed/camel/v1/integration.go @@ -51,6 +51,7 @@ type IntegrationInterface interface { Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Integration, err error) GetScale(ctx context.Context, integrationName string, options metav1.GetOptions) (*autoscalingv1.Scale, error) UpdateScale(ctx context.Context, integrationName string, scale *autoscalingv1.Scale, opts metav1.UpdateOptions) (*autoscalingv1.Scale, error) + PatchScale(ctx context.Context, integrationName string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (result *autoscalingv1.Scale, err error) IntegrationExpansion } @@ -227,3 +228,18 @@ func (c *integrations) UpdateScale(ctx context.Context, integrationName string, Into(result) return } + +// PatchScale takes the top resource name and the representation of a scale and patches it. Returns the server's representation of the scale, and an error, if there is any. +func (c *integrations) PatchScale(ctx context.Context, integrationName string, pt types.PatchType, data []byte, opts metav1.PatchOptions) (result *autoscalingv1.Scale, err error) { + result = &autoscalingv1.Scale{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("integrations"). + Name(integrationName). + SubResource("scale"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +}
