diff options
author | Mayra Cabrera <mcabrera@gitlab.com> | 2019-03-20 11:27:16 -0600 |
---|---|---|
committer | Mayra Cabrera <mcabrera@gitlab.com> | 2019-03-21 14:59:43 -0600 |
commit | 062e7e9c308fb8dafd791b1c21a66b53946410f1 (patch) | |
tree | 3a6201dffa4f33e2d788fca979846fa7dbd7dedf | |
parent | 4c6219d2e61301c40bbcf0d255b8693ac65672f2 (diff) | |
download | gitlab-ce-55764-consolidate-kubernetes-stub-calls-in-helper.tar.gz |
Reduces duplication on kubernetes stub calls55764-consolidate-kubernetes-stub-calls-in-helper
Consolidates Kubernetes stub calls into a single method, reducing
duplicated code among specs.
Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/55764
5 files changed, 101 insertions, 81 deletions
diff --git a/spec/requests/api/project_clusters_spec.rb b/spec/requests/api/project_clusters_spec.rb index 4e42e233b4c..5159f99ca83 100644 --- a/spec/requests/api/project_clusters_spec.rb +++ b/spec/requests/api/project_clusters_spec.rb @@ -3,6 +3,7 @@ require 'spec_helper' describe API::ProjectClusters do + include ClustersHelpers include KubernetesHelpers let(:current_user) { create(:user) } @@ -148,23 +149,12 @@ describe API::ProjectClusters do shared_context 'kubernetes calls stubbed' do before do - stub_kubeclient_discover(api_url) - stub_kubeclient_get_namespace(api_url, namespace: namespace) - stub_kubeclient_get_service_account(api_url, "#{namespace}-service-account", namespace: namespace) - stub_kubeclient_put_service_account(api_url, "#{namespace}-service-account", namespace: namespace) - - stub_kubeclient_get_secret( - api_url, - { - metadata_name: "#{namespace}-token", - token: Base64.encode64('sample-token'), - namespace: namespace - } + stub_clusterable_kubernetes_calls( + api_url: api_url, + namespace: namespace, + service_account: "#{namespace}-service-account", + secret_name: "#{namespace}-token" ) - - stub_kubeclient_put_secret(api_url, "#{namespace}-token", namespace: namespace) - stub_kubeclient_get_role_binding(api_url, "gitlab-#{namespace}", namespace: namespace) - stub_kubeclient_put_role_binding(api_url, "gitlab-#{namespace}", namespace: namespace) end end diff --git a/spec/services/clusters/gcp/finalize_creation_service_spec.rb b/spec/services/clusters/gcp/finalize_creation_service_spec.rb index 2664649df47..eab12b348c8 100644 --- a/spec/services/clusters/gcp/finalize_creation_service_spec.rb +++ b/spec/services/clusters/gcp/finalize_creation_service_spec.rb @@ -4,7 +4,7 @@ require 'spec_helper' describe Clusters::Gcp::FinalizeCreationService, '#execute' do include GoogleApi::CloudPlatformHelpers - include KubernetesHelpers + include ClustersHelpers let(:cluster) { create(:cluster, :project, :providing_by_gcp) } let(:provider) { cluster.provider } @@ -43,7 +43,7 @@ describe Clusters::Gcp::FinalizeCreationService, '#execute' do expect(platform.token).to eq(token) end - it 'calls ClusterConfigureWorker in a ascync fashion' do + it 'calls ClusterConfigureWorker in a async fashion' do expect(ClusterConfigureWorker).to receive(:perform_async).with(cluster.id) subject @@ -61,7 +61,8 @@ describe Clusters::Gcp::FinalizeCreationService, '#execute' do shared_examples 'kubernetes information not successfully fetched' do context 'when failed to fetch gke cluster info' do before do - stub_cloud_platform_get_zone_cluster_error(provider.gcp_project_id, provider.zone, cluster.name) + stub_cloud_platform_get_zone_cluster_error( + provider.gcp_project_id, provider.zone, cluster.name) end it_behaves_like 'error' @@ -101,22 +102,7 @@ describe Clusters::Gcp::FinalizeCreationService, '#execute' do } ) - stub_kubeclient_discover(api_url) - stub_kubeclient_get_namespace(api_url) - stub_kubeclient_create_namespace(api_url) - stub_kubeclient_get_service_account_error(api_url, 'gitlab') - stub_kubeclient_create_service_account(api_url) - stub_kubeclient_create_secret(api_url) - stub_kubeclient_put_secret(api_url, 'gitlab-token') - - stub_kubeclient_get_secret( - api_url, - { - metadata_name: secret_name, - token: Base64.encode64(token), - namespace: 'default' - } - ) + stub_gitlab_kubernetes_calls(api_url: api_url, platform_token: token) end end @@ -143,9 +129,6 @@ describe Clusters::Gcp::FinalizeCreationService, '#execute' do context 'With an RBAC cluster' do before do provider.legacy_abac = false - - stub_kubeclient_get_cluster_role_binding_error(api_url, 'gitlab-admin') - stub_kubeclient_create_cluster_role_binding(api_url) end include_context 'kubernetes information successfully fetched' diff --git a/spec/services/clusters/gcp/kubernetes/create_or_update_namespace_service_spec.rb b/spec/services/clusters/gcp/kubernetes/create_or_update_namespace_service_spec.rb index 18f218fc236..1c218b5f00b 100644 --- a/spec/services/clusters/gcp/kubernetes/create_or_update_namespace_service_spec.rb +++ b/spec/services/clusters/gcp/kubernetes/create_or_update_namespace_service_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' describe Clusters::Gcp::Kubernetes::CreateOrUpdateNamespaceService, '#execute' do - include KubernetesHelpers + include ClustersHelpers let(:cluster) { create(:cluster, :project, :provided_by_gcp) } let(:platform) { cluster.platform } @@ -20,28 +20,11 @@ describe Clusters::Gcp::Kubernetes::CreateOrUpdateNamespaceService, '#execute' d end before do - stub_kubeclient_discover(api_url) - stub_kubeclient_get_namespace(api_url) - stub_kubeclient_get_service_account_error(api_url, 'gitlab') - stub_kubeclient_create_service_account(api_url) - stub_kubeclient_get_secret_error(api_url, 'gitlab-token') - stub_kubeclient_create_secret(api_url) - - stub_kubeclient_get_role_binding(api_url, "gitlab-#{namespace}", namespace: namespace) - stub_kubeclient_put_role_binding(api_url, "gitlab-#{namespace}", namespace: namespace) - stub_kubeclient_get_namespace(api_url, namespace: namespace) - stub_kubeclient_get_service_account_error(api_url, "#{namespace}-service-account", namespace: namespace) - stub_kubeclient_create_service_account(api_url, namespace: namespace) - stub_kubeclient_create_secret(api_url, namespace: namespace) - stub_kubeclient_put_secret(api_url, "#{namespace}-token", namespace: namespace) - - stub_kubeclient_get_secret( - api_url, - { - metadata_name: "#{namespace}-token", - token: Base64.encode64('sample-token'), - namespace: namespace - } + stub_clusterable_kubernetes_calls( + api_url: api_url, + namespace: namespace, + service_account: "#{namespace}-service-account", + secret_name: "#{namespace}-token" ) end diff --git a/spec/services/clusters/gcp/kubernetes/create_or_update_service_account_service_spec.rb b/spec/services/clusters/gcp/kubernetes/create_or_update_service_account_service_spec.rb index 11a65d0c300..45d8ce57f22 100644 --- a/spec/services/clusters/gcp/kubernetes/create_or_update_service_account_service_spec.rb +++ b/spec/services/clusters/gcp/kubernetes/create_or_update_service_account_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' describe Clusters::Gcp::Kubernetes::CreateOrUpdateServiceAccountService do - include KubernetesHelpers + include ClustersHelpers let(:api_url) { 'http://111.111.111.111' } let(:platform_kubernetes) { cluster.platform_kubernetes } @@ -52,17 +52,6 @@ describe Clusters::Gcp::Kubernetes::CreateOrUpdateServiceAccountService do end end - before do - stub_kubeclient_discover(api_url) - stub_kubeclient_get_namespace(api_url, namespace: namespace) - - stub_kubeclient_get_service_account_error(api_url, service_account_name, namespace: namespace) - stub_kubeclient_create_service_account(api_url, namespace: namespace) - - stub_kubeclient_get_secret_error(api_url, token_name, namespace: namespace) - stub_kubeclient_create_secret(api_url, namespace: namespace) - end - describe '.gitlab_creator' do let(:namespace) { 'default' } let(:service_account_name) { 'gitlab' } @@ -70,6 +59,10 @@ describe Clusters::Gcp::Kubernetes::CreateOrUpdateServiceAccountService do subject { described_class.gitlab_creator(kubeclient, rbac: rbac).execute } + before do + stub_gitlab_kubernetes_calls(api_url: api_url, platform_token: 'gitlab-token') + end + context 'with ABAC cluster' do let(:rbac) { false } @@ -78,13 +71,9 @@ describe Clusters::Gcp::Kubernetes::CreateOrUpdateServiceAccountService do context 'with RBAC cluster' do let(:rbac) { true } - let(:cluster_role_binding_name) { 'gitlab-admin' } before do cluster.platform_kubernetes.rbac! - - stub_kubeclient_get_cluster_role_binding_error(api_url, cluster_role_binding_name) - stub_kubeclient_create_cluster_role_binding(api_url) end it_behaves_like 'creates service account and token' @@ -128,6 +117,17 @@ describe Clusters::Gcp::Kubernetes::CreateOrUpdateServiceAccountService do ).execute end + before do + stub_clusterable_kubernetes_calls( + api_url: api_url, + namespace: namespace, + service_account: service_account_name, + secret_name: token_name + ) + + stub_kubeclient_get_secret_error(api_url, token_name, namespace: namespace) + end + context 'with ABAC cluster' do let(:rbac) { false } @@ -136,13 +136,9 @@ describe Clusters::Gcp::Kubernetes::CreateOrUpdateServiceAccountService do context 'With RBAC enabled cluster' do let(:rbac) { true } - let(:role_binding_name) { "gitlab-#{namespace}"} before do cluster.platform_kubernetes.rbac! - - stub_kubeclient_get_role_binding_error(api_url, role_binding_name, namespace: namespace) - stub_kubeclient_create_role_binding(api_url, namespace: namespace) end it_behaves_like 'creates service account and token' diff --git a/spec/support/helpers/clusters_helpers.rb b/spec/support/helpers/clusters_helpers.rb new file mode 100644 index 00000000000..283b691858f --- /dev/null +++ b/spec/support/helpers/clusters_helpers.rb @@ -0,0 +1,68 @@ +# frozen_string_literal: true + +require_relative 'kubernetes_helpers' + +module ClustersHelpers + include KubernetesHelpers + + def stub_gitlab_kubernetes_calls(api_url:, platform_token: 'gitlab-token') + stub_api_base_calls(api_url) + stub_gitlab_resources_calls(api_url, platform_token) + end + + def stub_clusterable_kubernetes_calls(api_url:, namespace:, service_account:, secret_name:, token: 'sample-token') + stub_gitlab_kubernetes_calls(api_url: api_url) + stub_clusterable_resources_calls(api_url, namespace, service_account, secret_name, token) + end + + private + + def stub_api_base_calls(api_url) + stub_kubeclient_discover(api_url) + stub_kubeclient_get_namespace(api_url) + stub_kubeclient_create_namespace(api_url) + stub_kubeclient_create_service_account(api_url) + stub_kubeclient_create_secret(api_url) + end + + def stub_gitlab_resources_calls(api_url, platform_token) + stub_kubeclient_get_service_account_error(api_url, Clusters::Gcp::Kubernetes::GITLAB_SERVICE_ACCOUNT_NAME) + stub_kubeclient_get_secret( + api_url, + { + metadata_name: Clusters::Gcp::Kubernetes::GITLAB_ADMIN_TOKEN_NAME, + token: Base64.encode64(platform_token) + } + ) + stub_kubeclient_get_secret_error(api_url, platform_token) + stub_kubeclient_put_secret(api_url, Clusters::Gcp::Kubernetes::GITLAB_ADMIN_TOKEN_NAME) + + # Needed for RBAC clusters + stub_kubeclient_get_cluster_role_binding_error(api_url, Clusters::Gcp::Kubernetes::GITLAB_CLUSTER_ROLE_BINDING_NAME) + stub_kubeclient_create_cluster_role_binding(api_url) + end + + def stub_clusterable_resources_calls(api_url, namespace, service_account, secret_name, token) + stub_kubeclient_get_namespace(api_url, namespace: namespace) + stub_kubeclient_get_service_account_error(api_url, service_account, namespace: namespace) + stub_kubeclient_create_service_account(api_url, namespace: namespace) + stub_kubeclient_get_role_binding(api_url, "gitlab-#{namespace}", namespace: namespace) + stub_kubeclient_put_role_binding(api_url, "gitlab-#{namespace}", namespace: namespace) + stub_kubeclient_create_secret(api_url, namespace: namespace) + + stub_kubeclient_get_secret( + api_url, + { + metadata_name: secret_name, + token: Base64.encode64(token), + namespace: namespace + } + ) + + stub_kubeclient_put_secret(api_url, secret_name, namespace: namespace) + + # Needed for RBAC clusters + stub_kubeclient_get_role_binding_error(api_url, "gitlab-#{namespace}", namespace: namespace) + stub_kubeclient_create_role_binding(api_url, namespace: namespace) + end +end |