Shindo.tests('Fog::Compute::RackspaceV2 | virtual_interface_tests', ['rackspace']) do
  @service   = Fog::Compute.new(:provider => 'Rackspace', :version => 'V2')

  virtual_interface_format = {
    "virtual_interfaces"=> [{
      "ip_addresses"=> [{
        "network_id"=> String,
        "network_label"=> String,
        "address"=> String
      }],
      "id"=> String,
      "mac_address"=> String
    }]
  }

  begin
    unless Fog.mocking?
      network_id = nil

      @server = @service.servers.create(:name => "fog_virtual_interface_test_#{Time.now.to_i.to_s}",
                                        :flavor_id => rackspace_test_flavor_id(@service),
                                        :image_id => rackspace_test_image_id(@service))
      @server.wait_for { ready? }

      @network = @service.networks.create(:label => "fog_#{Time.now.to_i.to_s}", :cidr => '192.168.0.0/24')
    end

    tests('success') do
      pending if Fog.mocking?

      tests('#create_virtual_interface').formats(virtual_interface_format) do
        response = @service.create_virtual_interface @server.id, @network.id
        body = response.body
        @virtual_network_interface_id = body["virtual_interfaces"].first["id"]
        body
      end
        tests('#list_virtual_interfaces').formats(virtual_interface_format) do
          @service.list_virtual_interfaces(@server.id).body
        end

        tests('#delete_virtual_interfaces').succeeds do
          @service.delete_virtual_interface(@server.id, @virtual_network_interface_id)
        end
      end
  ensure
    @server.destroy if @server
    delete_test_network @network
  end
end
