From e710e766b042ad0c74536416044ad0af2fdca012 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Thu, 5 Oct 2017 01:55:33 +0900 Subject: [PATCH] fetch_gcp_operation_service_spec. finalize_cluster_creation_service_spec. wait_for_cluster_creation_worker_spec. --- .../ci/fetch_gcp_operation_service_spec.rb | 27 ++++++++-- .../finalize_cluster_creation_service_spec.rb | 54 +++++++++++++++++-- .../wait_for_cluster_creation_worker_spec.rb | 48 +++++++++++++++-- 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 -- GitLab