From 6fafa713857c24fd5c1fb426f48da49f330b86a3 Mon Sep 17 00:00:00 2001 From: wilkosz Date: Sun, 26 Apr 2020 16:38:26 +1000 Subject: [PATCH 01/10] update ec2_metadata --- lib/ohai/mixin/ec2_metadata.rb | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/ohai/mixin/ec2_metadata.rb b/lib/ohai/mixin/ec2_metadata.rb index cddb05e4f..9e5f15c11 100644 --- a/lib/ohai/mixin/ec2_metadata.rb +++ b/lib/ohai/mixin/ec2_metadata.rb @@ -50,7 +50,7 @@ module Ec2Metadata def best_api_version @api_version ||= begin logger.trace("Mixin EC2: Fetching http://#{EC2_METADATA_ADDR}/ to determine the latest supported metadata release") - response = http_client.get("/") + response = http_client.get("/", {:'X-aws-ec2-metadata-token' => v2_token}) if response.code == "404" logger.trace("Mixin EC2: Received HTTP 404 from metadata server while determining API version, assuming 'latest'") return "latest" @@ -83,6 +83,9 @@ def http_client end end + def v2_token + http_client.put('/latest/api/token/', nil, {:'X-aws-ec2-metadata-token-ttl-seconds' => '60'})&.body + end # Get metadata for a given path and API version # # Typically, a 200 response is expected for valid metadata. @@ -92,7 +95,7 @@ def http_client def metadata_get(id, api_version) path = "/#{api_version}/meta-data/#{id}" logger.trace("Mixin EC2: Fetching http://#{EC2_METADATA_ADDR}#{path}") - response = http_client.get(path) + response = http_client.get(path, {:'X-aws-ec2-metadata-token' => v2_token}) case response.code when "200" response.body @@ -173,13 +176,13 @@ def fetch_json_dir_metadata(id, api_version) def fetch_userdata logger.trace("Mixin EC2: Fetching http://#{EC2_METADATA_ADDR}/#{best_api_version}/user-data/") - response = http_client.get("/#{best_api_version}/user-data/") + response = http_client.get("/#{best_api_version}/user-data/", {:'X-aws-ec2-metadata-token' => v2_token}) response.code == "200" ? response.body : nil end def fetch_dynamic_data @fetch_dynamic_data ||= begin - response = http_client.get("/#{best_api_version}/dynamic/instance-identity/document/") + response = http_client.get("/#{best_api_version}/dynamic/instance-identity/document/", {:'X-aws-ec2-metadata-token' => v2_token}) if json?(response.body) && response.code == "200" FFI_Yajl::Parser.parse(response.body) From 6a5ccfe36bde5c42019e66644fcf5d632c29534f Mon Sep 17 00:00:00 2001 From: wilkosz Date: Sun, 26 Apr 2020 21:18:35 +1000 Subject: [PATCH 02/10] unit test with v2_token --- spec/unit/mixin/ec2_metadata_spec.rb | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/spec/unit/mixin/ec2_metadata_spec.rb b/spec/unit/mixin/ec2_metadata_spec.rb index 3f194b76a..30fc4d13d 100644 --- a/spec/unit/mixin/ec2_metadata_spec.rb +++ b/spec/unit/mixin/ec2_metadata_spec.rb @@ -15,7 +15,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - require "spec_helper" require "ohai/mixin/ec2_metadata" @@ -23,6 +22,7 @@ let(:mixin) do metadata_object = Object.new.extend(described_class) http_client = double("Net::HTTP client") + allow(http_client).to receive(:put) { double("Net::HTTP::PUT Response", body: "xxxxxxxxxxxxxxxxxxxxxxxx==", code: "200") } allow(http_client).to receive(:get).and_return(response) allow(metadata_object).to receive(:http_client).and_return(http_client) metadata_object @@ -35,15 +35,14 @@ describe "#best_api_version" do context "with a sorted list of metadata versions" do - let(:response) { double("Net::HTTP Response", body: "1.0\n2011-05-01\n2012-01-12\nUnsupported", code: "200") } - + let(:response) { double("Net::HTTP::GET Response", body: "1.0\n2011-05-01\n2012-01-12\nUnsupported", code: "200") } it "returns the most recent version" do expect(mixin.best_api_version).to eq("2012-01-12") end end context "with an unsorted list of metadata versions" do - let(:response) { double("Net::HTTP Response", body: "1.0\n2009-04-04\n2007-03-01\n2011-05-01\n2008-09-01\nUnsupported", code: "200") } + let(:response) { double("Net::HTTP::GET Response", body: "1.0\n2009-04-04\n2007-03-01\n2011-05-01\n2008-09-01\nUnsupported", code: "200") } it "returns the most recent version (using string sort)" do expect(mixin.best_api_version).to eq("2011-05-01") @@ -51,7 +50,7 @@ end context "when no supported versions are found" do - let(:response) { double("Net::HTTP Response", body: "2020-01-01\nUnsupported", code: "200") } + let(:response) { double("Net::HTTP::GET Response", body: "2020-01-01\nUnsupported", code: "200") } it "raises an error" do expect { mixin.best_api_version }.to raise_error(RuntimeError) @@ -60,7 +59,7 @@ # Presume 'latest' when we get a 404 for Eucalyptus back-compat context "when the response code is 404" do - let(:response) { double("Net::HTTP Response", code: "404") } + let(:response) { double("Net::HTTP::GET Response", code: "404") } it "returns 'latest' as the version" do expect(mixin.best_api_version).to eq("latest") @@ -68,7 +67,7 @@ end context "when the response code is unexpected" do - let(:response) { double("Net::HTTP Response", body: "1.0\n2011-05-01\n2012-01-12\nUnsupported", code: "418") } + let(:response) { double("Net::HTTP::GET Response", body: "1.0\n2011-05-01\n2012-01-12\nUnsupported", code: "418") } it "raises an error" do expect { mixin.best_api_version }.to raise_error(RuntimeError) @@ -78,7 +77,7 @@ describe "#metadata_get" do context "when the response code is unexpected" do - let(:response) { double("Net::HTTP Response", body: "", code: "418") } + let(:response) { double("Net::HTTP::GET Response", body: "", code: "418") } it "raises an error" do expect { mixin.metadata_get("", "2012-01-12") }.to raise_error(RuntimeError) From 857390570e72c718040b4799f48dc6b98b7aa52c Mon Sep 17 00:00:00 2001 From: wilkosz Date: Mon, 27 Apr 2020 14:56:20 +1000 Subject: [PATCH 03/10] unit test plugins ec2 --- spec/unit/plugins/ec2_spec.rb | 134 +++++++++++++++++----------------- 1 file changed, 68 insertions(+), 66 deletions(-) diff --git a/spec/unit/plugins/ec2_spec.rb b/spec/unit/plugins/ec2_spec.rb index 823d5ed3a..bcd3e6c84 100644 --- a/spec/unit/plugins/ec2_spec.rb +++ b/spec/unit/plugins/ec2_spec.rb @@ -48,9 +48,12 @@ t = double("connection") allow(t).to receive(:connect_nonblock).and_raise(Errno::EINPROGRESS) allow(Socket).to receive(:new).and_return(t) + @token = "xxxxxxxxxxxxxxxxxxxxxxxx==" + @get_token_header = {:'X-aws-ec2-metadata-token' => @token} + allow(@http_client).to receive(:put) { double("Net::HTTP::PUT Response", body: @token, code: "200") } expect(@http_client).to receive(:get) - .with("/") - .and_return(double("Net::HTTP Response", body: "2012-01-12", code: "200")) + .with("/", @get_token_header) + .and_return(double("Net::HTTP::GET Response", body: "2012-01-12", code: "200")) end context "with common metadata paths" do @@ -65,15 +68,15 @@ it "recursively fetches all the ec2 metadata" do paths.each do |name, body| expect(@http_client).to receive(:get) - .with("/2012-01-12/#{name}") - .and_return(double("Net::HTTP Response", body: body, code: "200")) + .with("/2012-01-12/#{name}", @get_token_header) + .and_return(double("Net::HTTP::GET Response", body: body, code: "200")) end expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/") - .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) + .with("/2012-01-12/user-data/", @get_token_header) + .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/") - .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) + .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) + .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -86,14 +89,14 @@ it "fetches binary userdata opaquely" do paths.each do |name, body| expect(@http_client).to receive(:get) - .with("/2012-01-12/#{name}") + .with("/2012-01-12/#{name}", @get_token_header) .and_return(double("Net::HTTP Response", body: body, code: "200")) end expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/") + .with("/2012-01-12/user-data/", @get_token_header) .and_return(double("Net::HTTP Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/") + .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -108,14 +111,14 @@ it "fetches AWS account id" do paths.each do |name, body| expect(@http_client).to receive(:get) - .with("/2012-01-12/#{name}") + .with("/2012-01-12/#{name}", @get_token_header) .and_return(double("Net::HTTP Response", body: body, code: "200")) end expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/") + .with("/2012-01-12/user-data/", @get_token_header) .and_return(double("Net::HTTP Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/") + .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -130,14 +133,14 @@ it "fetches AWS region" do paths.each do |name, body| expect(@http_client).to receive(:get) - .with("/2012-01-12/#{name}") + .with("/2012-01-12/#{name}", @get_token_header) .and_return(double("Net::HTTP Response", body: body, code: "200")) end expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/") + .with("/2012-01-12/user-data/", @get_token_header) .and_return(double("Net::HTTP Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/") + .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) .and_return(double("Net::HTTP Response", body: "{\"region\":\"us-east-1\"}", code: "200")) plugin.run @@ -152,14 +155,14 @@ it "fetches AWS availability zone" do paths.each do |name, body| expect(@http_client).to receive(:get) - .with("/2012-01-12/#{name}") + .with("/2012-01-12/#{name}", @get_token_header) .and_return(double("Net::HTTP Response", body: body, code: "200")) end expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/") + .with("/2012-01-12/user-data/", @get_token_header) .and_return(double("Net::HTTP Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/") + .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) .and_return(double("Net::HTTP Response", body: "{\"availabilityZone\":\"us-east-1d\"}", code: "200")) plugin.run @@ -174,29 +177,29 @@ it "parses ec2 network/ directory as a multi-level hash" do expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/") - .and_return(double("Net::HTTP Response", body: "network/", code: "200")) + .with("/2012-01-12/meta-data/", @get_token_header) + .and_return(double("Net::HTTP::GET Response", body: "network/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/network/") - .and_return(double("Net::HTTP Response", body: "interfaces/", code: "200")) + .with("/2012-01-12/meta-data/network/", @get_token_header) + .and_return(double("Net::HTTP::GET Response", body: "interfaces/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/network/interfaces/") - .and_return(double("Net::HTTP Response", body: "macs/", code: "200")) + .with("/2012-01-12/meta-data/network/interfaces/", @get_token_header) + .and_return(double("Net::HTTP::GET Response", body: "macs/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/network/interfaces/macs/") - .and_return(double("Net::HTTP Response", body: "12:34:56:78:9a:bc/", code: "200")) + .with("/2012-01-12/meta-data/network/interfaces/macs/", @get_token_header) + .and_return(double("Net::HTTP::GET Response", body: "12:34:56:78:9a:bc/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/network/interfaces/macs/12:34:56:78:9a:bc/") - .and_return(double("Net::HTTP Response", body: "public_hostname", code: "200")) + .with("/2012-01-12/meta-data/network/interfaces/macs/12:34:56:78:9a:bc/", @get_token_header) + .and_return(double("Net::HTTP::GET Response", body: "public_hostname", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/network/interfaces/macs/12:34:56:78:9a:bc/public_hostname") - .and_return(double("Net::HTTP Response", body: "server17.opscode.com", code: "200")) + .with("/2012-01-12/meta-data/network/interfaces/macs/12:34:56:78:9a:bc/public_hostname", @get_token_header) + .and_return(double("Net::HTTP::GET Response", body: "server17.opscode.com", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/") - .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) + .with("/2012-01-12/user-data/", @get_token_header) + .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/") - .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) + .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) + .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -211,22 +214,22 @@ it "parses ec2 iam/ directory and collect iam/security-credentials/" do expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/") + .with("/2012-01-12/meta-data/", @get_token_header) .and_return(double("Net::HTTP Response", body: "iam/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/iam/") + .with("/2012-01-12/meta-data/iam/", @get_token_header) .and_return(double("Net::HTTP Response", body: "security-credentials/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/iam/security-credentials/") + .with("/2012-01-12/meta-data/iam/security-credentials/", @get_token_header) .and_return(double("Net::HTTP Response", body: "MyRole", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/iam/security-credentials/MyRole") + .with("/2012-01-12/meta-data/iam/security-credentials/MyRole", @get_token_header) .and_return(double("Net::HTTP Response", body: "{\n \"Code\" : \"Success\",\n \"LastUpdated\" : \"2012-08-22T07:47:22Z\",\n \"Type\" : \"AWS-HMAC\",\n \"AccessKeyId\" : \"AAAAAAAA\",\n \"SecretAccessKey\" : \"SSSSSSSS\",\n \"Token\" : \"12345678\",\n \"Expiration\" : \"2012-08-22T11:25:52Z\"\n}", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/") + .with("/2012-01-12/user-data/", @get_token_header) .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/") + .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -244,22 +247,22 @@ it "parses ec2 iam/ directory and NOT collect iam/security-credentials/" do expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/") + .with("/2012-01-12/meta-data/", @get_token_header) .and_return(double("Net::HTTP Response", body: "iam/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/iam/") + .with("/2012-01-12/meta-data/iam/", @get_token_header) .and_return(double("Net::HTTP Response", body: "security-credentials/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/iam/security-credentials/") + .with("/2012-01-12/meta-data/iam/security-credentials/", @get_token_header) .and_return(double("Net::HTTP Response", body: "MyRole", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/iam/security-credentials/MyRole") + .with("/2012-01-12/meta-data/iam/security-credentials/MyRole", @get_token_header) .and_return(double("Net::HTTP Response", body: "{\n \"Code\" : \"Success\",\n \"LastUpdated\" : \"2012-08-22T07:47:22Z\",\n \"Type\" : \"AWS-HMAC\",\n \"AccessKeyId\" : \"AAAAAAAA\",\n \"SecretAccessKey\" : \"SSSSSSSS\",\n \"Token\" : \"12345678\",\n \"Expiration\" : \"2012-08-22T11:25:52Z\"\n}", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/") + .with("/2012-01-12/user-data/", @get_token_header) .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/") + .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -271,37 +274,36 @@ it "ignores \"./\" and \"../\" on ec2 metadata paths to avoid infinity loops" do expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/") + .with("/2012-01-12/meta-data/", @get_token_header) .and_return(double("Net::HTTP Response", body: ".\n./\n..\n../\npath1/.\npath2/./\npath3/..\npath4/../", code: "200")) - expect(@http_client).not_to receive(:get) - .with("/2012-01-12/meta-data/.") + .with("/2012-01-12/meta-data/.", @get_token_header) expect(@http_client).not_to receive(:get) - .with("/2012-01-12/meta-data/./") + .with("/2012-01-12/meta-data/./", @get_token_header) expect(@http_client).not_to receive(:get) - .with("/2012-01-12/meta-data/..") + .with("/2012-01-12/meta-data/..", @get_token_header) expect(@http_client).not_to receive(:get) - .with("/2012-01-12/meta-data/../") + .with("/2012-01-12/meta-data/../", @get_token_header) expect(@http_client).not_to receive(:get) - .with("/2012-01-12/meta-data/path1/..") + .with("/2012-01-12/meta-data/path1/..", @get_token_header) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/path1/") + .with("/2012-01-12/meta-data/path1/", @get_token_header) .and_return(double("Net::HTTP Response", body: "", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/path2/") + .with("/2012-01-12/meta-data/path2/", @get_token_header) .and_return(double("Net::HTTP Response", body: "", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/path3/") + .with("/2012-01-12/meta-data/path3/", @get_token_header) .and_return(double("Net::HTTP Response", body: "", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/path4/") + .with("/2012-01-12/meta-data/path4/", @get_token_header) .and_return(double("Net::HTTP Response", body: "", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/") + .with("/2012-01-12/user-data/", @get_token_header) .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/") + .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -311,19 +313,19 @@ it "completes the run despite unavailable metadata" do expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/") + .with("/2012-01-12/meta-data/", @get_token_header) .and_return(double("Net::HTTP Response", body: "metrics/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/metrics/") + .with("/2012-01-12/meta-data/metrics/", @get_token_header) .and_return(double("Net::HTTP Response", body: "vhostmd", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/metrics/vhostmd") + .with("/2012-01-12/meta-data/metrics/vhostmd", @get_token_header) .and_return(double("Net::HTTP Response", body: "", code: "404")) expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/") + .with("/2012-01-12/user-data/", @get_token_header) .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/") + .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run From 466c94b07bd4535ba869140c0f7d7655334090cf Mon Sep 17 00:00:00 2001 From: wilkosz Date: Mon, 27 Apr 2020 15:01:44 +1000 Subject: [PATCH 04/10] pop --- spec/unit/mixin/ec2_metadata_spec.rb | 2 +- spec/unit/plugins/ec2_spec.rb | 74 ++++++++++++++-------------- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/spec/unit/mixin/ec2_metadata_spec.rb b/spec/unit/mixin/ec2_metadata_spec.rb index 30fc4d13d..5d5286b87 100644 --- a/spec/unit/mixin/ec2_metadata_spec.rb +++ b/spec/unit/mixin/ec2_metadata_spec.rb @@ -22,7 +22,7 @@ let(:mixin) do metadata_object = Object.new.extend(described_class) http_client = double("Net::HTTP client") - allow(http_client).to receive(:put) { double("Net::HTTP::PUT Response", body: "xxxxxxxxxxxxxxxxxxxxxxxx==", code: "200") } + allow(http_client).to receive(:put) { double("Net::HTTP::PUT Response", body: "AQAEAE4UUd-3NE5EEeYYXKxicVfDOHsx0YSHFFSuCvo2GfCcxzJsvg==", code: "200") } allow(http_client).to receive(:get).and_return(response) allow(metadata_object).to receive(:http_client).and_return(http_client) metadata_object diff --git a/spec/unit/plugins/ec2_spec.rb b/spec/unit/plugins/ec2_spec.rb index bcd3e6c84..a7a7bb509 100644 --- a/spec/unit/plugins/ec2_spec.rb +++ b/spec/unit/plugins/ec2_spec.rb @@ -48,7 +48,7 @@ t = double("connection") allow(t).to receive(:connect_nonblock).and_raise(Errno::EINPROGRESS) allow(Socket).to receive(:new).and_return(t) - @token = "xxxxxxxxxxxxxxxxxxxxxxxx==" + @token = "AQAEAE4UUd-3NE5EEeYYXKxicVfDOHsx0YSHFFSuCvo2GfCcxzJsvg==" @get_token_header = {:'X-aws-ec2-metadata-token' => @token} allow(@http_client).to receive(:put) { double("Net::HTTP::PUT Response", body: @token, code: "200") } expect(@http_client).to receive(:get) @@ -90,14 +90,14 @@ paths.each do |name, body| expect(@http_client).to receive(:get) .with("/2012-01-12/#{name}", @get_token_header) - .and_return(double("Net::HTTP Response", body: body, code: "200")) + .and_return(double("Net::HTTP::GET Response", body: body, code: "200")) end expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -112,14 +112,14 @@ paths.each do |name, body| expect(@http_client).to receive(:get) .with("/2012-01-12/#{name}", @get_token_header) - .and_return(double("Net::HTTP Response", body: body, code: "200")) + .and_return(double("Net::HTTP::GET Response", body: body, code: "200")) end expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -134,14 +134,14 @@ paths.each do |name, body| expect(@http_client).to receive(:get) .with("/2012-01-12/#{name}", @get_token_header) - .and_return(double("Net::HTTP Response", body: body, code: "200")) + .and_return(double("Net::HTTP::GET Response", body: body, code: "200")) end expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "{\"region\":\"us-east-1\"}", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "{\"region\":\"us-east-1\"}", code: "200")) plugin.run @@ -156,14 +156,14 @@ paths.each do |name, body| expect(@http_client).to receive(:get) .with("/2012-01-12/#{name}", @get_token_header) - .and_return(double("Net::HTTP Response", body: body, code: "200")) + .and_return(double("Net::HTTP::GET Response", body: body, code: "200")) end expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "{\"availabilityZone\":\"us-east-1d\"}", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "{\"availabilityZone\":\"us-east-1d\"}", code: "200")) plugin.run @@ -215,22 +215,22 @@ it "parses ec2 iam/ directory and collect iam/security-credentials/" do expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "iam/", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "iam/", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/iam/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "security-credentials/", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "security-credentials/", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/iam/security-credentials/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "MyRole", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "MyRole", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/iam/security-credentials/MyRole", @get_token_header) - .and_return(double("Net::HTTP Response", body: "{\n \"Code\" : \"Success\",\n \"LastUpdated\" : \"2012-08-22T07:47:22Z\",\n \"Type\" : \"AWS-HMAC\",\n \"AccessKeyId\" : \"AAAAAAAA\",\n \"SecretAccessKey\" : \"SSSSSSSS\",\n \"Token\" : \"12345678\",\n \"Expiration\" : \"2012-08-22T11:25:52Z\"\n}", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "{\n \"Code\" : \"Success\",\n \"LastUpdated\" : \"2012-08-22T07:47:22Z\",\n \"Type\" : \"AWS-HMAC\",\n \"AccessKeyId\" : \"AAAAAAAA\",\n \"SecretAccessKey\" : \"SSSSSSSS\",\n \"Token\" : \"12345678\",\n \"Expiration\" : \"2012-08-22T11:25:52Z\"\n}", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -248,22 +248,22 @@ it "parses ec2 iam/ directory and NOT collect iam/security-credentials/" do expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "iam/", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "iam/", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/iam/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "security-credentials/", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "security-credentials/", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/iam/security-credentials/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "MyRole", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "MyRole", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/iam/security-credentials/MyRole", @get_token_header) - .and_return(double("Net::HTTP Response", body: "{\n \"Code\" : \"Success\",\n \"LastUpdated\" : \"2012-08-22T07:47:22Z\",\n \"Type\" : \"AWS-HMAC\",\n \"AccessKeyId\" : \"AAAAAAAA\",\n \"SecretAccessKey\" : \"SSSSSSSS\",\n \"Token\" : \"12345678\",\n \"Expiration\" : \"2012-08-22T11:25:52Z\"\n}", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "{\n \"Code\" : \"Success\",\n \"LastUpdated\" : \"2012-08-22T07:47:22Z\",\n \"Type\" : \"AWS-HMAC\",\n \"AccessKeyId\" : \"AAAAAAAA\",\n \"SecretAccessKey\" : \"SSSSSSSS\",\n \"Token\" : \"12345678\",\n \"Expiration\" : \"2012-08-22T11:25:52Z\"\n}", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -275,7 +275,7 @@ it "ignores \"./\" and \"../\" on ec2 metadata paths to avoid infinity loops" do expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/", @get_token_header) - .and_return(double("Net::HTTP Response", body: ".\n./\n..\n../\npath1/.\npath2/./\npath3/..\npath4/../", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: ".\n./\n..\n../\npath1/.\npath2/./\npath3/..\npath4/../", code: "200")) expect(@http_client).not_to receive(:get) .with("/2012-01-12/meta-data/.", @get_token_header) expect(@http_client).not_to receive(:get) @@ -289,22 +289,22 @@ expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/path1/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/path2/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/path3/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/path4/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -314,19 +314,19 @@ it "completes the run despite unavailable metadata" do expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "metrics/", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "metrics/", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/metrics/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "vhostmd", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "vhostmd", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/metrics/vhostmd", @get_token_header) - .and_return(double("Net::HTTP Response", body: "", code: "404")) + .and_return(double("Net::HTTP::GET Response", body: "", code: "404")) expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) - .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) + .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run From 8699b6d1e8d9c3fdb859fbe8083fd4291ff8816d Mon Sep 17 00:00:00 2001 From: wilkosz Date: Mon, 27 Apr 2020 15:23:31 +1000 Subject: [PATCH 05/10] qucalyotus and openstack spec updates to allow put commands on http double spec client --- spec/unit/plugins/ec2_spec.rb | 112 +++++++++++++-------------- spec/unit/plugins/eucalyptus_spec.rb | 27 ++++--- spec/unit/plugins/openstack_spec.rb | 6 +- 3 files changed, 76 insertions(+), 69 deletions(-) diff --git a/spec/unit/plugins/ec2_spec.rb b/spec/unit/plugins/ec2_spec.rb index a7a7bb509..5c26f926b 100644 --- a/spec/unit/plugins/ec2_spec.rb +++ b/spec/unit/plugins/ec2_spec.rb @@ -48,11 +48,11 @@ t = double("connection") allow(t).to receive(:connect_nonblock).and_raise(Errno::EINPROGRESS) allow(Socket).to receive(:new).and_return(t) - @token = "AQAEAE4UUd-3NE5EEeYYXKxicVfDOHsx0YSHFFSuCvo2GfCcxzJsvg==" - @get_token_header = {:'X-aws-ec2-metadata-token' => @token} - allow(@http_client).to receive(:put) { double("Net::HTTP::PUT Response", body: @token, code: "200") } + token = "AQAEAE4UUd-3NE5EEeYYXKxicVfDOHsx0YSHFFSuCvo2GfCcxzJsvg==" + @get_req_token_header = {:'X-aws-ec2-metadata-token' => token} + allow(@http_client).to receive(:put) { double("Net::HTTP::PUT Response", body: token, code: "200") } expect(@http_client).to receive(:get) - .with("/", @get_token_header) + .with("/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "2012-01-12", code: "200")) end @@ -68,14 +68,14 @@ it "recursively fetches all the ec2 metadata" do paths.each do |name, body| expect(@http_client).to receive(:get) - .with("/2012-01-12/#{name}", @get_token_header) + .with("/2012-01-12/#{name}", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: body, code: "200")) end expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/", @get_token_header) + .with("/2012-01-12/user-data/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) + .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -89,14 +89,14 @@ it "fetches binary userdata opaquely" do paths.each do |name, body| expect(@http_client).to receive(:get) - .with("/2012-01-12/#{name}", @get_token_header) + .with("/2012-01-12/#{name}", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: body, code: "200")) end expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/", @get_token_header) + .with("/2012-01-12/user-data/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) + .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -111,14 +111,14 @@ it "fetches AWS account id" do paths.each do |name, body| expect(@http_client).to receive(:get) - .with("/2012-01-12/#{name}", @get_token_header) + .with("/2012-01-12/#{name}", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: body, code: "200")) end expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/", @get_token_header) + .with("/2012-01-12/user-data/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) + .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -133,14 +133,14 @@ it "fetches AWS region" do paths.each do |name, body| expect(@http_client).to receive(:get) - .with("/2012-01-12/#{name}", @get_token_header) + .with("/2012-01-12/#{name}", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: body, code: "200")) end expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/", @get_token_header) + .with("/2012-01-12/user-data/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) + .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "{\"region\":\"us-east-1\"}", code: "200")) plugin.run @@ -155,14 +155,14 @@ it "fetches AWS availability zone" do paths.each do |name, body| expect(@http_client).to receive(:get) - .with("/2012-01-12/#{name}", @get_token_header) + .with("/2012-01-12/#{name}", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: body, code: "200")) end expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/", @get_token_header) + .with("/2012-01-12/user-data/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) + .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "{\"availabilityZone\":\"us-east-1d\"}", code: "200")) plugin.run @@ -177,28 +177,28 @@ it "parses ec2 network/ directory as a multi-level hash" do expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/", @get_token_header) + .with("/2012-01-12/meta-data/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "network/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/network/", @get_token_header) + .with("/2012-01-12/meta-data/network/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "interfaces/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/network/interfaces/", @get_token_header) + .with("/2012-01-12/meta-data/network/interfaces/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "macs/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/network/interfaces/macs/", @get_token_header) + .with("/2012-01-12/meta-data/network/interfaces/macs/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "12:34:56:78:9a:bc/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/network/interfaces/macs/12:34:56:78:9a:bc/", @get_token_header) + .with("/2012-01-12/meta-data/network/interfaces/macs/12:34:56:78:9a:bc/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "public_hostname", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/network/interfaces/macs/12:34:56:78:9a:bc/public_hostname", @get_token_header) + .with("/2012-01-12/meta-data/network/interfaces/macs/12:34:56:78:9a:bc/public_hostname", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "server17.opscode.com", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/", @get_token_header) + .with("/2012-01-12/user-data/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) + .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -214,22 +214,22 @@ it "parses ec2 iam/ directory and collect iam/security-credentials/" do expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/", @get_token_header) + .with("/2012-01-12/meta-data/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "iam/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/iam/", @get_token_header) + .with("/2012-01-12/meta-data/iam/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "security-credentials/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/iam/security-credentials/", @get_token_header) + .with("/2012-01-12/meta-data/iam/security-credentials/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "MyRole", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/iam/security-credentials/MyRole", @get_token_header) + .with("/2012-01-12/meta-data/iam/security-credentials/MyRole", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "{\n \"Code\" : \"Success\",\n \"LastUpdated\" : \"2012-08-22T07:47:22Z\",\n \"Type\" : \"AWS-HMAC\",\n \"AccessKeyId\" : \"AAAAAAAA\",\n \"SecretAccessKey\" : \"SSSSSSSS\",\n \"Token\" : \"12345678\",\n \"Expiration\" : \"2012-08-22T11:25:52Z\"\n}", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/", @get_token_header) + .with("/2012-01-12/user-data/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) + .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -247,22 +247,22 @@ it "parses ec2 iam/ directory and NOT collect iam/security-credentials/" do expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/", @get_token_header) + .with("/2012-01-12/meta-data/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "iam/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/iam/", @get_token_header) + .with("/2012-01-12/meta-data/iam/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "security-credentials/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/iam/security-credentials/", @get_token_header) + .with("/2012-01-12/meta-data/iam/security-credentials/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "MyRole", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/iam/security-credentials/MyRole", @get_token_header) + .with("/2012-01-12/meta-data/iam/security-credentials/MyRole", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "{\n \"Code\" : \"Success\",\n \"LastUpdated\" : \"2012-08-22T07:47:22Z\",\n \"Type\" : \"AWS-HMAC\",\n \"AccessKeyId\" : \"AAAAAAAA\",\n \"SecretAccessKey\" : \"SSSSSSSS\",\n \"Token\" : \"12345678\",\n \"Expiration\" : \"2012-08-22T11:25:52Z\"\n}", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/", @get_token_header) + .with("/2012-01-12/user-data/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) + .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -274,36 +274,36 @@ it "ignores \"./\" and \"../\" on ec2 metadata paths to avoid infinity loops" do expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/", @get_token_header) + .with("/2012-01-12/meta-data/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: ".\n./\n..\n../\npath1/.\npath2/./\npath3/..\npath4/../", code: "200")) expect(@http_client).not_to receive(:get) - .with("/2012-01-12/meta-data/.", @get_token_header) + .with("/2012-01-12/meta-data/.", @get_req_token_header) expect(@http_client).not_to receive(:get) - .with("/2012-01-12/meta-data/./", @get_token_header) + .with("/2012-01-12/meta-data/./", @get_req_token_header) expect(@http_client).not_to receive(:get) - .with("/2012-01-12/meta-data/..", @get_token_header) + .with("/2012-01-12/meta-data/..", @get_req_token_header) expect(@http_client).not_to receive(:get) - .with("/2012-01-12/meta-data/../", @get_token_header) + .with("/2012-01-12/meta-data/../", @get_req_token_header) expect(@http_client).not_to receive(:get) - .with("/2012-01-12/meta-data/path1/..", @get_token_header) + .with("/2012-01-12/meta-data/path1/..", @get_req_token_header) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/path1/", @get_token_header) + .with("/2012-01-12/meta-data/path1/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/path2/", @get_token_header) + .with("/2012-01-12/meta-data/path2/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/path3/", @get_token_header) + .with("/2012-01-12/meta-data/path3/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/path4/", @get_token_header) + .with("/2012-01-12/meta-data/path4/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/", @get_token_header) + .with("/2012-01-12/user-data/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) + .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -313,19 +313,19 @@ it "completes the run despite unavailable metadata" do expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/", @get_token_header) + .with("/2012-01-12/meta-data/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "metrics/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/metrics/", @get_token_header) + .with("/2012-01-12/meta-data/metrics/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "vhostmd", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/metrics/vhostmd", @get_token_header) + .with("/2012-01-12/meta-data/metrics/vhostmd", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "", code: "404")) expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/", @get_token_header) + .with("/2012-01-12/user-data/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/dynamic/instance-identity/document/", @get_token_header) + .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run diff --git a/spec/unit/plugins/eucalyptus_spec.rb b/spec/unit/plugins/eucalyptus_spec.rb index c4a4d628a..d27298a47 100644 --- a/spec/unit/plugins/eucalyptus_spec.rb +++ b/spec/unit/plugins/eucalyptus_spec.rb @@ -33,26 +33,29 @@ shared_examples_for "eucalyptus" do before do @http_client = double("Net::HTTP client") + @token = "AQAEAE4UUd-3NE5EEeYYXKxicVfDOHsx0YSHFFSuCvo2GfCcxzJsvg==" + @get_req_token_header = {:'X-aws-ec2-metadata-token' => @token} allow(plugin).to receive(:http_client).and_return(@http_client) + allow(@http_client).to receive(:put) { double("Net::HTTP::PUT Response", body: @token, code: "200") } expect(@http_client).to receive(:get) - .with("/") - .and_return(double("Net::HTTP Response", body: "2012-01-12", code: "200")) + .with("/", @get_req_token_header) + .and_return(double("Net::HTTP::GET Response", body: "2012-01-12", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/") - .and_return(double("Net::HTTP Response", body: "instance_type\nami_id\nsecurity-groups", code: "200")) + .with("/2012-01-12/meta-data/", @get_req_token_header) + .and_return(double("Net::HTTP::GET Response", body: "instance_type\nami_id\nsecurity-groups", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/instance_type") - .and_return(double("Net::HTTP Response", body: "c1.medium", code: "200")) + .with("/2012-01-12/meta-data/instance_type", @get_req_token_header) + .and_return(double("Net::HTTP::GET Response", body: "c1.medium", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/ami_id") - .and_return(double("Net::HTTP Response", body: "ami-5d2dc934", code: "200")) + .with("/2012-01-12/meta-data/ami_id", @get_req_token_header) + .and_return(double("Net::HTTP::GET Response", body: "ami-5d2dc934", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/security-groups") - .and_return(double("Net::HTTP Response", body: "group1\ngroup2", code: "200")) + .with("/2012-01-12/meta-data/security-groups", @get_req_token_header) + .and_return(double("Net::HTTP::GET Response", body: "group1\ngroup2", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/user-data/") - .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) + .with("/2012-01-12/user-data/", @get_req_token_header) + .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) end it "recursively fetches all the eucalyptus metadata" do diff --git a/spec/unit/plugins/openstack_spec.rb b/spec/unit/plugins/openstack_spec.rb index 530059dd7..8700957f3 100644 --- a/spec/unit/plugins/openstack_spec.rb +++ b/spec/unit/plugins/openstack_spec.rb @@ -187,12 +187,16 @@ let(:http_client) { double("Net::HTTP", { :read_timeout= => nil, :keep_alive_timeout= => nil } ) } def allow_get(url, response_body) + token = "AQAEAE4UUd-3NE5EEeYYXKxicVfDOHsx0YSHFFSuCvo2GfCcxzJsvg==" + allow(http_client).to receive(:put) { double("Net::HTTP::PUT Response", body: token, code: "200") } allow(http_client).to receive(:get) - .with(url) + .with(url, {:'X-aws-ec2-metadata-token' =>token}) .and_return(double("HTTP Response", code: "200", body: response_body)) end def allow_get_response(url, response_body) + token = "AQAEAE4UUd-3NE5EEeYYXKxicVfDOHsx0YSHFFSuCvo2GfCcxzJsvg==" + allow(http_client).to receive(:put) { double("Net::HTTP::PUT Response", body: token, code: "200") } allow(http_client).to receive(:get_response) .with(url, nil, nil) .and_return(double("HTTP Response", code: "200", body: response_body)) From f4d8c30c35e9f285f966d4e7d72fda7fc72085d6 Mon Sep 17 00:00:00 2001 From: wilkosz Date: Mon, 27 Apr 2020 15:27:03 +1000 Subject: [PATCH 06/10] run lint correction on files --- lib/ohai/mixin/ec2_metadata.rb | 11 ++++++----- spec/unit/plugins/ec2_spec.rb | 2 +- spec/unit/plugins/eucalyptus_spec.rb | 2 +- spec/unit/plugins/openstack_spec.rb | 2 +- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/ohai/mixin/ec2_metadata.rb b/lib/ohai/mixin/ec2_metadata.rb index 9e5f15c11..4de7ed744 100644 --- a/lib/ohai/mixin/ec2_metadata.rb +++ b/lib/ohai/mixin/ec2_metadata.rb @@ -50,7 +50,7 @@ module Ec2Metadata def best_api_version @api_version ||= begin logger.trace("Mixin EC2: Fetching http://#{EC2_METADATA_ADDR}/ to determine the latest supported metadata release") - response = http_client.get("/", {:'X-aws-ec2-metadata-token' => v2_token}) + response = http_client.get("/", { 'X-aws-ec2-metadata-token': v2_token }) if response.code == "404" logger.trace("Mixin EC2: Received HTTP 404 from metadata server while determining API version, assuming 'latest'") return "latest" @@ -84,8 +84,9 @@ def http_client end def v2_token - http_client.put('/latest/api/token/', nil, {:'X-aws-ec2-metadata-token-ttl-seconds' => '60'})&.body + http_client.put("/latest/api/token/", nil, { 'X-aws-ec2-metadata-token-ttl-seconds': "60" })&.body end + # Get metadata for a given path and API version # # Typically, a 200 response is expected for valid metadata. @@ -95,7 +96,7 @@ def v2_token def metadata_get(id, api_version) path = "/#{api_version}/meta-data/#{id}" logger.trace("Mixin EC2: Fetching http://#{EC2_METADATA_ADDR}#{path}") - response = http_client.get(path, {:'X-aws-ec2-metadata-token' => v2_token}) + response = http_client.get(path, { 'X-aws-ec2-metadata-token': v2_token }) case response.code when "200" response.body @@ -176,13 +177,13 @@ def fetch_json_dir_metadata(id, api_version) def fetch_userdata logger.trace("Mixin EC2: Fetching http://#{EC2_METADATA_ADDR}/#{best_api_version}/user-data/") - response = http_client.get("/#{best_api_version}/user-data/", {:'X-aws-ec2-metadata-token' => v2_token}) + response = http_client.get("/#{best_api_version}/user-data/", { 'X-aws-ec2-metadata-token': v2_token }) response.code == "200" ? response.body : nil end def fetch_dynamic_data @fetch_dynamic_data ||= begin - response = http_client.get("/#{best_api_version}/dynamic/instance-identity/document/", {:'X-aws-ec2-metadata-token' => v2_token}) + response = http_client.get("/#{best_api_version}/dynamic/instance-identity/document/", { 'X-aws-ec2-metadata-token': v2_token }) if json?(response.body) && response.code == "200" FFI_Yajl::Parser.parse(response.body) diff --git a/spec/unit/plugins/ec2_spec.rb b/spec/unit/plugins/ec2_spec.rb index 5c26f926b..d586d94bc 100644 --- a/spec/unit/plugins/ec2_spec.rb +++ b/spec/unit/plugins/ec2_spec.rb @@ -49,7 +49,7 @@ allow(t).to receive(:connect_nonblock).and_raise(Errno::EINPROGRESS) allow(Socket).to receive(:new).and_return(t) token = "AQAEAE4UUd-3NE5EEeYYXKxicVfDOHsx0YSHFFSuCvo2GfCcxzJsvg==" - @get_req_token_header = {:'X-aws-ec2-metadata-token' => token} + @get_req_token_header = { 'X-aws-ec2-metadata-token': token } allow(@http_client).to receive(:put) { double("Net::HTTP::PUT Response", body: token, code: "200") } expect(@http_client).to receive(:get) .with("/", @get_req_token_header) diff --git a/spec/unit/plugins/eucalyptus_spec.rb b/spec/unit/plugins/eucalyptus_spec.rb index d27298a47..2f27d3b3c 100644 --- a/spec/unit/plugins/eucalyptus_spec.rb +++ b/spec/unit/plugins/eucalyptus_spec.rb @@ -34,7 +34,7 @@ before do @http_client = double("Net::HTTP client") @token = "AQAEAE4UUd-3NE5EEeYYXKxicVfDOHsx0YSHFFSuCvo2GfCcxzJsvg==" - @get_req_token_header = {:'X-aws-ec2-metadata-token' => @token} + @get_req_token_header = { 'X-aws-ec2-metadata-token': @token } allow(plugin).to receive(:http_client).and_return(@http_client) allow(@http_client).to receive(:put) { double("Net::HTTP::PUT Response", body: @token, code: "200") } diff --git a/spec/unit/plugins/openstack_spec.rb b/spec/unit/plugins/openstack_spec.rb index 8700957f3..7964aee1e 100644 --- a/spec/unit/plugins/openstack_spec.rb +++ b/spec/unit/plugins/openstack_spec.rb @@ -190,7 +190,7 @@ def allow_get(url, response_body) token = "AQAEAE4UUd-3NE5EEeYYXKxicVfDOHsx0YSHFFSuCvo2GfCcxzJsvg==" allow(http_client).to receive(:put) { double("Net::HTTP::PUT Response", body: token, code: "200") } allow(http_client).to receive(:get) - .with(url, {:'X-aws-ec2-metadata-token' =>token}) + .with(url, { 'X-aws-ec2-metadata-token': token }) .and_return(double("HTTP Response", code: "200", body: response_body)) end From 946ed9f79aebba78df1c774346c796bf923d251c Mon Sep 17 00:00:00 2001 From: wilkosz Date: Mon, 27 Apr 2020 15:27:03 +1000 Subject: [PATCH 07/10] run lint correction on files Signed-off-by: wilkosz --- lib/ohai/mixin/ec2_metadata.rb | 11 ++++++----- spec/unit/plugins/ec2_spec.rb | 2 +- spec/unit/plugins/eucalyptus_spec.rb | 2 +- spec/unit/plugins/openstack_spec.rb | 2 +- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/ohai/mixin/ec2_metadata.rb b/lib/ohai/mixin/ec2_metadata.rb index 9e5f15c11..4de7ed744 100644 --- a/lib/ohai/mixin/ec2_metadata.rb +++ b/lib/ohai/mixin/ec2_metadata.rb @@ -50,7 +50,7 @@ module Ec2Metadata def best_api_version @api_version ||= begin logger.trace("Mixin EC2: Fetching http://#{EC2_METADATA_ADDR}/ to determine the latest supported metadata release") - response = http_client.get("/", {:'X-aws-ec2-metadata-token' => v2_token}) + response = http_client.get("/", { 'X-aws-ec2-metadata-token': v2_token }) if response.code == "404" logger.trace("Mixin EC2: Received HTTP 404 from metadata server while determining API version, assuming 'latest'") return "latest" @@ -84,8 +84,9 @@ def http_client end def v2_token - http_client.put('/latest/api/token/', nil, {:'X-aws-ec2-metadata-token-ttl-seconds' => '60'})&.body + http_client.put("/latest/api/token/", nil, { 'X-aws-ec2-metadata-token-ttl-seconds': "60" })&.body end + # Get metadata for a given path and API version # # Typically, a 200 response is expected for valid metadata. @@ -95,7 +96,7 @@ def v2_token def metadata_get(id, api_version) path = "/#{api_version}/meta-data/#{id}" logger.trace("Mixin EC2: Fetching http://#{EC2_METADATA_ADDR}#{path}") - response = http_client.get(path, {:'X-aws-ec2-metadata-token' => v2_token}) + response = http_client.get(path, { 'X-aws-ec2-metadata-token': v2_token }) case response.code when "200" response.body @@ -176,13 +177,13 @@ def fetch_json_dir_metadata(id, api_version) def fetch_userdata logger.trace("Mixin EC2: Fetching http://#{EC2_METADATA_ADDR}/#{best_api_version}/user-data/") - response = http_client.get("/#{best_api_version}/user-data/", {:'X-aws-ec2-metadata-token' => v2_token}) + response = http_client.get("/#{best_api_version}/user-data/", { 'X-aws-ec2-metadata-token': v2_token }) response.code == "200" ? response.body : nil end def fetch_dynamic_data @fetch_dynamic_data ||= begin - response = http_client.get("/#{best_api_version}/dynamic/instance-identity/document/", {:'X-aws-ec2-metadata-token' => v2_token}) + response = http_client.get("/#{best_api_version}/dynamic/instance-identity/document/", { 'X-aws-ec2-metadata-token': v2_token }) if json?(response.body) && response.code == "200" FFI_Yajl::Parser.parse(response.body) diff --git a/spec/unit/plugins/ec2_spec.rb b/spec/unit/plugins/ec2_spec.rb index 5c26f926b..d586d94bc 100644 --- a/spec/unit/plugins/ec2_spec.rb +++ b/spec/unit/plugins/ec2_spec.rb @@ -49,7 +49,7 @@ allow(t).to receive(:connect_nonblock).and_raise(Errno::EINPROGRESS) allow(Socket).to receive(:new).and_return(t) token = "AQAEAE4UUd-3NE5EEeYYXKxicVfDOHsx0YSHFFSuCvo2GfCcxzJsvg==" - @get_req_token_header = {:'X-aws-ec2-metadata-token' => token} + @get_req_token_header = { 'X-aws-ec2-metadata-token': token } allow(@http_client).to receive(:put) { double("Net::HTTP::PUT Response", body: token, code: "200") } expect(@http_client).to receive(:get) .with("/", @get_req_token_header) diff --git a/spec/unit/plugins/eucalyptus_spec.rb b/spec/unit/plugins/eucalyptus_spec.rb index d27298a47..2f27d3b3c 100644 --- a/spec/unit/plugins/eucalyptus_spec.rb +++ b/spec/unit/plugins/eucalyptus_spec.rb @@ -34,7 +34,7 @@ before do @http_client = double("Net::HTTP client") @token = "AQAEAE4UUd-3NE5EEeYYXKxicVfDOHsx0YSHFFSuCvo2GfCcxzJsvg==" - @get_req_token_header = {:'X-aws-ec2-metadata-token' => @token} + @get_req_token_header = { 'X-aws-ec2-metadata-token': @token } allow(plugin).to receive(:http_client).and_return(@http_client) allow(@http_client).to receive(:put) { double("Net::HTTP::PUT Response", body: @token, code: "200") } diff --git a/spec/unit/plugins/openstack_spec.rb b/spec/unit/plugins/openstack_spec.rb index 8700957f3..7964aee1e 100644 --- a/spec/unit/plugins/openstack_spec.rb +++ b/spec/unit/plugins/openstack_spec.rb @@ -190,7 +190,7 @@ def allow_get(url, response_body) token = "AQAEAE4UUd-3NE5EEeYYXKxicVfDOHsx0YSHFFSuCvo2GfCcxzJsvg==" allow(http_client).to receive(:put) { double("Net::HTTP::PUT Response", body: token, code: "200") } allow(http_client).to receive(:get) - .with(url, {:'X-aws-ec2-metadata-token' =>token}) + .with(url, { 'X-aws-ec2-metadata-token': token }) .and_return(double("HTTP Response", code: "200", body: response_body)) end From 15bfc271b6146a865dbb984405695fdf2adc2f1f Mon Sep 17 00:00:00 2001 From: sawanoboly Date: Wed, 30 Sep 2020 13:44:41 +0900 Subject: [PATCH 08/10] Update ec2_metadata to use IMDSV2 get token once Signed-off-by: sawanoboly add new context: when metadata service is disabled --- lib/ohai/mixin/ec2_metadata.rb | 2 +- spec/unit/mixin/ec2_metadata_spec.rb | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/ohai/mixin/ec2_metadata.rb b/lib/ohai/mixin/ec2_metadata.rb index 4de7ed744..309fd9835 100644 --- a/lib/ohai/mixin/ec2_metadata.rb +++ b/lib/ohai/mixin/ec2_metadata.rb @@ -84,7 +84,7 @@ def http_client end def v2_token - http_client.put("/latest/api/token/", nil, { 'X-aws-ec2-metadata-token-ttl-seconds': "60" })&.body + @v2_token ||= http_client.put('/latest/api/token', nil, { 'X-aws-ec2-metadata-token-ttl-seconds': "60" })&.body end # Get metadata for a given path and API version diff --git a/spec/unit/mixin/ec2_metadata_spec.rb b/spec/unit/mixin/ec2_metadata_spec.rb index 5d5286b87..89c3a5c7c 100644 --- a/spec/unit/mixin/ec2_metadata_spec.rb +++ b/spec/unit/mixin/ec2_metadata_spec.rb @@ -73,6 +73,13 @@ expect { mixin.best_api_version }.to raise_error(RuntimeError) end end + + context "when metadata service is disabled" do + let(:response) { double("Net::HTTP::PUT Response", body: "403 - Forbidden", code: "403") } + it "raises an error" do + expect { mixin.best_api_version }.to raise_error(RuntimeError) + end + end end describe "#metadata_get" do From 079decf4bde71c046e59a9784f5b030db51c68dc Mon Sep 17 00:00:00 2001 From: sawanoboly Date: Thu, 10 Dec 2020 14:48:39 +0900 Subject: [PATCH 09/10] Style/StringLiterals Signed-off-by: sawanoboly --- lib/ohai/mixin/ec2_metadata.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ohai/mixin/ec2_metadata.rb b/lib/ohai/mixin/ec2_metadata.rb index c5cc59882..d183b962d 100644 --- a/lib/ohai/mixin/ec2_metadata.rb +++ b/lib/ohai/mixin/ec2_metadata.rb @@ -85,7 +85,7 @@ def http_client end def v2_token - @v2_token ||= http_client.put('/latest/api/token', nil, { 'X-aws-ec2-metadata-token-ttl-seconds': "60" })&.body + @v2_token ||= http_client.put("/latest/api/token", nil, { 'X-aws-ec2-metadata-token-ttl-seconds': "60" })&.body end # Get metadata for a given path and API version From dc6955ed7b9a04f58991857605513da2d17bbb44 Mon Sep 17 00:00:00 2001 From: sawanoboly Date: Thu, 10 Dec 2020 15:59:08 +0900 Subject: [PATCH 10/10] include info for returns of meta-data/iam/ Signed-off-by: sawanoboly --- spec/unit/mixin/ec2_metadata_spec.rb | 12 ++-- spec/unit/plugins/ec2_spec.rb | 99 ++++++++++++++-------------- spec/unit/plugins/eucalyptus_spec.rb | 12 ++-- 3 files changed, 61 insertions(+), 62 deletions(-) diff --git a/spec/unit/mixin/ec2_metadata_spec.rb b/spec/unit/mixin/ec2_metadata_spec.rb index fd53208bd..4579686b4 100644 --- a/spec/unit/mixin/ec2_metadata_spec.rb +++ b/spec/unit/mixin/ec2_metadata_spec.rb @@ -35,14 +35,14 @@ describe "#best_api_version" do context "with a sorted list of metadata versions" do - let(:response) { double("Net::HTTP::GET Response", body: "1.0\n2011-05-01\n2012-01-12\nUnsupported", code: "200") } + let(:response) { double("Net::HTTP Response", body: "1.0\n2011-05-01\n2012-01-12\nUnsupported", code: "200") } it "returns the most recent version" do expect(mixin.best_api_version).to eq("2012-01-12") end end context "with an unsorted list of metadata versions" do - let(:response) { double("Net::HTTP::GET Response", body: "1.0\n2009-04-04\n2007-03-01\n2011-05-01\n2008-09-01\nUnsupported", code: "200") } + let(:response) { double("Net::HTTP Response", body: "1.0\n2009-04-04\n2007-03-01\n2011-05-01\n2008-09-01\nUnsupported", code: "200") } it "returns the most recent version (using string sort)" do expect(mixin.best_api_version).to eq("2011-05-01") @@ -50,7 +50,7 @@ end context "when no supported versions are found" do - let(:response) { double("Net::HTTP::GET Response", body: "2020-01-01\nUnsupported", code: "200") } + let(:response) { double("Net::HTTP Response", body: "2020-01-01\nUnsupported", code: "200") } it "raises an error" do expect { mixin.best_api_version }.to raise_error(RuntimeError) @@ -59,7 +59,7 @@ # Presume 'latest' when we get a 404 for Eucalyptus back-compat context "when the response code is 404" do - let(:response) { double("Net::HTTP::GET Response", code: "404") } + let(:response) { double("Net::HTTP Response", code: "404") } it "returns 'latest' as the version" do expect(mixin.best_api_version).to eq("latest") @@ -67,7 +67,7 @@ end context "when the response code is unexpected" do - let(:response) { double("Net::HTTP::GET Response", body: "1.0\n2011-05-01\n2012-01-12\nUnsupported", code: "418") } + let(:response) { double("Net::HTTP Response", body: "1.0\n2011-05-01\n2012-01-12\nUnsupported", code: "418") } it "raises an error" do expect { mixin.best_api_version }.to raise_error(RuntimeError) @@ -84,7 +84,7 @@ describe "#metadata_get" do context "when the response code is unexpected" do - let(:response) { double("Net::HTTP::GET Response", body: "", code: "418") } + let(:response) { double("Net::HTTP Response", body: "", code: "418") } it "raises an error" do expect { mixin.metadata_get("", "2012-01-12") }.to raise_error(RuntimeError) diff --git a/spec/unit/plugins/ec2_spec.rb b/spec/unit/plugins/ec2_spec.rb index dbb197158..75a9c529c 100644 --- a/spec/unit/plugins/ec2_spec.rb +++ b/spec/unit/plugins/ec2_spec.rb @@ -51,7 +51,7 @@ allow(@http_client).to receive(:put) { double("Net::HTTP::PUT Response", body: token, code: "200") } expect(@http_client).to receive(:get) .with("/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "2012-01-12", code: "200")) + .and_return(double("Net::HTTP Response", body: "2012-01-12", code: "200")) end context "with common metadata paths" do @@ -67,14 +67,14 @@ paths.each do |name, body| expect(@http_client).to receive(:get) .with("/2012-01-12/#{name}", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: body, code: "200")) + .and_return(double("Net::HTTP Response", body: body, code: "200")) end expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) + .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) + .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -88,14 +88,14 @@ paths.each do |name, body| expect(@http_client).to receive(:get) .with("/2012-01-12/#{name}", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: body, code: "200")) + .and_return(double("Net::HTTP Response", body: body, code: "200")) end expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) + .and_return(double("Net::HTTP Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) + .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -110,14 +110,14 @@ paths.each do |name, body| expect(@http_client).to receive(:get) .with("/2012-01-12/#{name}", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: body, code: "200")) + .and_return(double("Net::HTTP Response", body: body, code: "200")) end expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) + .and_return(double("Net::HTTP Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) + .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -132,14 +132,14 @@ paths.each do |name, body| expect(@http_client).to receive(:get) .with("/2012-01-12/#{name}", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: body, code: "200")) + .and_return(double("Net::HTTP Response", body: body, code: "200")) end expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) + .and_return(double("Net::HTTP Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "{\"region\":\"us-east-1\"}", code: "200")) + .and_return(double("Net::HTTP Response", body: "{\"region\":\"us-east-1\"}", code: "200")) plugin.run @@ -154,14 +154,14 @@ paths.each do |name, body| expect(@http_client).to receive(:get) .with("/2012-01-12/#{name}", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: body, code: "200")) + .and_return(double("Net::HTTP Response", body: body, code: "200")) end expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) + .and_return(double("Net::HTTP Response", body: "^_<8B>^H^HU^@^Csomething^@KT,)IU(I-.II^B^@^Qz^R^@^@^@", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "{\"availabilityZone\":\"us-east-1d\"}", code: "200")) + .and_return(double("Net::HTTP Response", body: "{\"availabilityZone\":\"us-east-1d\"}", code: "200")) plugin.run @@ -176,28 +176,28 @@ it "parses ec2 network/ directory as a multi-level hash" do expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "network/", code: "200")) + .and_return(double("Net::HTTP Response", body: "network/", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/network/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "interfaces/", code: "200")) + .and_return(double("Net::HTTP Response", body: "interfaces/", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/network/interfaces/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "macs/", code: "200")) + .and_return(double("Net::HTTP Response", body: "macs/", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/network/interfaces/macs/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "12:34:56:78:9a:bc/", code: "200")) + .and_return(double("Net::HTTP Response", body: "12:34:56:78:9a:bc/", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/network/interfaces/macs/12:34:56:78:9a:bc/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "public_hostname", code: "200")) + .and_return(double("Net::HTTP Response", body: "public_hostname", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/network/interfaces/macs/12:34:56:78:9a:bc/public_hostname", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "server17.opscode.com", code: "200")) + .and_return(double("Net::HTTP Response", body: "server17.opscode.com", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) + .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) + .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -213,22 +213,22 @@ it "parses ec2 iam/ directory and collect iam/security-credentials/" do expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "iam/", code: "200")) + .and_return(double("Net::HTTP Response", body: "iam/", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/iam/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "security-credentials/", code: "200")) + .and_return(double("Net::HTTP Response", body: "security-credentials/", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/iam/security-credentials/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "MyRole", code: "200")) + .and_return(double("Net::HTTP Response", body: "MyRole", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/iam/security-credentials/MyRole", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "{\n \"Code\" : \"Success\",\n \"LastUpdated\" : \"2012-08-22T07:47:22Z\",\n \"Type\" : \"AWS-HMAC\",\n \"AccessKeyId\" : \"AAAAAAAA\",\n \"SecretAccessKey\" : \"SSSSSSSS\",\n \"Token\" : \"12345678\",\n \"Expiration\" : \"2012-08-22T11:25:52Z\"\n}", code: "200")) + .and_return(double("Net::HTTP Response", body: "{\n \"Code\" : \"Success\",\n \"LastUpdated\" : \"2012-08-22T07:47:22Z\",\n \"Type\" : \"AWS-HMAC\",\n \"AccessKeyId\" : \"AAAAAAAA\",\n \"SecretAccessKey\" : \"SSSSSSSS\",\n \"Token\" : \"12345678\",\n \"Expiration\" : \"2012-08-22T11:25:52Z\"\n}", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) + .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) + .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -246,28 +246,27 @@ it "parses ec2 iam/ directory and collect info and role_name and NOT collect iam/security-credentials/" do expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "iam/", code: "200")) + .and_return(double("Net::HTTP Response", body: "iam/", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/iam/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "security-credentials/", code: "200")) + .and_return(double("Net::HTTP Response", body: "info\nsecurity-credentials/", code: "200")) expect(@http_client).to receive(:get) - .with("/2012-01-12/meta-data/iam/info") + .with("/2012-01-12/meta-data/iam/info", @get_req_token_header) .and_return(double("Net::HTTP Response", body: "{\n \"Code\" : \"Success\",\n \"LastUpdated\" : \"2020-10-08T20:47:08Z\",\n \"InstanceProfileArn\" : \"arn:aws:iam::111111111111:instance-profile/my_profile\",\n \"InstanceProfileId\" : \"AAAAAAAAAAAAAAAAAAAAA\"\n}", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/iam/security-credentials/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "MyRole", code: "200")) + .and_return(double("Net::HTTP Response", body: "MyRole", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/iam/security-credentials/MyRole", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "{\n \"Code\" : \"Success\",\n \"LastUpdated\" : \"2012-08-22T07:47:22Z\",\n \"Type\" : \"AWS-HMAC\",\n \"AccessKeyId\" : \"AAAAAAAA\",\n \"SecretAccessKey\" : \"SSSSSSSS\",\n \"Token\" : \"12345678\",\n \"Expiration\" : \"2012-08-22T11:25:52Z\"\n}", code: "200")) + .and_return(double("Net::HTTP Response", body: "{\n \"Code\" : \"Success\",\n \"LastUpdated\" : \"2012-08-22T07:47:22Z\",\n \"Type\" : \"AWS-HMAC\",\n \"AccessKeyId\" : \"AAAAAAAA\",\n \"SecretAccessKey\" : \"SSSSSSSS\",\n \"Token\" : \"12345678\",\n \"Expiration\" : \"2012-08-22T11:25:52Z\"\n}", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) + .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) + .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run - expect(plugin[:ec2]).not_to be_nil expect(plugin[:ec2]["iam"]["info"]["InstanceProfileId"]).to eql "AAAAAAAAAAAAAAAAAAAAA" expect(plugin[:ec2]["iam"]["security-credentials"]).to be_nil @@ -278,7 +277,7 @@ it "ignores \"./\" and \"../\" on ec2 metadata paths to avoid infinity loops" do expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: ".\n./\n..\n../\npath1/.\npath2/./\npath3/..\npath4/../", code: "200")) + .and_return(double("Net::HTTP Response", body: ".\n./\n..\n../\npath1/.\npath2/./\npath3/..\npath4/../", code: "200")) expect(@http_client).not_to receive(:get) .with("/2012-01-12/meta-data/.", @get_req_token_header) expect(@http_client).not_to receive(:get) @@ -292,22 +291,22 @@ expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/path1/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "", code: "200")) + .and_return(double("Net::HTTP Response", body: "", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/path2/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "", code: "200")) + .and_return(double("Net::HTTP Response", body: "", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/path3/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "", code: "200")) + .and_return(double("Net::HTTP Response", body: "", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/path4/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "", code: "200")) + .and_return(double("Net::HTTP Response", body: "", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) + .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) + .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run @@ -317,19 +316,19 @@ it "completes the run despite unavailable metadata" do expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "metrics/", code: "200")) + .and_return(double("Net::HTTP Response", body: "metrics/", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/metrics/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "vhostmd", code: "200")) + .and_return(double("Net::HTTP Response", body: "vhostmd", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/metrics/vhostmd", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "", code: "404")) + .and_return(double("Net::HTTP Response", body: "", code: "404")) expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) + .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/dynamic/instance-identity/document/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) + .and_return(double("Net::HTTP Response", body: "{\"accountId\":\"4815162342\"}", code: "200")) plugin.run diff --git a/spec/unit/plugins/eucalyptus_spec.rb b/spec/unit/plugins/eucalyptus_spec.rb index ad1d22ca8..24ac95d87 100644 --- a/spec/unit/plugins/eucalyptus_spec.rb +++ b/spec/unit/plugins/eucalyptus_spec.rb @@ -40,22 +40,22 @@ expect(@http_client).to receive(:get) .with("/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "2012-01-12", code: "200")) + .and_return(double("Net::HTTP Response", body: "2012-01-12", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "instance_type\nami_id\nsecurity-groups", code: "200")) + .and_return(double("Net::HTTP Response", body: "instance_type\nami_id\nsecurity-groups", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/instance_type", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "c1.medium", code: "200")) + .and_return(double("Net::HTTP Response", body: "c1.medium", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/ami_id", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "ami-5d2dc934", code: "200")) + .and_return(double("Net::HTTP Response", body: "ami-5d2dc934", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/meta-data/security-groups", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "group1\ngroup2", code: "200")) + .and_return(double("Net::HTTP Response", body: "group1\ngroup2", code: "200")) expect(@http_client).to receive(:get) .with("/2012-01-12/user-data/", @get_req_token_header) - .and_return(double("Net::HTTP::GET Response", body: "By the pricking of my thumb...", code: "200")) + .and_return(double("Net::HTTP Response", body: "By the pricking of my thumb...", code: "200")) end it "recursively fetches all the eucalyptus metadata" do