summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShinya Maeda <shinya@gitlab.com>2017-10-05 01:55:33 +0900
committerShinya Maeda <shinya@gitlab.com>2017-10-05 01:55:33 +0900
commite710e766b042ad0c74536416044ad0af2fdca012 (patch)
tree9b20836c96d68cb64ade01cfe9ecc95ca1cbe517
parent8d9d0f9401269a5718da9d22a1863a4c4ab5f36e (diff)
downloadgitlab-ce-e710e766b042ad0c74536416044ad0af2fdca012.tar.gz
fetch_gcp_operation_service_spec. finalize_cluster_creation_service_spec. wait_for_cluster_creation_worker_spec.
-rw-r--r--spec/services/ci/fetch_gcp_operation_service_spec.rb27
-rw-r--r--spec/services/ci/finalize_cluster_creation_service_spec.rb54
-rw-r--r--spec/workers/wait_for_cluster_creation_worker_spec.rb48
3 files changed, 116 insertions, 13 deletions
diff --git a/spec/services/ci/fetch_gcp_operation_service_spec.rb b/spec/services/ci/fetch_gcp_operation_service_spec.rb
index 13141d81ab8..7792979c5cb 100644
--- a/spec/services/ci/fetch_gcp_operation_service_spec.rb
+++ b/spec/services/ci/fetch_gcp_operation_service_spec.rb
@@ -1,16 +1,35 @@
require 'spec_helper'
+require 'google/apis'
describe Ci::FetchGcpOperationService do
describe '#execute' do
- context 'when correct params' do
+ let(:cluster) { create(:gcp_cluster) }
+ let(:operation) { double }
+
+ context 'when suceeded' do
+ before do
+ allow_any_instance_of(GoogleApi::CloudPlatform::Client)
+ .to receive(:projects_zones_operations).and_return(operation)
+ end
+
it 'fetch the gcp operaion' do
-
+ expect { |b| described_class.new.execute(cluster, &b) }
+ .to yield_with_args(operation)
end
end
- context 'when invalid params' do
- it 'sets an error to cluster object' do
+ context 'when raises an error' do
+ let(:error) { Google::Apis::ServerError.new('a') }
+ before do
+ allow_any_instance_of(GoogleApi::CloudPlatform::Client)
+ .to receive(:projects_zones_operations).and_raise(error)
+ end
+
+ it 'sets an error to cluster object' do
+ expect { |b| described_class.new.execute(cluster, &b) }
+ .not_to yield_with_args
+ expect(cluster.reload).to be_errored
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
index 81af15942c0..def3709fdb4 100644
--- a/spec/services/ci/finalize_cluster_creation_service_spec.rb
+++ b/spec/services/ci/finalize_cluster_creation_service_spec.rb
@@ -2,15 +2,59 @@ require 'spec_helper'
describe Ci::FinalizeClusterCreationService do
describe '#execute' do
- context 'when correct params' do
- it 'execute IntegrateClusterService' do
-
+ let(:cluster) { create(:gcp_cluster) }
+ let(:result) { described_class.new.execute(cluster) }
+
+ context 'when suceeded to get cluster from api' do
+ let(:gke_cluster) { double }
+
+ before do
+ allow(gke_cluster).to receive(:endpoint).and_return('111.111.111.111')
+ allow(gke_cluster).to receive(:master_auth).and_return(spy)
+ allow_any_instance_of(GoogleApi::CloudPlatform::Client)
+ .to receive(:projects_zones_clusters_get).and_return(gke_cluster)
+ end
+
+ context 'when suceeded to get kubernetes token' do
+ let(:kubernetes_token) { 'abc' }
+
+ before do
+ allow_any_instance_of(Ci::FetchKubernetesTokenService)
+ .to receive(:execute).and_return(kubernetes_token)
+ end
+
+ it 'executes integration cluster' do
+ expect_any_instance_of(Ci::IntegrateClusterService).to receive(:execute)
+ described_class.new.execute(cluster)
+ end
+ end
+
+ context 'when failed to get kubernetes token' do
+ before do
+ allow_any_instance_of(Ci::FetchKubernetesTokenService)
+ .to receive(:execute).and_return(nil)
+ end
+
+ it 'sets an error to cluster object' do
+ described_class.new.execute(cluster)
+
+ expect(cluster.reload).to be_errored
+ end
end
end
- context 'when invalid params' do
- it 'returns a cluster object with error' do
+ context 'when failed to get cluster from api' do
+ let(:error) { Google::Apis::ServerError.new('a') }
+
+ before do
+ allow_any_instance_of(GoogleApi::CloudPlatform::Client)
+ .to receive(:projects_zones_clusters_get).and_raise(error)
+ end
+
+ it 'sets an error to cluster object' do
+ described_class.new.execute(cluster)
+ expect(cluster.reload).to be_errored
end
end
end
diff --git a/spec/workers/wait_for_cluster_creation_worker_spec.rb b/spec/workers/wait_for_cluster_creation_worker_spec.rb
index 753c7efb9af..eed6bec00f8 100644
--- a/spec/workers/wait_for_cluster_creation_worker_spec.rb
+++ b/spec/workers/wait_for_cluster_creation_worker_spec.rb
@@ -4,14 +4,54 @@ describe WaitForClusterCreationWorker do
describe '#perform' do
context 'when cluster exists' do
let(:cluster) { create(:gcp_cluster) }
+ let(:operation) { double }
- it 'fetches gcp operation status' do
- expect_any_instance_of(Ci::FetchGcpOperationService).to receive(:execute)
+ before do
+ allow(operation).to receive(:status).and_return(status)
+ allow(operation).to receive(:start_time).and_return(1.minutes.ago)
+ allow(operation).to receive(:status_message).and_return('error')
+ allow_any_instance_of(Ci::FetchGcpOperationService).to receive(:execute).and_yield(operation)
+ end
+
+ context 'when operation status is RUNNING' do
+ let(:status) { 'RUNNING' }
+
+ it 'reschedules worker' do
+ expect(WaitForClusterCreationWorker).to receive(:perform_in)
- described_class.new.perform(cluster.id)
+ described_class.new.perform(cluster.id)
+ end
+
+ context 'when operation timeout' do
+ before do
+ allow(operation).to receive(:start_time).and_return(30.minutes.ago)
+ end
+
+ it 'sets an error message on cluster' do
+ described_class.new.perform(cluster.id)
+ expect(cluster.reload).to be_errored
+ end
+ end
end
- # TODO: context 'when operation.status is runnning'
+ context 'when operation status is DONE' do
+ let(:status) { 'DONE' }
+
+ it 'finalizes cluster creation' do
+ expect_any_instance_of(Ci::FinalizeClusterCreationService).to receive(:execute)
+
+ described_class.new.perform(cluster.id)
+ end
+ end
+
+ context 'when operation status is others' do
+ let(:status) { 'others' }
+
+ it 'sets an error message on cluster' do
+ described_class.new.perform(cluster.id)
+ expect(cluster.reload).to be_errored
+ end
+ end
end
context 'when cluster does not exist' do