diff options
author | Shinya Maeda <shinya@gitlab.com> | 2017-10-04 22:40:12 +0900 |
---|---|---|
committer | Shinya Maeda <shinya@gitlab.com> | 2017-10-04 22:40:12 +0900 |
commit | a644f4b829080d603405c6eee73a88e2be5cf929 (patch) | |
tree | f050264bffc9ac43d600747cb3e43d734bc4fd6b /spec | |
parent | ea4af856e49cf5933b6995965fa7d6b922e38c20 (diff) | |
download | gitlab-ce-a644f4b829080d603405c6eee73a88e2be5cf929.tar.gz |
Add spec/models/gcp/cluster_spec.rb
Diffstat (limited to 'spec')
-rw-r--r-- | spec/factories/gcp/cluster.rb | 23 | ||||
-rw-r--r-- | spec/models/gcp/cluster_spec.rb | 266 | ||||
-rw-r--r-- | spec/services/ci/create_cluster_service_spec.rb | 19 | ||||
-rw-r--r-- | spec/services/ci/fetch_gcp_operation_service_spec.rb | 17 | ||||
-rw-r--r-- | spec/services/ci/fetch_kubernetes_token_service_spec.rb | 17 | ||||
-rw-r--r-- | spec/services/ci/finalize_cluster_creation_service_spec.rb | 17 | ||||
-rw-r--r-- | spec/services/ci/integrate_cluster_service_spec.rb | 17 | ||||
-rw-r--r-- | spec/services/ci/provision_cluster_service_spec.rb | 17 | ||||
-rw-r--r-- | spec/services/ci/update_cluster_service_spec.rb | 17 |
9 files changed, 410 insertions, 0 deletions
diff --git a/spec/factories/gcp/cluster.rb b/spec/factories/gcp/cluster.rb new file mode 100644 index 00000000000..ea42c716649 --- /dev/null +++ b/spec/factories/gcp/cluster.rb @@ -0,0 +1,23 @@ +FactoryGirl.define do + factory :gcp_cluster, class: Gcp::Cluster do + project + user + enabled true + gcp_project_id 'gcp-project-12345' + gcp_cluster_name 'test-cluster' + gcp_cluster_zone 'us-central1-a' + gcp_cluster_size 1 + + trait :with_kubernetes_service do + service :kubernetes_service + end + + trait :created_on_gke do + endpoint '111.111.111.111' + ca_cert 'xxxxxx' + kubernetes_token 'xxxxxx' + username 'xxxxxx' + password 'xxxxxx' + end + end +end diff --git a/spec/models/gcp/cluster_spec.rb b/spec/models/gcp/cluster_spec.rb new file mode 100644 index 00000000000..5e4c35e24ff --- /dev/null +++ b/spec/models/gcp/cluster_spec.rb @@ -0,0 +1,266 @@ +require 'spec_helper' + +describe Gcp::Cluster do + it { is_expected.to belong_to(:project) } + it { is_expected.to belong_to(:user) } + it { is_expected.to belong_to(:service) } + + it { is_expected.to validate_presence_of(:gcp_cluster_zone) } + + describe '#default_value_for' do + let(:cluster) { described_class.new } + + it { expect(cluster.gcp_cluster_zone).to eq('us-central1-a') } + it { expect(cluster.gcp_cluster_size).to eq(3) } + it { expect(cluster.gcp_machine_type).to eq('n1-standard-4') } + end + + describe '#validates' do + subject { cluster.valid? } + + context 'when validates gcp_project_id' do + let(:cluster) { build(:gcp_cluster, gcp_project_id: gcp_project_id) } + + context 'when valid' do + let(:gcp_project_id) { 'gcp-project-12345' } + + it { is_expected.to be_truthy } + end + + context 'when empty' do + let(:gcp_project_id) { '' } + + it { is_expected.to be_falsey } + end + + context 'when too long' do + let(:gcp_project_id) { 'A'*64 } + + it { is_expected.to be_falsey } + end + + context 'when includes abnormal character' do + let(:gcp_project_id) { '!!!!!!' } + + it { is_expected.to be_falsey } + end + end + + context 'when validates gcp_cluster_name' do + let(:cluster) { build(:gcp_cluster, gcp_cluster_name: gcp_cluster_name) } + + context 'when valid' do + let(:gcp_cluster_name) { 'test-cluster' } + + it { is_expected.to be_truthy } + end + + context 'when empty' do + let(:gcp_cluster_name) { '' } + + it { is_expected.to be_falsey } + end + + context 'when too long' do + let(:gcp_cluster_name) { 'A'*64 } + + it { is_expected.to be_falsey } + end + + context 'when includes abnormal character' do + let(:gcp_cluster_name) { '!!!!!!' } + + it { is_expected.to be_falsey } + end + end + + context 'when validates gcp_cluster_size' do + let(:cluster) { build(:gcp_cluster, gcp_cluster_size: gcp_cluster_size) } + + context 'when valid' do + let(:gcp_cluster_size) { 1 } + + it { is_expected.to be_truthy } + end + + context 'when zero' do + let(:gcp_cluster_size) { 0 } + + it { is_expected.to be_falsey } + end + end + + context 'when validates project_namespace' do + let(:cluster) { build(:gcp_cluster, project_namespace: project_namespace) } + + context 'when valid' do + let(:project_namespace) { 'default-namespace' } + + it { is_expected.to be_truthy } + end + + context 'when empty' do + let(:project_namespace) { '' } + + it { is_expected.to be_truthy } + end + + context 'when too long' do + let(:project_namespace) { 'A'*64 } + + it { is_expected.to be_falsey } + end + + context 'when includes abnormal character' do + let(:project_namespace) { '!!!!!!' } + + it { is_expected.to be_falsey } + end + end + + context 'when validates restrict_modification' do + let(:cluster) { create(:gcp_cluster) } + + before do + cluster.creating! + end + + context 'when created' do + before do + cluster.created! + end + + it { is_expected.to be_truthy } + end + + context 'when creating' do + it { is_expected.to be_falsey } + end + end + end + + describe '#state_machine' do + let(:cluster) { build(:gcp_cluster) } + + context 'when transits to created state' do + before do + cluster.gcp_token = 'tmp' + cluster.gcp_operation_id = 'tmp' + cluster.make_created! + end + + it 'nullify gcp_token and gcp_operation_id' do + expect(cluster.gcp_token).to be_nil + expect(cluster.gcp_operation_id).to be_nil + expect(cluster).to be_created + end + end + + context 'when transits to errored state' do + let(:reason) { 'something wrong' } + + before do + cluster.make_errored!(reason) + end + + it 'sets status_reason' do + expect(cluster.status_reason).to eq(reason) + expect(cluster).to be_errored + end + end + end + + describe '#project_namespace_placeholder' do + subject { cluster.project_namespace_placeholder } + + let(:cluster) { create(:gcp_cluster) } + + it 'returns a placeholder' do + is_expected.to eq("#{cluster.project.path}-#{cluster.project.id}") + end + end + + describe '#on_creation?' do + subject { cluster.on_creation? } + + let(:cluster) { create(:gcp_cluster) } + + context 'when status is creating' do + before do + cluster.make_creating! + end + + it { is_expected.to be_truthy } + end + + context 'when status is created' do + before do + cluster.make_created! + end + + it { is_expected.to be_falsey } + end + end + + describe '#api_url' do + subject { cluster.api_url } + + let(:cluster) { create(:gcp_cluster, :created_on_gke) } + let(:api_url) { 'https://' + cluster.endpoint } + + it { is_expected.to eq(api_url) } + end + + describe '#restrict_modification' do + subject { cluster.restrict_modification } + + let(:cluster) { create(:gcp_cluster) } + + context 'when status is created' do + before do + cluster.make_created! + end + + it { is_expected.to be_truthy } + end + + context 'when status is creating' do + before do + cluster.make_creating! + end + + it { is_expected.to be_falsey } + + it 'sets error' do + is_expected.to be_falsey + expect(cluster.errors).not_to be_empty + end + end + end + + describe '#destroy' do + subject { cluster.destroy } + + let(:cluster) { create(:gcp_cluster) } + + context 'when status is created' do + before do + cluster.make_created! + end + + it 'destory the cluster' do + is_expected.to eq(cluster) + end + end + + context 'when status is creating' do + before do + cluster.make_creating! + end + + it 'does not destory the cluster' do + is_expected.to be_nil + end + end + end +end diff --git a/spec/services/ci/create_cluster_service_spec.rb b/spec/services/ci/create_cluster_service_spec.rb new file mode 100644 index 00000000000..eaa27eb4cc3 --- /dev/null +++ b/spec/services/ci/create_cluster_service_spec.rb @@ -0,0 +1,19 @@ +require 'spec_helper' + +describe Ci::CreateClusterService do + describe '#execute' do + let(:access_token) { 'xxx' } + + context 'when correct params' do + it 'creates a cluster object' do + + end + end + + context 'when invalid params' do + it 'returns an error' do + + end + end + end +end diff --git a/spec/services/ci/fetch_gcp_operation_service_spec.rb b/spec/services/ci/fetch_gcp_operation_service_spec.rb new file mode 100644 index 00000000000..13141d81ab8 --- /dev/null +++ b/spec/services/ci/fetch_gcp_operation_service_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe Ci::FetchGcpOperationService do + describe '#execute' do + context 'when correct params' do + it 'fetch the gcp operaion' do + + end + end + + context 'when invalid params' do + it 'sets an error to cluster object' do + + end + end + end +end diff --git a/spec/services/ci/fetch_kubernetes_token_service_spec.rb b/spec/services/ci/fetch_kubernetes_token_service_spec.rb new file mode 100644 index 00000000000..b66b5a7947d --- /dev/null +++ b/spec/services/ci/fetch_kubernetes_token_service_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe Ci::FetchKubernetesTokenService do + describe '#execute' do + context 'when correct params' do + it 'fetch the kubernetes token' do + + end + end + + context 'when invalid params' do + it 'returns nil' do + + end + end + end +end diff --git a/spec/services/ci/finalize_cluster_creation_service_spec.rb b/spec/services/ci/finalize_cluster_creation_service_spec.rb new file mode 100644 index 00000000000..81af15942c0 --- /dev/null +++ b/spec/services/ci/finalize_cluster_creation_service_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe Ci::FinalizeClusterCreationService do + describe '#execute' do + context 'when correct params' do + it 'execute IntegrateClusterService' do + + end + end + + context 'when invalid params' do + it 'returns a cluster object with error' do + + end + end + end +end diff --git a/spec/services/ci/integrate_cluster_service_spec.rb b/spec/services/ci/integrate_cluster_service_spec.rb new file mode 100644 index 00000000000..7a8c80ca4e7 --- /dev/null +++ b/spec/services/ci/integrate_cluster_service_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe Ci::IntegrateClusterService do + describe '#execute' do + context 'when correct params' do + it 'creates a cluster object' do + + end + end + + context 'when invalid params' do + it 'returns a cluster object with error' do + + end + end + end +end diff --git a/spec/services/ci/provision_cluster_service_spec.rb b/spec/services/ci/provision_cluster_service_spec.rb new file mode 100644 index 00000000000..d1595c8917d --- /dev/null +++ b/spec/services/ci/provision_cluster_service_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe Ci::ProvisionClusterService do + describe '#execute' do + context 'when correct params' do + it 'creates a cluster on gke' do + + end + end + + context 'when invalid params' do + it 'returns a cluster object with error' do + + end + end + end +end diff --git a/spec/services/ci/update_cluster_service_spec.rb b/spec/services/ci/update_cluster_service_spec.rb new file mode 100644 index 00000000000..afe3d418a8e --- /dev/null +++ b/spec/services/ci/update_cluster_service_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe Ci::UpdateClusterService do + describe '#execute' do + context 'when correct params' do + it 'updates the cluster and the service' do + + end + end + + context 'when invalid params' do + it 'returns a cluster object with error' do + + end + end + end +end |