@@ -54,6 +54,22 @@ module CloudExamples
5454 }
5555 JSON
5656
57+ GCP_NO_MACHINE_EXAMPLE = <<-JSON
58+ {
59+ "instance": {
60+ "id": 4306570268266786072,
61+ "name": "basepi-test",
62+ "zone": "projects/513326162531/zones/us-west3-a"
63+ },
64+ "project": {"numericProjectId": 513326162531, "projectId": "elastic-apm"}
65+ }
66+ JSON
67+
68+ GCP_NO_INSTANCE_EXAMPLE = <<-JSON
69+ { "project": {"numericProjectId": 513326162531, "projectId": "elastic-apm"} }
70+ JSON
71+
72+
5773 AZURE_EXAMPLE = <<-JSON
5874 {
5975 "location": "westus2",
@@ -118,6 +134,52 @@ module CloudExamples
118134 end
119135 end
120136
137+ context 'gcp no machine_type' do
138+ let ( :config ) { Config . new ( cloud_provider : 'gcp' ) }
139+ before do
140+ @gcp_mock =
141+ WebMock . stub_request ( :get , Metadata ::CloudInfo ::GCP_URI )
142+ . to_return ( body : CloudExamples ::GCP_NO_MACHINE_EXAMPLE )
143+ end
144+
145+ it 'fetches metadata from gcp' do
146+ subject . fetch!
147+
148+ expect ( subject . provider ) . to eq ( 'gcp' )
149+ expect ( subject . instance_id ) . to eq ( "4306570268266786072" )
150+ expect ( subject . instance_name ) . to eq ( "basepi-test" )
151+ expect ( subject . project_id ) . to eq ( 'elastic-apm' )
152+ expect ( subject . availability_zone ) . to eq ( 'us-west3-a' )
153+ expect ( subject . region ) . to eq ( 'us-west3' )
154+ expect ( subject . machine_type ) . to be nil
155+
156+ expect ( @gcp_mock ) . to have_been_requested
157+ end
158+ end
159+
160+ context 'gcp no instance' do
161+ let ( :config ) { Config . new ( cloud_provider : 'gcp' ) }
162+ before do
163+ @gcp_mock =
164+ WebMock . stub_request ( :get , Metadata ::CloudInfo ::GCP_URI )
165+ . to_return ( body : CloudExamples ::GCP_NO_INSTANCE_EXAMPLE )
166+ end
167+
168+ it 'fetches metadata from gcp' do
169+ subject . fetch!
170+
171+ expect ( subject . provider ) . to eq ( 'gcp' )
172+ expect ( subject . project_id ) . to eq ( 'elastic-apm' )
173+ expect ( subject . instance_id ) . to be nil
174+ expect ( subject . instance_name ) . to be nil
175+ expect ( subject . availability_zone ) . to be nil
176+ expect ( subject . region ) . to be nil
177+ expect ( subject . machine_type ) . to be nil
178+
179+ expect ( @gcp_mock ) . to have_been_requested
180+ end
181+ end
182+
121183 context 'azure' do
122184 let ( :config ) { Config . new ( cloud_provider : 'azure' ) }
123185
0 commit comments