#-- # Amazon Web Services EC2 Query API Ruby library # # Ruby Gem Name:: amazon-ec2 # Author:: Glenn Rempe (mailto:grempe@rubyforge.org) # Copyright:: Copyright (c) 2007-2008 Glenn Rempe # License:: Distributes under the same terms as Ruby # Home:: http://amazon-ec2.rubyforge.org #++ require File.dirname(__FILE__) + '/test_helper.rb' context "EC2 elastic IP addresses " do setup do @ec2 = EC2::Base.new( :access_key_id => "not a key", :secret_access_key => "not a secret" ) @allocate_address_body = <<-RESPONSE 67.202.55.255 RESPONSE @describe_addresses_response_body = <<-RESPONSE i-28a64341 67.202.55.255 RESPONSE @release_address_response_body = <<-RESPONSE true RESPONSE @associate_address_response_body = <<-RESPONSE true RESPONSE @disassociate_address_response_body = <<-RESPONSE true RESPONSE end specify "should be able to be created" do @ec2.stubs(:make_request).with('AllocateAddress', {}). returns stub(:body => @allocate_address_body, :is_a? => true) @ec2.allocate_address.should.be.an.instance_of EC2::Response response = @ec2.allocate_address response.publicIp.should.equal "67.202.55.255" end #specify "method create_keypair should reject bad arguments" do # @ec2.stubs(:make_request).with('CreateKeyPair', {"KeyName"=>"example-key-name"}). # returns stub(:body => @create_keypair_response_body, :is_a? => true) # # lambda { @ec2.create_keypair( :key_name => "example-key-name" ) }.should.not.raise(EC2::ArgumentError) # lambda { @ec2.create_keypair() }.should.raise(EC2::ArgumentError) # lambda { @ec2.create_keypair( :key_name => nil ) }.should.raise(EC2::ArgumentError) # lambda { @ec2.create_keypair( :key_name => "" ) }.should.raise(EC2::ArgumentError) #end specify "should be able to be described with describe_addresses" do @ec2.stubs(:make_request).with('DescribeAddresses', {"PublicIp.1"=>"67.202.55.255"}). returns stub(:body => @describe_addresses_response_body, :is_a? => true) @ec2.describe_addresses( :public_ip => "67.202.55.255" ).should.be.an.instance_of EC2::Response response = @ec2.describe_addresses( :public_ip => "67.202.55.255" ) response.addressesSet.item[0].instanceId.should.equal "i-28a64341" response.addressesSet.item[0].publicIp.should.equal "67.202.55.255" end specify "should be able to be released with release_address" do @ec2.stubs(:make_request).with('ReleaseAddress', {"PublicIp" => "67.202.55.255"}). returns stub(:body => @release_address_response_body, :is_a? => true) @ec2.release_address( :public_ip => "67.202.55.255" ).should.be.an.instance_of EC2::Response response = @ec2.release_address( :public_ip => "67.202.55.255" ) response.return.should.equal "true" end specify "should be able to be associated with an instance with associate_address" do @ec2.stubs(:make_request).with('AssociateAddress', {"InstanceId" => "i-2ea64347", "PublicIp"=>"67.202.55.255"}). returns stub(:body => @associate_address_response_body, :is_a? => true) @ec2.associate_address( :instance_id => "i-2ea64347", :public_ip => "67.202.55.255" ).should.be.an.instance_of EC2::Response response = @ec2.associate_address( :instance_id => "i-2ea64347", :public_ip => "67.202.55.255" ) response.return.should.equal "true" end specify "method associate_address should reject bad arguments" do @ec2.stubs(:make_request).with('AssociateAddress', {"InstanceId" => "i-2ea64347", "PublicIp"=>"67.202.55.255"}). returns stub(:body => @associate_address_response_body, :is_a? => true) lambda { @ec2.associate_address( :instance_id => "i-2ea64347", :public_ip => "67.202.55.255" ) }.should.not.raise(EC2::ArgumentError) lambda { @ec2.associate_address() }.should.raise(EC2::ArgumentError) lambda { @ec2.associate_address( :instance_id => nil ) }.should.raise(EC2::ArgumentError) lambda { @ec2.associate_address( :public_ip => "" ) }.should.raise(EC2::ArgumentError) end specify "should be able to be disassociated with an instance with disassociate_address" do @ec2.stubs(:make_request).with('DisassociateAddress', {'PublicIp' => '67.202.55.255'}). returns stub(:body => @disassociate_address_response_body, :is_a? => true) @ec2.disassociate_address( :public_ip => "67.202.55.255" ).should.be.an.instance_of EC2::Response response = @ec2.disassociate_address( :public_ip => "67.202.55.255" ) response.return.should.equal "true" end specify "method disassociate_address should reject bad arguments" do @ec2.stubs(:make_request).with('DisassociateAddress', {'PublicIp' => '67.202.55.255'}). returns stub(:body => @disassociate_address_response_body, :is_a? => true) lambda { @ec2.disassociate_address( :public_ip => "67.202.55.255" ) }.should.not.raise(EC2::ArgumentError) lambda { @ec2.disassociate_address() }.should.raise(EC2::ArgumentError) lambda { @ec2.disassociate_address( :public_ip => "" ) }.should.raise(EC2::ArgumentError) end end