diff --git a/ee/lib/google_cloud_platform/artifact_registry/client.rb b/ee/lib/google_cloud_platform/artifact_registry/client.rb index 96b0ebb6fd223b004aa48cbb7a09d6be6ec1f2d5..e39bf5a8d5eece89a563254b1ed77882d64234f3 100644 --- a/ee/lib/google_cloud_platform/artifact_registry/client.rb +++ b/ee/lib/google_cloud_platform/artifact_registry/client.rb @@ -125,6 +125,8 @@ def client scope: CLOUD_PLATFORM_SCOPE ) config.credentials = ::Google::Cloud::ArtifactRegistry::V1::ArtifactRegistry::Credentials.new(ext_credentials) + config.rpcs.list_docker_images.metadata = user_agent_metadata + config.rpcs.get_docker_image.metadata = user_agent_metadata end end strong_memoize_attr :client @@ -132,6 +134,12 @@ def client def artifact_registry_integration project.google_cloud_platform_artifact_registry_integration end + + def user_agent_metadata + user_agent = "gitlab-rails-dot-com:google-cloud-integration/#{Gitlab::VERSION}" + + { 'user-agent' => user_agent } + end end end end diff --git a/ee/spec/lib/google_cloud_platform/artifact_registry/client_spec.rb b/ee/spec/lib/google_cloud_platform/artifact_registry/client_spec.rb index e6986b92b9b0f788cbad843fbb38a9007b614031..6a30638aab05405fa1a0d276f39132f581154216 100644 --- a/ee/spec/lib/google_cloud_platform/artifact_registry/client_spec.rb +++ b/ee/spec/lib/google_cloud_platform/artifact_registry/client_spec.rb @@ -18,13 +18,20 @@ let(:artifact_registry_location) { artifact_registry_integration&.artifact_registry_location } let(:artifact_registry_repository) { artifact_registry_integration&.artifact_registry_repository } let(:client) { described_class.new(wlif_integration: wlif_integration, user: user) } + let(:expected_metadata) { { 'user-agent' => "gitlab-rails-dot-com:google-cloud-integration/#{Gitlab::VERSION}" } } shared_context 'with a client double' do - let(:client_double) { instance_double('::Google::Cloud::ArtifactRegistry::V1::ArtifactRegistry::Client') } let(:config_double) do instance_double('Google::Cloud::ArtifactRegistry::V1::ArtifactRegistry::Client::Configuration') end + let(:rpcs_double) do + instance_double('Google::Cloud::ArtifactRegistry::V1::ArtifactRegistry::Client::Configuration::Rpcs') + end + + let(:rpc_list_docker_images_double) { instance_double('Gapic::Config::Method') } + let(:rpc_get_docker_image_double) { instance_double('Gapic::Config::Method') } + let(:client_double) { instance_double('::Google::Cloud::ArtifactRegistry::V1::ArtifactRegistry::Client') } let(:dummy_response) { Object.new } before do @@ -34,6 +41,11 @@ allow(config_double).to receive(:credentials=) .with(instance_of(::Google::Cloud::ArtifactRegistry::V1::ArtifactRegistry::Credentials)) + allow(config_double).to receive(:rpcs).and_return(rpcs_double) + allow(rpcs_double).to receive(:list_docker_images).and_return(rpc_list_docker_images_double) + allow(rpcs_double).to receive(:get_docker_image).and_return(rpc_get_docker_image_double) + allow(rpc_list_docker_images_double).to receive(:metadata=) + allow(rpc_get_docker_image_double).to receive(:metadata=) allow(::Google::Cloud::ArtifactRegistry::V1::ArtifactRegistry::Client).to receive(:new) do |_, &block| block.call(config_double) client_double @@ -96,6 +108,7 @@ shared_examples 'returning the expected response' do |expected_page_size: described_class::DEFAULT_PAGE_SIZE| it 'returns the expected response' do + expect(rpc_list_docker_images_double).to receive(:metadata=).with(expected_metadata) expect(client_double).to receive(:list_docker_images) do |request| expect(request).to be_a ::Google::Cloud::ArtifactRegistry::V1::ListDockerImagesRequest expect(request.page_size).to eq(expected_page_size) @@ -140,6 +153,7 @@ subject(:docker_image) { client.docker_image(name: name) } it 'returns the expected response' do + expect(rpc_get_docker_image_double).to receive(:metadata=).with(expected_metadata) expect(client_double).to receive(:get_docker_image) do |request| expect(request).to be_a ::Google::Cloud::ArtifactRegistry::V1::GetDockerImageRequest expect(request.name).to eq(name)