From 0f1ff813d1dd9856ad509b98872052c748f944ae Mon Sep 17 00:00:00 2001 From: "geemus (Wesley Beary)" Date: Tue, 13 Apr 2010 14:42:16 -0700 Subject: [PATCH] [ec2] cleanup/optimize mocks --- .../aws/requests/ec2/describe_instances.rb | 68 +++++++++---------- .../aws/requests/ec2/describe_snapshots.rb | 22 +++--- lib/fog/aws/requests/ec2/describe_volumes.rb | 34 +++++----- lib/fog/aws/requests/ec2/run_instances.rb | 15 ++-- 4 files changed, 70 insertions(+), 69 deletions(-) diff --git a/lib/fog/aws/requests/ec2/describe_instances.rb b/lib/fog/aws/requests/ec2/describe_instances.rb index c9df3d045..13f7f7691 100644 --- a/lib/fog/aws/requests/ec2/describe_instances.rb +++ b/lib/fog/aws/requests/ec2/describe_instances.rb @@ -69,44 +69,44 @@ module Fog instance_set = @data[:instances].values end - instance_set.each do |instance| - case instance['instanceState']['name'] - when 'pending' - if Time.now - instance['launchTime'] > Fog::Mock.delay - instance['dnsName'] = "ec2-#{Fog::AWS::Mock.ip_address.gsub('.','-')}.compute-1.amazonaws.com" - instance['privateIpAddress'] = Fog::AWS::Mock.ip_address - instance['privateDnsName'] = "ip-#{instance['privateIpAddress'].gsub('.','-')}.ec2.internal" - instance['instanceState'] = { 'code' => 16, 'name' => 'running' } - end - when 'rebooting' - instance['instanceState'] = { 'code' => 16, 'name' => 'running' } - when 'shutting-down' - if Time.now - @data[:deleted_at][instance['instanceId']] > Fog::Mock.delay * 2 - @data[:deleted_at].delete(instance['instanceId']) - @data[:instances].delete(instance['instanceId']) - elsif Time.now - @data[:deleted_at][instance['instanceId']] > Fog::Mock.delay - instance['instanceState'] = { 'code' => 16, 'name' => 'terminating' } - end - when 'terminating' - if Time.now - @data[:deleted_at][instance['instanceId']] > Fog::Mock.delay - @data[:deleted_at].delete(instance['instanceId']) - @data[:instances].delete(instance['instanceId']) - end - end - end - if instance_id.length == 0 || instance_id.length == instance_set.length - instance_set = instance_set.reject {|instance| !@data[:instances][instance['instanceId']]} response.status = 200 reservation_set = {} + instance_set.each do |instance| - reservation_set[instance['reservationId']] ||= { - 'groupSet' => instance['groupSet'], - 'instancesSet' => [], - 'ownerId' => instance['ownerId'], - 'reservationId' => instance['reservationId'] - } - reservation_set[instance['reservationId']]['instancesSet'] << instance.reject{|key,value| !['amiLaunchIndex', 'blockDeviceMapping', 'dnsName', 'imageId', 'instanceId', 'instanceState', 'instanceType', 'kernelId', 'keyName', 'launchTime', 'monitoring', 'placement', 'privateDnsName', 'productCodes', 'ramdiskId', 'reason', 'rootDeviceType'].include?(key)} + case instance['instanceState']['name'] + when 'pending' + if Time.now - instance['launchTime'] > Fog::Mock.delay + instance['dnsName'] = "ec2-#{Fog::AWS::Mock.ip_address.gsub('.','-')}.compute-1.amazonaws.com" + instance['privateIpAddress'] = Fog::AWS::Mock.ip_address + instance['privateDnsName'] = "ip-#{instance['privateIpAddress'].gsub('.','-')}.ec2.internal" + instance['instanceState'] = { 'code' => 16, 'name' => 'running' } + end + when 'rebooting' + instance['instanceState'] = { 'code' => 16, 'name' => 'running' } + when 'shutting-down' + if Time.now - @data[:deleted_at][instance['instanceId']] > Fog::Mock.delay * 2 + @data[:deleted_at].delete(instance['instanceId']) + @data[:instances].delete(instance['instanceId']) + elsif Time.now - @data[:deleted_at][instance['instanceId']] > Fog::Mock.delay + instance['instanceState'] = { 'code' => 16, 'name' => 'terminating' } + end + when 'terminating' + if Time.now - @data[:deleted_at][instance['instanceId']] > Fog::Mock.delay + @data[:deleted_at].delete(instance['instanceId']) + @data[:instances].delete(instance['instanceId']) + end + end + + if @data[:instances][instance['instanceId']] + reservation_set[instance['reservationId']] ||= { + 'groupSet' => instance['groupSet'], + 'instancesSet' => [], + 'ownerId' => instance['ownerId'], + 'reservationId' => instance['reservationId'] + } + reservation_set[instance['reservationId']]['instancesSet'] << instance.reject{|key,value| !['amiLaunchIndex', 'blockDeviceMapping', 'dnsName', 'imageId', 'instanceId', 'instanceState', 'instanceType', 'kernelId', 'keyName', 'launchTime', 'monitoring', 'placement', 'privateDnsName', 'productCodes', 'ramdiskId', 'reason', 'rootDeviceType'].include?(key)} + end end response.body = { diff --git a/lib/fog/aws/requests/ec2/describe_snapshots.rb b/lib/fog/aws/requests/ec2/describe_snapshots.rb index 36cdca4e0..d279a9c7d 100644 --- a/lib/fog/aws/requests/ec2/describe_snapshots.rb +++ b/lib/fog/aws/requests/ec2/describe_snapshots.rb @@ -39,20 +39,20 @@ module Fog snapshot_set = @data[:snapshots].values end - snapshot_set.each do |snapshot| - case snapshot['status'] - when 'in progress', 'pending' - if Time.now - snapshot['startTime'] > Fog::Mock.delay * 2 - snapshot['progress'] = '100%' - snapshot['status'] = 'completed' - elsif Time.now - snapshot['startTime'] > Fog::Mock.delay - snapshot['progress'] = '50%' - snapshot['status'] = 'in progress' + if snapshot_id.length == 0 || snapshot_id.length == snapshot_set.length + snapshot_set.each do |snapshot| + case snapshot['status'] + when 'in progress', 'pending' + if Time.now - snapshot['startTime'] > Fog::Mock.delay * 2 + snapshot['progress'] = '100%' + snapshot['status'] = 'completed' + elsif Time.now - snapshot['startTime'] > Fog::Mock.delay + snapshot['progress'] = '50%' + snapshot['status'] = 'in progress' + end end end - end - if snapshot_id.length == 0 || snapshot_id.length == snapshot_set.length response.status = 200 response.body = { 'requestId' => Fog::AWS::Mock.request_id, diff --git a/lib/fog/aws/requests/ec2/describe_volumes.rb b/lib/fog/aws/requests/ec2/describe_volumes.rb index ac22fdfca..f5112e43f 100644 --- a/lib/fog/aws/requests/ec2/describe_volumes.rb +++ b/lib/fog/aws/requests/ec2/describe_volumes.rb @@ -45,26 +45,26 @@ module Fog volume_set = @data[:volumes].values end - volume_set.each do |volume| - case volume['status'] - when 'attaching' - if Time.now - volume['attachmentSet'].first['attachTime'] > Fog::Mock.delay - volume['attachmentSet'].first['status'] = 'attached' - volume['status'] = 'attached' - end - when 'creating' - if Time.now - volume['createTime'] > Fog::Mock.delay - volume['status'] = 'available' - end - when 'deleting' - if Time.now - @data[:deleted_at][volume['volumeId']] > Fog::Mock.delay - @data[:deleted_at].delete(volume['volumeId']) - @data[:volumes].delete(volume['volumeId']) + if volume_id.length == 0 || volume_id.length == volume_set.length + volume_set.each do |volume| + case volume['status'] + when 'attaching' + if Time.now - volume['attachmentSet'].first['attachTime'] > Fog::Mock.delay + volume['attachmentSet'].first['status'] = 'attached' + volume['status'] = 'attached' + end + when 'creating' + if Time.now - volume['createTime'] > Fog::Mock.delay + volume['status'] = 'available' + end + when 'deleting' + if Time.now - @data[:deleted_at][volume['volumeId']] > Fog::Mock.delay + @data[:deleted_at].delete(volume['volumeId']) + @data[:volumes].delete(volume['volumeId']) + end end end - end - if volume_id.length == 0 || volume_id.length == volume_set.length volume_set = volume_set.reject {|volume| !@data[:volumes][volume['volumeId']]} response.status = 200 response.body = { diff --git a/lib/fog/aws/requests/ec2/run_instances.rb b/lib/fog/aws/requests/ec2/run_instances.rb index fd1c04861..a2503e153 100644 --- a/lib/fog/aws/requests/ec2/run_instances.rb +++ b/lib/fog/aws/requests/ec2/run_instances.rb @@ -104,11 +104,10 @@ module Fog min_count.times do |i| instance_id = Fog::AWS::Mock.instance_id - data = { + instance = { 'amiLaunchIndex' => i, 'blockDeviceMapping' => [], 'dnsName' => '', - 'groupSet' => group_set, 'imageId' => image_id, 'instanceId' => instance_id, 'instanceState' => { 'code' => 0, 'name' => 'pending' }, @@ -117,18 +116,20 @@ module Fog 'keyName' => options['KeyName'] || '', 'launchTime' => Time.now, 'monitoring' => { 'state' => options['Monitoring.Enabled'] || false }, - 'ownerId' => @owner_id, 'placement' => { 'availabilityZone' => options['Placement.AvailabilityZone'] || Fog::AWS::Mock.availability_zone }, 'privateDnsName' => '', - 'privateIpAddress' => '', 'productCodes' => [], 'ramdiskId' => options['RamdiskId'] || Fog::AWS::Mock.ramdisk_id, 'reason' => '', - 'reservationId' => reservation_id, 'rootDeviceType' => 'instance-store' } - @data[:instances][instance_id] = data - instances_set << data.reject{|key,value| !['amiLaunchIndex', 'blockDeviceMapping', 'dnsName', 'imageId', 'instanceId', 'instanceState', 'instanceType', 'kernelId', 'keyName', 'launchTime', 'monitoring', 'placement', 'privateDnsName', 'productCodes', 'ramdiskId', 'reason', 'rootDeviceType'].include?(key)} + instances_set << instance + @data[:instances][instance_id] = instance.merge({ + 'groupSet' => group_set, + 'ownerId' => @owner_id, + 'privateIpAddress' => '', + 'reservationId' => reservation_id, + }) end response.body = { 'groupSet' => group_set,