Shindo.tests('Fog::Compute[:xenserver] | set_attribute request', ['xenserver']) do

  # Setup cleanup
  destroy_ephemeral_servers

  connection = Fog::Compute[:xenserver]
  servers = connection.servers
  server = create_ephemeral_server

  tests('Setting an attribute with set_attribute should') do
    test('set the PV_bootloader attr to foobar') do
      response = connection.set_attribute('VM', server.reference, 'PV_bootloader', 'foobar')
      server.reload
      server.pv_bootloader == 'foobar'
    end
    test('set the PV-bootloader attr to stuff') do
      response = connection.set_attribute('VM', server.reference, 'PV-bootloader', 'stuff')
      server.reload
      server.pv_bootloader == 'stuff'
    end
    test('set the other_config attr { "foo" => "bar", :stuff => "crap" }') do
      response = connection.set_attribute('VM', server.reference, 'other_config', { "foo" => "bar", :stuff => 'crap' })
      server.reload
      (server.other_config['foo'] == 'bar') and \
        (server.other_config['stuff'] == 'crap')
    end
    test('set the multiple valued attribute memory_limits }') do
      server = create_ephemeral_server
      server.stop 'hard'
      server.wait_for { not running? }
      response = connection.set_attribute('VM', 
                                          server.reference, 
                                          'memory_limits',
                                          '1073741824',
                                          '1073741824',
                                          '1073741824',
                                          '1073741824'
                                         )
      server.reload
      (server.memory_dynamic_max == "1073741824") and \
        (server.memory_dynamic_min == "1073741824") and \
        (server.memory_static_max == "1073741824") and \
        (server.memory_static_min == "1073741824") 

      server.start
    end
    test('set an array valued attribute') do
      server = create_ephemeral_server
      response = connection.set_attribute('VM',
                                          server.reference,
                                          'tags',
                                          ['foo','bar']
                                         )
      server.reload
      server.tags.include?('foo') and server.tags.include?('bar')
    end
  end

  tests('The expected options') do
    raises(ArgumentError, 'raises ArgumentError when ref,attr,value missing') { connection.get_record }
  end

  # Teardown cleanup
  destroy_ephemeral_servers

end
