diff --git a/app/workers/wait_for_cluster_creation_worker.rb b/app/workers/wait_for_cluster_creation_worker.rb index eab340070e1..5aa3bbdaa9d 100644 --- a/app/workers/wait_for_cluster_creation_worker.rb +++ b/app/workers/wait_for_cluster_creation_worker.rb @@ -11,7 +11,7 @@ class WaitForClusterCreationWorker Ci::FetchGcpOperationService.new.execute(cluster) do |operation| case operation.status when 'RUNNING' - if TIMEOUT < Time.zone.now - operation.start_time.to_time + if TIMEOUT < Time.now.utc - operation.start_time.to_time.utc return cluster.make_errored!("Cluster creation time exceeds timeout; #{TIMEOUT}") end diff --git a/lib/google_api/cloud_platform/client.rb b/lib/google_api/cloud_platform/client.rb index 926b7402cd5..5ec1fa37546 100644 --- a/lib/google_api/cloud_platform/client.rb +++ b/lib/google_api/cloud_platform/client.rb @@ -5,6 +5,7 @@ module GoogleApi class Client < GoogleApi::Auth DEFAULT_MACHINE_TYPE = 'n1-standard-1'.freeze SCOPE = 'https://www.googleapis.com/auth/cloud-platform'.freeze + LEAST_TOKEN_LIFE_TIME = 10.minutes class << self def session_key_for_token @@ -25,9 +26,7 @@ module GoogleApi return false unless expires_at # Making sure that the token will have been still alive during the cluster creation. - unless DateTime.strptime(expires_at, '%s').to_time > Time.now + 10.minutes - return false - end + return false if token_life_time(expires_at) < LEAST_TOKEN_LIFE_TIME true end @@ -68,6 +67,12 @@ module GoogleApi m = self_link.match(%r{projects/.*/zones/.*/operations/(.*)}) m[1] if m end + + private + + def token_life_time(expires_at) + DateTime.strptime(expires_at, '%s').to_time.utc - Time.now.utc + end end end end diff --git a/spec/lib/google_api/cloud_platform/client_spec.rb b/spec/lib/google_api/cloud_platform/client_spec.rb index 6b454a593a0..6538dc21d6f 100644 --- a/spec/lib/google_api/cloud_platform/client_spec.rb +++ b/spec/lib/google_api/cloud_platform/client_spec.rb @@ -7,7 +7,7 @@ describe GoogleApi::CloudPlatform::Client do describe '#validate_token' do subject { client.validate_token(expires_at) } - let(:expires_at) { 1.hour.since.strftime('%s') } + let(:expires_at) { 1.hour.since.utc.strftime('%s') } context 'when token is nil' do let(:token) { nil } @@ -26,7 +26,7 @@ describe GoogleApi::CloudPlatform::Client do end context 'when expires in 10 minutes' do - let(:expires_at) { 5.minutes.since.strftime('%s') } + let(:expires_at) { 5.minutes.since.utc.strftime('%s') } it { is_expected.to be_falsy } end diff --git a/spec/workers/wait_for_cluster_creation_worker_spec.rb b/spec/workers/wait_for_cluster_creation_worker_spec.rb index 6d82981287f..dcd4a3b9aec 100644 --- a/spec/workers/wait_for_cluster_creation_worker_spec.rb +++ b/spec/workers/wait_for_cluster_creation_worker_spec.rb @@ -24,7 +24,7 @@ describe WaitForClusterCreationWorker do context 'when operation timeout' do before do - allow(operation).to receive(:start_time).and_return(30.minutes.ago) + allow(operation).to receive(:start_time).and_return(30.minutes.ago.utc) end it 'sets an error message on cluster' do