#-- # 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 security groups " do setup do @ec2 = EC2::Base.new( :access_key_id => "not a key", :secret_access_key => "not a secret" ) @create_security_group_response_body = <<-RESPONSE true RESPONSE @delete_security_group_response_body = <<-RESPONSE true RESPONSE @describe_security_groups_response_body = <<-RESPONSE UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM WebServers Web tcp 80 80 0.0.0.0/0 UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM RangedPortsBySource A tcp 6000 7000 RESPONSE @authorize_security_group_ingress_response_body = <<-RESPONSE true RESPONSE @revoke_security_group_ingress_response_body = <<-RESPONSE true RESPONSE end specify "should be able to be created" do @ec2.stubs(:make_request).with('CreateSecurityGroup', {"GroupName"=>"WebServers", "GroupDescription"=>"Web"}). returns stub(:body => @create_security_group_response_body, :is_a? => true) @ec2.create_security_group( :group_name => "WebServers", :group_description => "Web" ).should.be.an.instance_of EC2::Response end specify "method create_security_group should reject bad arguments" do @ec2.stubs(:make_request).with('CreateSecurityGroup', {"GroupName"=>"WebServers", "GroupDescription"=>"Web"}). returns stub(:body => @create_security_group_response_body, :is_a? => true) lambda { @ec2.create_security_group( :group_name => "WebServers", :group_description => "Web" ) }.should.not.raise(EC2::ArgumentError) lambda { @ec2.create_security_group() }.should.raise(EC2::ArgumentError) # :group_name can't be nil or empty lambda { @ec2.create_security_group( :group_name => "", :group_description => "Web" ) }.should.raise(EC2::ArgumentError) lambda { @ec2.create_security_group( :group_name => nil, :group_description => "Web" ) }.should.raise(EC2::ArgumentError) # :group_description can't be nil or empty lambda { @ec2.create_security_group( :group_name => "WebServers", :group_description => "" ) }.should.raise(EC2::ArgumentError) lambda { @ec2.create_security_group( :group_name => "WebServers", :group_description => nil ) }.should.raise(EC2::ArgumentError) end specify "should be able to be deleted" do @ec2.stubs(:make_request).with('DeleteSecurityGroup', {"GroupName"=>"WebServers"}). returns stub(:body => @delete_security_group_response_body, :is_a? => true) @ec2.delete_security_group( :group_name => "WebServers" ).should.be.an.instance_of EC2::Response end specify "method delete_security_group should reject bad arguments" do @ec2.stubs(:make_request).with('DeleteSecurityGroup', {"GroupName"=>"WebServers"}). returns stub(:body => @delete_security_group_response_body, :is_a? => true) lambda { @ec2.delete_security_group( :group_name => "WebServers" ) }.should.not.raise(EC2::ArgumentError) lambda { @ec2.delete_security_group() }.should.raise(EC2::ArgumentError) # :group_name can't be nil or empty lambda { @ec2.delete_security_group( :group_name => "" ) }.should.raise(EC2::ArgumentError) lambda { @ec2.delete_security_group( :group_name => nil ) }.should.raise(EC2::ArgumentError) end specify "should be able to be described with describe_security_groups" do @ec2.stubs(:make_request).with('DescribeSecurityGroups', { "GroupName.1" => "WebServers", "GroupName.2" => "RangedPortsBySource" }). returns stub(:body => @describe_security_groups_response_body, :is_a? => true) @ec2.describe_security_groups( :group_name => ["WebServers", "RangedPortsBySource"] ).should.be.an.instance_of EC2::Response response = @ec2.describe_security_groups( :group_name => ["WebServers", "RangedPortsBySource"] ) response.securityGroupInfo.item[0].ownerId.should.equal "UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM" response.securityGroupInfo.item[0].groupName.should.equal "WebServers" response.securityGroupInfo.item[0].groupDescription.should.equal "Web" response.securityGroupInfo.item[0].ipPermissions.item[0].ipProtocol.should.equal "tcp" response.securityGroupInfo.item[0].ipPermissions.item[0].fromPort.should.equal "80" response.securityGroupInfo.item[0].ipPermissions.item[0].toPort.should.equal "80" response.securityGroupInfo.item[0].ipPermissions.item[0].groups.should.be.nil response.securityGroupInfo.item[0].ipPermissions.item[0].ipRanges.item[0].cidrIp.should.equal "0.0.0.0/0" response.securityGroupInfo.item[1].ownerId.should.equal "UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM" response.securityGroupInfo.item[1].groupName.should.equal "RangedPortsBySource" response.securityGroupInfo.item[1].groupDescription.should.equal "A" response.securityGroupInfo.item[1].ipPermissions.item[0].ipProtocol.should.equal "tcp" response.securityGroupInfo.item[1].ipPermissions.item[0].fromPort.should.equal "6000" response.securityGroupInfo.item[1].ipPermissions.item[0].toPort.should.equal "7000" response.securityGroupInfo.item[1].ipPermissions.item[0].groups.should.be.nil response.securityGroupInfo.item[1].ipPermissions.item[0].ipRanges.should.be.nil end specify "method describe_security_groups should reject bad arguments" do @ec2.stubs(:make_request).with('DescribeSecurityGroups', {"GroupName.1"=>"WebServers"}). returns stub(:body => @describe_security_groups_response_body, :is_a? => true) lambda { @ec2.describe_security_groups( :group_name => "WebServers" ) }.should.not.raise(EC2::ArgumentError) end specify "permissions should be able to be added to a security group with authorize_security_group_ingress." do @ec2.stubs(:make_request).with('AuthorizeSecurityGroupIngress', { "GroupName"=>"WebServers", "IpProtocol"=>"tcp", "FromPort"=>"8000", "ToPort"=>"80", "CidrIp"=>"0.0.0.0/24", "SourceSecurityGroupName"=>"Source SG Name", "SourceSecurityGroupOwnerId"=>"123"}). returns stub(:body => @authorize_security_group_ingress_response_body, :is_a? => true) @ec2.authorize_security_group_ingress( :group_name => "WebServers", :ip_protocol => "tcp", :from_port => "8000", :to_port => "80", :cidr_ip => "0.0.0.0/24", :source_security_group_name => "Source SG Name", :source_security_group_owner_id => "123" ).should.be.an.instance_of EC2::Response end specify "permissions should be able to be revoked from a security group with revoke_security_group_ingress." do @ec2.stubs(:make_request).with('RevokeSecurityGroupIngress', { "GroupName"=>"WebServers", "IpProtocol"=>"tcp", "FromPort"=>"8000", "ToPort"=>"80", "CidrIp"=>"0.0.0.0/24", "SourceSecurityGroupName"=>"Source SG Name", "SourceSecurityGroupOwnerId"=>"123"}). returns stub(:body => @revoke_security_group_ingress_response_body, :is_a? => true) @ec2.revoke_security_group_ingress( :group_name => "WebServers", :ip_protocol => "tcp", :from_port => "8000", :to_port => "80", :cidr_ip => "0.0.0.0/24", :source_security_group_name => "Source SG Name", :source_security_group_owner_id => "123" ).should.be.an.instance_of EC2::Response end end