Sha256: 0a6ed43d237f31a80c58584c29a4c2e005ba3221614edf0696d2ef15783e2b68

Contents?: true

Size: 1.81 KB

Versions: 60

Compression:

Stored size: 1.81 KB

Contents

require 'spec_helper'
require 'facter/gce/metadata'

describe Facter::GCE::Metadata, :if => Facter.json? do

  describe "contacting the metadata server" do
    it "retries the request when a connection error is thrown" do
      subject.stubs(:open).returns(stub(:read => '{"hello": "world"}'))
      seq = sequence('open-uri seq')
      Timeout.expects(:timeout).with(0.05).twice.in_sequence(seq).raises(Timeout::Error)
      Timeout.expects(:timeout).with(0.05).once.in_sequence(seq).yields
      expect(subject.fetch).to eq({'hello' => 'world'})
    end

    it "logs the exception when all retries failed" do
      Timeout.expects(:timeout).with(0.05).times(3).raises(Timeout::Error)
      Facter.expects(:log_exception).with(instance_of(Timeout::Error), instance_of(String))
      expect(subject.fetch).to be_nil
    end
  end

  describe "parsing the metadata response" do
    let(:body) { my_fixture_read('metadata.json') }
    before do
      subject.stubs(:open).returns(stub(:read => body))
    end

    it "transforms hash values with the 'image' key" do
      expect(subject.fetch['instance']['image']).to eq 'centos6'
    end

    it "transforms hash values with the 'machineType' key" do
      expect(subject.fetch['instance']['machineType']).to eq 'n1-standard-1'
    end

    it "transforms hash values with the 'zone' key" do
      expect(subject.fetch['instance']['zone']).to eq 'us-central1-b'
    end

    it "transforms hash values with the 'network' key" do
      expect(subject.fetch['instance']['networkInterfaces'][0]['network']).to eq 'default'
    end

    it "splits up the elements of the 'sshKeys' value into an array" do
      expect(subject.fetch['project']['attributes']['sshKeys'][0]).to match(/justin:ssh-rsa/)
      expect(subject.fetch['project']['attributes']['sshKeys'][1]).to match(/adrien:ssh-rsa/)
    end
  end
end

Version data entries

60 entries across 60 versions & 1 rubygems

Version Path
facter-2.5.0 spec/unit/gce/metadata_spec.rb
facter-2.5.0-x86-mingw32 spec/unit/gce/metadata_spec.rb
facter-2.5.0-x64-mingw32 spec/unit/gce/metadata_spec.rb
facter-2.5.0-universal-darwin spec/unit/gce/metadata_spec.rb
facter-2.4.6 spec/unit/gce/metadata_spec.rb
facter-2.4.6-x86-mingw32 spec/unit/gce/metadata_spec.rb
facter-2.4.6-x64-mingw32 spec/unit/gce/metadata_spec.rb
facter-2.4.6-universal-darwin spec/unit/gce/metadata_spec.rb
facter-2.4.5 spec/unit/gce/metadata_spec.rb
facter-2.4.5-x86-mingw32 spec/unit/gce/metadata_spec.rb
facter-2.4.5-x64-mingw32 spec/unit/gce/metadata_spec.rb
facter-2.4.5-universal-darwin spec/unit/gce/metadata_spec.rb
facter-2.4.4 spec/unit/gce/metadata_spec.rb
facter-2.4.4-x86-mingw32 spec/unit/gce/metadata_spec.rb
facter-2.4.4-x64-mingw32 spec/unit/gce/metadata_spec.rb
facter-2.4.4-universal-darwin spec/unit/gce/metadata_spec.rb
facter-2.4.3 spec/unit/gce/metadata_spec.rb
facter-2.4.3-x86-mingw32 spec/unit/gce/metadata_spec.rb
facter-2.4.3-x64-mingw32 spec/unit/gce/metadata_spec.rb
facter-2.4.3-universal-darwin spec/unit/gce/metadata_spec.rb