mirror of
https://github.com/fog/fog-aws.git
synced 2022-11-09 13:50:52 -05:00
263 lines
9.8 KiB
Ruby
263 lines
9.8 KiB
Ruby
Shindo.tests('Fog::Compute[:aws] | volume requests', ['aws']) do
|
|
|
|
@volume_format = {
|
|
'availabilityZone' => String,
|
|
'createTime' => Time,
|
|
'encrypted' => Fog::Boolean,
|
|
'iops' => Fog::Nullable::Integer,
|
|
'requestId' => String,
|
|
'size' => Integer,
|
|
'snapshotId' => Fog::Nullable::String,
|
|
'status' => String,
|
|
'volumeId' => String,
|
|
'volumeType' => String
|
|
}
|
|
|
|
@volume_attachment_format = {
|
|
'attachTime' => Time,
|
|
'device' => String,
|
|
'instanceId' => String,
|
|
'requestId' => String,
|
|
'status' => String,
|
|
'volumeId' => String
|
|
}
|
|
|
|
@volume_status_format = {
|
|
'volumeStatusSet' => [{
|
|
'availabilityZone' => String,
|
|
'volumeId' => String,
|
|
'volumeStatus' => {
|
|
'status' => String,
|
|
'details' => [{
|
|
'name' => String,
|
|
'status' => String
|
|
}]
|
|
},
|
|
'actionsSet' => [{
|
|
'code' => String,
|
|
'description' => String,
|
|
'eventId' => String,
|
|
'eventType' => String
|
|
}],
|
|
'eventsSet' => [{
|
|
'description' => String,
|
|
'eventId' => String,
|
|
'eventType' => String,
|
|
'notBefore' => Time,
|
|
'notAfter' => Time
|
|
}]
|
|
}],
|
|
'requestId' => String
|
|
}
|
|
|
|
@volumes_format = {
|
|
'volumeSet' => [{
|
|
'availabilityZone' => String,
|
|
'attachmentSet' => Array,
|
|
'createTime' => Time,
|
|
'encrypted' => Fog::Boolean,
|
|
'iops' => Fog::Nullable::Integer,
|
|
'size' => Integer,
|
|
'snapshotId' => Fog::Nullable::String,
|
|
'kmsKeyId' => Fog::Nullable::String,
|
|
'status' => String,
|
|
'tagSet' => Hash,
|
|
'volumeId' => String,
|
|
'volumeType' => String
|
|
}],
|
|
'requestId' => String
|
|
}
|
|
|
|
@volume_modification_format = {
|
|
'endTime' => Fog::Nullable::Time,
|
|
'modificationState' => String,
|
|
'originalIops' => Fog::Nullable::Integer,
|
|
'originalSize' => Fog::Nullable::Integer,
|
|
'originalVolumeType' => Fog::Nullable::String,
|
|
'startTime' => Time,
|
|
'targetIops' => Fog::Nullable::Integer,
|
|
'targetSize' => Fog::Nullable::Integer,
|
|
'targetVolumeType' => Fog::Nullable::String,
|
|
'volumeId' => String,
|
|
}
|
|
|
|
@modify_volume_format = {
|
|
'requestId' => String,
|
|
'volumeModification' => @volume_modification_format
|
|
}
|
|
|
|
@describe_volume_modifications_format = {
|
|
'requestId' => String,
|
|
'volumeModificationSet' => [@volume_modification_format]
|
|
}
|
|
|
|
@server = Fog::Compute[:aws].servers.create
|
|
@server.wait_for { ready? }
|
|
|
|
tests('success') do
|
|
@volume_id = nil
|
|
|
|
tests('#create_volume').formats(@volume_format) do
|
|
data = Fog::Compute[:aws].create_volume(@server.availability_zone, 1).body
|
|
@volume_id = data['volumeId']
|
|
data
|
|
end
|
|
|
|
Fog::Compute[:aws].delete_volume(@volume_id)
|
|
|
|
tests('#create_volume from snapshot').formats(@volume_format) do
|
|
volume = Fog::Compute[:aws].volumes.create(:availability_zone => 'us-east-1d', :size => 1)
|
|
volume.wait_for { ready? }
|
|
|
|
snapshot = Fog::Compute[:aws].create_snapshot(volume.identity).body
|
|
Fog::Compute[:aws].snapshots.new(snapshot).wait_for { ready? }
|
|
|
|
data = Fog::Compute[:aws].create_volume(@server.availability_zone, nil, 'SnapshotId' => snapshot['snapshotId']).body
|
|
@volume_id = data['volumeId']
|
|
data
|
|
end
|
|
|
|
Fog::Compute[:aws].delete_volume(@volume_id)
|
|
|
|
tests('#create_volume with type and iops').formats(@volume_format) do
|
|
data = Fog::Compute[:aws].create_volume(@server.availability_zone, 10, 'VolumeType' => 'io1', 'Iops' => 100).body
|
|
@volume_id = data['volumeId']
|
|
data
|
|
end
|
|
|
|
Fog::Compute[:aws].delete_volume(@volume_id)
|
|
|
|
tests('#create_volume with encryption').returns(true) do
|
|
volume = Fog::Compute[:aws].volumes.create(:availability_zone => 'us-east-1d', :size => 1, :encrypted => true)
|
|
@volume_id = volume.id
|
|
volume.reload.encrypted
|
|
end
|
|
|
|
Fog::Compute[:aws].delete_volume(@volume_id)
|
|
|
|
tests('#create_volume from snapshot with size').formats(@volume_format) do
|
|
volume = Fog::Compute[:aws].volumes.create(:availability_zone => 'us-east-1d', :size => 1, :type => 'gp2')
|
|
volume.wait_for { ready? }
|
|
|
|
snapshot = Fog::Compute[:aws].create_snapshot(volume.identity).body
|
|
Fog::Compute[:aws].snapshots.new(snapshot).wait_for { ready? }
|
|
|
|
data = Fog::Compute[:aws].create_volume(@server.availability_zone, 1, 'SnapshotId' => snapshot['snapshotId'], 'VolumeType' => 'gp2').body
|
|
@volume_id = data['volumeId']
|
|
data
|
|
end
|
|
|
|
Fog::Compute[:aws].volumes.get(@volume_id).wait_for { ready? }
|
|
|
|
tests('#describe_volumes').formats(@volumes_format) do
|
|
Fog::Compute[:aws].describe_volumes.body
|
|
end
|
|
|
|
tests("#describe_volumes('volume-id' => #{@volume_id})").formats(@volumes_format) do
|
|
Fog::Compute[:aws].describe_volumes('volume-id' => @volume_id).body
|
|
end
|
|
|
|
tests("#attach_volume(#{@server.identity}, #{@volume_id}, '/dev/sdh')").formats(@volume_attachment_format) do
|
|
Fog::Compute[:aws].attach_volume(@server.identity, @volume_id, '/dev/sdh').body
|
|
end
|
|
|
|
Fog::Compute[:aws].volumes.get(@volume_id).wait_for { state == 'in-use' }
|
|
|
|
tests("#describe_volume('attachment.device' => '/dev/sdh')").formats(@volumes_format) do
|
|
Fog::Compute[:aws].describe_volumes('attachment.device' => '/dev/sdh').body
|
|
end
|
|
|
|
tests("#describe_volume_status('volume-id' => #{@volume_id})").formats(@volume_status_format) do
|
|
pending if Fog.mocking?
|
|
Fog::Compute[:aws].describe_volume_status('volume-id' => @volume_id).body
|
|
end
|
|
|
|
tests("#detach_volume('#{@volume_id}')").formats(@volume_attachment_format) do
|
|
Fog::Compute[:aws].detach_volume(@volume_id).body
|
|
end
|
|
|
|
Fog::Compute[:aws].volumes.get(@volume_id).wait_for { ready? }
|
|
|
|
tests("#modify_volume('#{@volume_id}', 'Size' => 100, 'VolumeType' => 'io1', 'Iops' => 5000").formats(@modify_volume_format) do
|
|
Fog::Compute[:aws].modify_volume(@volume_id, 'Size' => 100, 'VolumeType' => 'io1', 'Iops' => 5000).body
|
|
end
|
|
|
|
tests("#describe_volumes_modifications('volume-id' => '#{@volume_id}')").formats(@describe_volume_modifications_format) do
|
|
Fog.wait_for do
|
|
Fog::Compute[:aws].describe_volumes_modifications('volume-id' => @volume_id).body['volumeModificationSet'].first['modificationState'] == 'completed'
|
|
end
|
|
|
|
volume = Fog::Compute[:aws].describe_volumes('volume-id' => @volume_id).body['volumeSet'].first
|
|
returns(100) { volume['size'] }
|
|
returns('io1') { volume['volumeType'] }
|
|
returns(5000) { volume['iops'] }
|
|
|
|
Fog::Compute[:aws].describe_volumes_modifications('volume-id' => @volume_id).body
|
|
end
|
|
|
|
tests("#modify_volume_attribute('#{@volume_id}', true)").formats(AWS::Compute::Formats::BASIC) do
|
|
Fog::Compute[:aws].modify_volume_attribute(@volume_id, true).body
|
|
end
|
|
|
|
tests("#delete_volume('#{@volume_id}')").formats(AWS::Compute::Formats::BASIC) do
|
|
Fog::Compute[:aws].delete_volume(@volume_id).body
|
|
end
|
|
end
|
|
|
|
tests('failure') do
|
|
@volume = Fog::Compute[:aws].volumes.create(:availability_zone => @server.availability_zone, :size => 1)
|
|
|
|
tests("#attach_volume('i-00000000', '#{@volume.identity}', '/dev/sdh')").raises(Fog::AWS::Compute::NotFound) do
|
|
Fog::Compute[:aws].attach_volume('i-00000000', @volume.identity, '/dev/sdh')
|
|
end
|
|
|
|
tests("#attach_volume('#{@server.identity}', 'vol-00000000', '/dev/sdh')").raises(Fog::AWS::Compute::NotFound) do
|
|
Fog::Compute[:aws].attach_volume(@server.identity, 'vol-00000000', '/dev/sdh')
|
|
end
|
|
|
|
tests("#detach_volume('vol-00000000')").raises(Fog::AWS::Compute::NotFound) do
|
|
Fog::Compute[:aws].detach_volume('vol-00000000')
|
|
end
|
|
|
|
tests("#modify_volume_attribute('vol-00000000', true)").raises(Fog::AWS::Compute::NotFound) do
|
|
Fog::Compute[:aws].modify_volume_attribute('vol-00000000', true)
|
|
end
|
|
|
|
tests("#detach_volume('#{@volume.identity}')").raises(Fog::AWS::Compute::Error) do
|
|
Fog::Compute[:aws].detach_volume(@volume.identity)
|
|
end
|
|
|
|
tests("#delete_volume('vol-00000000')").raises(Fog::AWS::Compute::NotFound) do
|
|
Fog::Compute[:aws].delete_volume('vol-00000000')
|
|
end
|
|
|
|
# Iops required
|
|
tests("#create_volume('#{@server.availability_zone}', 10, 'VolumeType' => 'io1')").raises(Fog::AWS::Compute::Error) do
|
|
Fog::Compute[:aws].create_volume(@server.availability_zone, 10, 'VolumeType' => 'io1')
|
|
end
|
|
|
|
# size too small for iops
|
|
tests("#create_volume('#{@server.availability_zone}', 9, 'VolumeType' => 'io1', 'Iops' => 100)").raises(Fog::AWS::Compute::Error) do
|
|
Fog::Compute[:aws].create_volume(@server.availability_zone, 9, 'VolumeType' => 'io1', 'Iops' => 100)
|
|
end
|
|
|
|
# iops:size ratio too big
|
|
tests("#create_volume('#{@server.availability_zone}', 10, 'VolumeType' => 'io1', 'Iops' => 301)").raises(Fog::AWS::Compute::Error) do
|
|
Fog::Compute[:aws].create_volume(@server.availability_zone, 10, 'VolumeType' => 'io1', 'Iops' => 301)
|
|
end
|
|
|
|
# iops invalid value (lower than 100)
|
|
tests("#create_volume('#{@server.availability_zone}', 10, 'VolumeType' => 'io1', 'Iops' => 99)").raises(Fog::AWS::Compute::Error) do
|
|
Fog::Compute[:aws].create_volume(@server.availability_zone, 10, 'VolumeType' => 'io1', 'Iops' => 99)
|
|
end
|
|
|
|
# iops invalid value (greater than 4000)
|
|
tests("#create_volume('#{@server.availability_zone}', 1024, 'VolumeType' => 'io1', 'Iops' => 4001)").raises(Fog::AWS::Compute::Error) do
|
|
Fog::Compute[:aws].create_volume(@server.availability_zone, 1024, 'VolumeType' => 'io1', 'Iops' => 4001)
|
|
end
|
|
|
|
@volume.destroy
|
|
end
|
|
|
|
@server.destroy
|
|
end
|