summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMayra Cabrera <mcabrera@gitlab.com>2019-03-20 11:27:16 -0600
committerMayra Cabrera <mcabrera@gitlab.com>2019-03-21 14:59:43 -0600
commit062e7e9c308fb8dafd791b1c21a66b53946410f1 (patch)
tree3a6201dffa4f33e2d788fca979846fa7dbd7dedf
parent4c6219d2e61301c40bbcf0d255b8693ac65672f2 (diff)
downloadgitlab-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
-rw-r--r--spec/requests/api/project_clusters_spec.rb22
-rw-r--r--spec/services/clusters/gcp/finalize_creation_service_spec.rb27
-rw-r--r--spec/services/clusters/gcp/kubernetes/create_or_update_namespace_service_spec.rb29
-rw-r--r--spec/services/clusters/gcp/kubernetes/create_or_update_service_account_service_spec.rb36
-rw-r--r--spec/support/helpers/clusters_helpers.rb68
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