From 9e379cc4edba7fbe4777b6b7267c43eb81cd04cd Mon Sep 17 00:00:00 2001
From: Safwan Ahmed <safahmed@gitlab.com>
Date: Wed, 29 May 2024 02:39:01 +0000
Subject: [PATCH] Revert "Quarantine a flaky test"

This reverts commit bc2d6985c122397bc82cde490e85527af28a1b36.
---
 .../output/response_payload_builder.rb        |  2 +-
 .../reconcile/main_integration_spec.rb        |  3 +-
 .../remote_development_shared_contexts.rb     |  4 +--
 gems/gitlab-utils/lib/gitlab/utils.rb         |  8 +++++
 gems/gitlab-utils/spec/gitlab/utils_spec.rb   | 35 +++++++++++++++++++
 5 files changed, 47 insertions(+), 5 deletions(-)

diff --git a/ee/lib/remote_development/workspaces/reconcile/output/response_payload_builder.rb b/ee/lib/remote_development/workspaces/reconcile/output/response_payload_builder.rb
index a731515d22b7c..5ff98387f1c0e 100644
--- a/ee/lib/remote_development/workspaces/reconcile/output/response_payload_builder.rb
+++ b/ee/lib/remote_development/workspaces/reconcile/output/response_payload_builder.rb
@@ -79,7 +79,7 @@ def self.config_to_apply(workspace:, update_type:, logger:)
               end
 
             desired_config_to_apply_array = workspace_resources.map do |resource|
-              YAML.dump(resource.deep_stringify_keys)
+              YAML.dump(Gitlab::Utils.deep_sort_hash(resource).deep_stringify_keys)
             end
 
             return unless desired_config_to_apply_array.present?
diff --git a/ee/spec/lib/remote_development/workspaces/reconcile/main_integration_spec.rb b/ee/spec/lib/remote_development/workspaces/reconcile/main_integration_spec.rb
index a0df20c35a2f4..e3dcd80082e82 100644
--- a/ee/spec/lib/remote_development/workspaces/reconcile/main_integration_spec.rb
+++ b/ee/spec/lib/remote_development/workspaces/reconcile/main_integration_spec.rb
@@ -568,8 +568,7 @@
 
       let(:expected_workspace_rails_infos) { [expected_unprovisioned_workspace_rails_info] }
 
-      it 'returns proper response payload',
-        quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/457963' do
+      it 'returns proper response payload' do
         # verify initial states in db (sanity check of match between factory and fixtures)
         expect(unprovisioned_workspace.desired_state).to eq(desired_state)
         expect(unprovisioned_workspace.actual_state).to eq(actual_state)
diff --git a/ee/spec/support/shared_contexts/remote_development/remote_development_shared_contexts.rb b/ee/spec/support/shared_contexts/remote_development/remote_development_shared_contexts.rb
index b49ad1346fdbe..8b501768acd77 100644
--- a/ee/spec/support/shared_contexts/remote_development/remote_development_shared_contexts.rb
+++ b/ee/spec/support/shared_contexts/remote_development/remote_development_shared_contexts.rb
@@ -420,7 +420,7 @@ def create_config_to_apply_v3(
     resources << workspace_secret_file if include_all_resources
 
     resources.map do |resource|
-      YAML.dump(resource.deep_stringify_keys)
+      YAML.dump(Gitlab::Utils.deep_sort_hash(resource).deep_stringify_keys)
     end.join
   end
 
@@ -525,7 +525,7 @@ def create_config_to_apply_v2(
     resources << workspace_secret_file if include_all_resources
 
     resources.map do |resource|
-      YAML.dump(resource.deep_stringify_keys)
+      YAML.dump(Gitlab::Utils.deep_sort_hash(resource).deep_stringify_keys)
     end.join
   end
 
diff --git a/gems/gitlab-utils/lib/gitlab/utils.rb b/gems/gitlab-utils/lib/gitlab/utils.rb
index 7f503ba279b22..8ad4ad36b62ff 100644
--- a/gems/gitlab-utils/lib/gitlab/utils.rb
+++ b/gems/gitlab-utils/lib/gitlab/utils.rb
@@ -311,5 +311,13 @@ def to_rails_log_level(input, fallback = nil)
         to_rails_log_level(fallback)
       end
     end
+
+    # Use this method to recursively sort a hash on its keys
+    def deep_sort_hash(hash)
+      hash.keys.sort.each_with_object({}) do |key, sorted_hash|
+        value = hash[key]
+        sorted_hash[key] = value.is_a?(Hash) ? deep_sort_hash(value) : value
+      end
+    end
   end
 end
diff --git a/gems/gitlab-utils/spec/gitlab/utils_spec.rb b/gems/gitlab-utils/spec/gitlab/utils_spec.rb
index a728b73a3a320..68f346345c26b 100644
--- a/gems/gitlab-utils/spec/gitlab/utils_spec.rb
+++ b/gems/gitlab-utils/spec/gitlab/utils_spec.rb
@@ -636,4 +636,39 @@
       end
     end
   end
+
+  describe '.deep_sort_hash' do
+    it 'recursively sorts a hash' do
+      hash = {
+        z: "record-z",
+        e: { y: "nested-record-y", a: "nested-record-a", b: "nested-record-b" },
+        c: {
+          m: {
+            p: "doubly-nested-record-p",
+            o: "doubly-nested-record-o"
+          },
+          k: {
+            v: "doubly-nested-record-v",
+            u: "doubly-nested-record-u"
+          }
+        }
+      }
+      expect(JSON.generate(described_class.deep_sort_hash(hash))).to eq(JSON.generate({
+        c: {
+          k: {
+            u: "doubly-nested-record-u",
+            v: "doubly-nested-record-v"
+          },
+          m: {
+            o: "doubly-nested-record-o",
+            p: "doubly-nested-record-p"
+          }
+
+        },
+        e: { a: "nested-record-a", b: "nested-record-b",
+             y: "nested-record-y" },
+        z: "record-z"
+      }))
+    end
+  end
 end
-- 
GitLab