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
+}

Reply via email to