Skip to content

Elastic AWS tests fail in forks due to unmocked request for IAM instance profiles

As seen in https://gitlab.com/rachelfox/gitlab/-/jobs/654970940, forks are failing Elasticsearch tests because the absence of AWS credentials in the environment (e.g. AWS_ACCESS_KEY_ID) is causing these tests to use the IAM instance profile, which makes a Web request to an AWS-specific URL. We either have to mock out these calls or use static credentials:

 128) API::Search GET /projects/:id/-/search with correct params when elasticsearch is enabled when elasticsearch_limit_indexing off behaves like elasticsearch enabled for commits scope behaves like response is correct 
       Failure/Error: instance_variable_set(ivar(name), yield)
       WebMock::NetConnectNotAllowedError:
         Real HTTP connections are disabled. Unregistered request: GET http://169.254.169.254/latest/meta-data/iam/security-credentials/ with headers {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}
         You can stub this request with the following snippet:
         stub_request(:get, "http://169.254.169.254/latest/meta-data/iam/security-credentials/").
           with(
             headers: {
         	  'Accept'=>'*/*',
         	  'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
         	  'User-Agent'=>'Ruby'
             }).
           to_return(status: 200, body: "", headers: {})
         ============================================================
       Shared Example Group: "response is correct" called from ./ee/spec/requests/api/search_spec.rb:112
       Shared Example Group: "elasticsearch enabled" called from ./ee/spec/requests/api/search_spec.rb:448
       # ./vendor/ruby/2.6.0/gems/webmock-3.5.1/lib/webmock/http_lib_adapters/net_http.rb:114:in `request'
       # ./vendor/ruby/2.6.0/gems/aws-sdk-core-2.11.374/lib/aws-sdk-core/instance_profile_credentials.rb:122:in `http_get'
       # ./vendor/ruby/2.6.0/gems/aws-sdk-core-2.11.374/lib/aws-sdk-core/instance_profile_credentials.rb:97:in `block (2 levels) in get_credentials'
       # ./vendor/ruby/2.6.0/gems/aws-sdk-core-2.11.374/lib/aws-sdk-core/instance_profile_credentials.rb:118:in `open_connection'
       # ./vendor/ruby/2.6.0/gems/aws-sdk-core-2.11.374/lib/aws-sdk-core/instance_profile_credentials.rb:95:in `block in get_credentials'
       # ./vendor/ruby/2.6.0/gems/aws-sdk-core-2.11.374/lib/aws-sdk-core/instance_profile_credentials.rb:134:in `retry_errors'
       # ./vendor/ruby/2.6.0/gems/aws-sdk-core-2.11.374/lib/aws-sdk-core/instance_profile_credentials.rb:94:in `get_credentials'
       # ./vendor/ruby/2.6.0/gems/aws-sdk-core-2.11.374/lib/aws-sdk-core/instance_profile_credentials.rb:74:in `block in refresh'
       # ./vendor/ruby/2.6.0/gems/aws-sdk-core-2.11.374/lib/aws-sdk-core/instance_profile_credentials.rb:134:in `retry_errors'
       # ./vendor/ruby/2.6.0/gems/aws-sdk-core-2.11.374/lib/aws-sdk-core/instance_profile_credentials.rb:73:in `refresh'
       # ./vendor/ruby/2.6.0/gems/aws-sdk-core-2.11.374/lib/aws-sdk-core/refreshing_credentials.rb:20:in `initialize'
       # ./vendor/ruby/2.6.0/gems/aws-sdk-core-2.11.374/lib/aws-sdk-core/instance_profile_credentials.rb:51:in `initialize'
       # ./vendor/ruby/2.6.0/gems/aws-sdk-core-2.11.374/lib/aws-sdk-core/credential_provider_chain.rb:90:in `new'
       # ./vendor/ruby/2.6.0/gems/aws-sdk-core-2.11.374/lib/aws-sdk-core/credential_provider_chain.rb:90:in `instance_profile_credentials'
       # ./vendor/ruby/2.6.0/gems/aws-sdk-core-2.11.374/lib/aws-sdk-core/credential_provider_chain.rb:12:in `block in resolve'
       # ./vendor/ruby/2.6.0/gems/aws-sdk-core-2.11.374/lib/aws-sdk-core/credential_provider_chain.rb:11:in `each'
       # ./vendor/ruby/2.6.0/gems/aws-sdk-core-2.11.374/lib/aws-sdk-core/credential_provider_chain.rb:11:in `resolve'
       # ./ee/lib/gitlab/elastic/client.rb:47:in `block in aws_credential_provider'
       # ./lib/gitlab/utils/strong_memoize.rb:30:in `strong_memoize'
       # ./ee/lib/gitlab/elastic/client.rb:46:in `aws_credential_provider'
       # ./ee/lib/gitlab/elastic/indexer.rb:124:in `build_aws_credentials_env'
       # ./ee/lib/gitlab/elastic/indexer.rb:113:in `build_envvars'
       # ./ee/lib/gitlab/elastic/indexer.rb:71:in `run_indexer!'
       # ./ee/lib/gitlab/elastic/indexer.rb:44:in `block in run'
       # ./ee/lib/gitlab/elastic/indexer.rb:40:in `each'
       # ./ee/lib/gitlab/elastic/indexer.rb:40:in `run'
       # ./ee/app/workers/elastic_commit_indexer_worker.rb:29:in `block in perform'
Edited by Stan Hu