class Fog::Compute::CloudSigma::Mock

Public Class Methods

data() click to toggle source
# File lib/fog/cloudsigma/compute.rb, line 199
def self.data
  @data ||= Hash.new do |hash, key|
    hash[key] = mock_data
  end
end
mock_data() click to toggle source
# File lib/fog/cloudsigma/mock_data.rb, line 5
def self.mock_data
  {
    :volumes => {},
    :servers => {},
    :vlans => {},
    :ips => {},
    :profile => {
      :login_sms => false,
      :town => "",
      :postcode => "",
      :reseller => "",
      :has_autotopup => false,
      :currency => "CHF",
      :state => "REGULAR",
      :uuid => "6c2203a1-a2e6-433f-aeab-b976b8cd3d18",
      :company => "",
      :api_https_only => false,
      :my_notes => "",
      :key_auth => false,
      :email => "MyFirstName.MyLasttName@MyCompany.com",
      :bank_reference => "mmlastname278",
      :first_name => "MyFirstName",
      :meta =>"",
      :phone => "",
      :language => "EN",
      :vat => "",
      :last_name => "MyLasttName",
      :title => "",
      :mailing_list => true,
      :autotopup_amount => 0.0,
      :country => "",
      :address => ""
    },
    :subscriptions => {},
    :current_usage => {},
    :balance => {
      :balance => 100,
      :currency => 'CHF'
    }
  }
end
random_mac() click to toggle source
# File lib/fog/cloudsigma/compute.rb, line 212
def self.random_mac
  (0..5).map{Fog::Mock.random_hex(2)}.join(':')
end
random_uuid() click to toggle source
# File lib/fog/cloudsigma/compute.rb, line 205
def self.random_uuid
  # Insert '4' at 13th position and 'a' at 17th as per uuid4 spec
  hex = Fog::Mock.random_hex(30).insert(12,'4').insert(16, 'a')
  # Add dashes
  "#{hex[0...8]}-#{hex[8...12]}-#{hex[12...16]}-#{hex[16...20]}-#{hex[20..32]}"
end

Public Instance Methods

calculate_subscription_price(data) click to toggle source
# File lib/fog/cloudsigma/requests/calculate_subscription_price.rb, line 11
def calculate_subscription_price(data)
end
clone_libvolume(vol_id, clone_params={}) click to toggle source
# File lib/fog/cloudsigma/requests/clone_libvolume.rb, line 15
def clone_libvolume(vol_id, clone_params={})
  volume = self.data[:libvolumes][vol_id].dup
  uuid = self.class.random_uuid
  volume['uuid'] = uuid

  self.data[:volumes][uuid] = volume

  response = Excon::Response.new
  response.status = 200
  response.body = volume

  response
end
clone_server(server_id, clone_params={}) click to toggle source
# File lib/fog/cloudsigma/requests/clone_server.rb, line 15
def clone_server(server_id, clone_params={})
  server = self.data[:servers][server_id].dup
  uuid = self.class.random_uuid
  server['uuid'] = uuid

  self.data[:servers][uuid] = server

  response = Excon::Response.new
  response.status = 200
  response.body = server

  response
end
clone_snapshot(snap_id, clone_params={}) click to toggle source
# File lib/fog/cloudsigma/requests/clone_snapshot.rb, line 15
def clone_snapshot(snap_id, clone_params={})
  snapshot = self.data[:snapshots][snap_id].dup
  uuid = self.class.random_uuid
  snapshot['uuid'] = uuid

  self.data[:snapshots][uuid] = snapshot

  response = Excon::Response.new
  response.status = 200
  response.body = snapshot

  response
end
clone_volume(vol_id, clone_params={}) click to toggle source
# File lib/fog/cloudsigma/requests/clone_volume.rb, line 15
def clone_volume(vol_id, clone_params={})
  volume = self.data[:volumes][vol_id].dup
  uuid = self.class.random_uuid
  volume['uuid'] = uuid

  self.data[:volumes][uuid] = volume

  response = Excon::Response.new
  response.status = 200
  response.body = volume

  response
end
close_vnc(server_id) click to toggle source
# File lib/fog/cloudsigma/requests/close_vnc.rb, line 14
def close_vnc(server_id)
  response = Excon::Response.new
  response.status = 200

  response.body = {
      'action' => 'close_vnc',
      'result' => 'success',
      'uuid' => server_id,
  }

  response
end
create_server(data) click to toggle source
# File lib/fog/cloudsigma/requests/create_server.rb, line 11
def create_server(data)
  uuid = self.class.random_uuid

  defaults = {'uuid' => uuid,
              'status' => 'stopped',
              'smp' => 1,
              'hv_relaxed' => false,
              'hv_tsc' => false,
              'enable_numa' => false,
              'cpus_instead_of_cores' => false,
              'drives' => [],
              'nics' => [],
              'tags' => []
  }

  mock_create(:servers, 202, data, uuid, defaults)
end
create_snapshot(data) click to toggle source
# File lib/fog/cloudsigma/requests/create_snapshot.rb, line 11
def create_snapshot(data)
  uuid = self.class.random_uuid

  defaults = {'uuid' => uuid,
              'timestamp' => Time.now.strftime("%Y-%m-%d %H:%M:%S.%6N%z"),
              'status' => 'creating',
              'tags' => [],
              'grantees' => [],
              'allocated_size' => 0
  }

  mock_create(:snapshots, 201, data, uuid, defaults)
end
create_subscription(data) click to toggle source
# File lib/fog/cloudsigma/requests/create_subscription.rb, line 11
def create_subscription(data)
  if data[:period] != '1 month' || data[:start_time] || data[:end_time]
    raise Fog::Errors::MockNotImplemented.new('Currently only mocks for subscriptions with period 1 month from now are implemented as mock')
  end

  id = Fog::Mock.random_numbers(3).to_i
  defaults = {'id' => id,
              'start_time' => DateTime.now,
              'end_time' => DateTime.now + 30 * 24 * 60 *60,
              'auto_renew' => false,
              'amount' => 1.0}

  if data[:resource] == 'vlan'
    vlan_uuid = self.class.random_uuid
    self.data[:vlans][vlan_uuid] = {'uuid' => vlan_uuid,
                                    'subscription' => {'id' => id},
                                    'servers' => [],
                                    'meta' => {},
                                    'tags' => []}
    defaults['subscribed_object'] = vlan_uuid
  end

  mock_create(:subscriptions, 200, data, id, defaults)
end
create_volume(data) click to toggle source
# File lib/fog/cloudsigma/requests/create_volume.rb, line 11
def create_volume(data)
  uuid = self.class.random_uuid

  defaults = {'uuid' => uuid,
              'status' => 'unmounted',
              'tags' => [],
              'mounted_on' => [],
              'affinities' => [],
              'licenses' => [],
              'jobs' => [],
              'allow_multimount' => false,
  }

  mock_create(:volumes, 202, data, uuid, defaults)
end
data() click to toggle source
# File lib/fog/cloudsigma/compute.rb, line 216
def data
  self.class.data[:test]
end
delete_server(server_id) click to toggle source
# File lib/fog/cloudsigma/requests/delete_server.rb, line 11
def delete_server(server_id)
  mock_delete(:servers, 204, server_id)
end
delete_snapshot(snap_id) click to toggle source
# File lib/fog/cloudsigma/requests/delete_snapshot.rb, line 11
def delete_snapshot(snap_id)
  mock_delete(:snapshots, 204, snap_id)
end
delete_volume(vol_id) click to toggle source
# File lib/fog/cloudsigma/requests/delete_volume.rb, line 11
def delete_volume(vol_id)
  mock_delete(:volumes, 204, vol_id)
end
extend_subscription(sub_id, data) click to toggle source
# File lib/fog/cloudsigma/requests/extend_subscription.rb, line 15
def extend_subscription(sub_id, data)
end
get_balance() click to toggle source
# File lib/fog/cloudsigma/requests/get_balance.rb, line 11
def get_balance
  mock_get(:balance,  200)
end
get_current_usage() click to toggle source
# File lib/fog/cloudsigma/requests/get_current_usage.rb, line 11
def get_current_usage
end
get_ip(ip) click to toggle source
# File lib/fog/cloudsigma/requests/get_ip.rb, line 11
def get_ip(ip)
  mock_get(:ips, 200, ip)
end
get_lib_volume(vol_id) click to toggle source
# File lib/fog/cloudsigma/requests/get_lib_volume.rb, line 11
def get_lib_volume(vol_id)
  mock_get(:libvolumes, 200, vol_id)
end
get_pricing(currency=nil, subscription=false) click to toggle source
# File lib/fog/cloudsigma/requests/get_pricing.rb, line 21
def get_pricing(currency=nil, subscription=false)
  mock_get(:pricing,  200)
end
get_profile() click to toggle source
# File lib/fog/cloudsigma/requests/get_profile.rb, line 11
def get_profile
  mock_get(:profile,  200)
end
get_server(server_id) click to toggle source
# File lib/fog/cloudsigma/requests/get_server.rb, line 11
def get_server(server_id)
  mock_get(:servers, 200, server_id)
end
get_snapshot(snap_id) click to toggle source
# File lib/fog/cloudsigma/requests/get_snapshot.rb, line 11
def get_snapshot(snap_id)
  mock_get(:snapshots, 200, snap_id)
end
get_subscription(sub_id) click to toggle source
# File lib/fog/cloudsigma/requests/get_subscription.rb, line 11
def get_subscription(sub_id)
  mock_get(:subscriptions, 200, sub_id)
end
get_vlan(vlan) click to toggle source
# File lib/fog/cloudsigma/requests/get_vlan.rb, line 11
def get_vlan(vlan)
  mock_get(:vlans, 200, vlan)
end
get_volume(vol_id) click to toggle source
# File lib/fog/cloudsigma/requests/get_volume.rb, line 11
def get_volume(vol_id)
  mock_get(:volumes, 200, vol_id)
end
list_fwpolicies() click to toggle source
# File lib/fog/cloudsigma/requests/list_fwpolicies.rb, line 11
def list_fwpolicies
  Fog::Mock.not_implemented
end
list_ips() click to toggle source
# File lib/fog/cloudsigma/requests/list_ips.rb, line 11
def list_ips
  mock_list(:ips, 200)
end
list_lib_volumes() click to toggle source
# File lib/fog/cloudsigma/requests/list_lib_volumes.rb, line 11
def list_lib_volumes
  mock_list(:libvolumes, 200)
end
list_servers() click to toggle source
# File lib/fog/cloudsigma/requests/list_servers.rb, line 11
def list_servers
  mock_list(:servers, 200)
end
list_snapshots() click to toggle source
# File lib/fog/cloudsigma/requests/list_snapshots.rb, line 11
def list_snapshots
  mock_list(:snapshots, 200)
end
list_subscriptions() click to toggle source
# File lib/fog/cloudsigma/requests/list_subscriptions.rb, line 11
def list_subscriptions
  mock_list(:subscriptions, 200)
end
list_vlans() click to toggle source
# File lib/fog/cloudsigma/requests/list_vlans.rb, line 11
def list_vlans
  mock_list(:vlans, 200)
end
list_volumes() click to toggle source
# File lib/fog/cloudsigma/requests/list_volumes.rb, line 11
def list_volumes
  mock_list(:volumes, 200)
end
open_vnc(server_id) click to toggle source
# File lib/fog/cloudsigma/requests/open_vnc.rb, line 14
def open_vnc(server_id)
  response = Excon::Response.new
  response.status = 200
  host = @init_options[:cloudsigma_host]
  port = Fog::Mock.random_number(65000)
  vnc_url = "vnc://#{host}:#{port}"

  response.body = {
      'action' => 'open_vnc',
      'result' => 'success',
      'uuid' => server_id,
      'vnc_url' => vnc_url
  }

  response
end
start_server(server_id, start_params={}) click to toggle source
# File lib/fog/cloudsigma/requests/start_server.rb, line 14
def start_server(server_id, start_params={})
  server = self.data[:servers][server_id]
  server['status'] = 'running'

  response = Excon::Response.new
  response.status = 200
  response.body = {
      'action' => 'start',
      'result' => 'success',
      'uuid' => server_id
  }

  response
end
stop_server(server_id, graceful_acpi = false) click to toggle source
# File lib/fog/cloudsigma/requests/stop_server.rb, line 15
def stop_server(server_id, graceful_acpi = false)
  server = self.data[:servers][server_id]
  server['status'] = 'stopped'

  response = Excon::Response.new
  response.status = 200
  response.body = {
      'action' => graceful_acpi ? 'shutdown' : 'stop',
      'result' => 'success',
      'uuid' => server_id
  }

  response
end
update_profile(data) click to toggle source
# File lib/fog/cloudsigma/requests/update_profile.rb, line 11
def update_profile(data)
  mock_update(data, :profile, 200)
end
update_server(server_id, data) click to toggle source
# File lib/fog/cloudsigma/requests/update_server.rb, line 13
        def update_server(server_id, data)
          mock_update(data, :servers, 200, server_id) do |old_data, new_data|
            old_nics = old_data['nics']
            new_nics = new_data['nics']

            old_nics_macs = old_nics.map { |nic| nic['mac'] }.compact
            new_nics_macs = new_nics.map { |nic| nic['mac'] }.compact

            newly_created_macs = Set.new(new_nics_macs) - old_nics_macs
            unless newly_created_macs.empty?
              mac_err = <<-EOS
              MAC(s) #{newly_created_macs.to_a} not specified on guest #{server_id}. Nic MACs are automatically assigned at
              creation time and cannot be changed. Do not specify MAC to create a new NIC or specify existing MAC to
              update existing NIC.
              EOS
              raise Fog::CloudSigma::Errors::RequestError.new(mac_err, 'permission')
            end

            new_nics.each { |nic| nic['mac'] ||= Fog::Compute::CloudSigma::Mock.random_mac }

            old_data.merge(new_data)
          end
        end
update_snapshot(snap_id, data) click to toggle source
# File lib/fog/cloudsigma/requests/update_snapshot.rb, line 11
def update_snapshot(snap_id, data)
  mock_update(data, :snapshots, 200,  snap_id)
end
update_vlan(vlan_id, data) click to toggle source
# File lib/fog/cloudsigma/requests/update_vlan.rb, line 13
def update_vlan(vlan_id, data)
  mock_update(data, :vlans, 200, vlan_id)
end
update_volume(vol_id, data) click to toggle source
# File lib/fog/cloudsigma/requests/update_volume.rb, line 11
def update_volume(vol_id, data)
  mock_update(data, :volumes, 200,  vol_id)
end