Class: TestdroidAPI::Files

Inherits:
CloudListResource show all
Defined in:
lib/testdroid_api/files.rb

Constant Summary collapse

ACCEPTED_VIRUS_SCAN_STATUSES =
Set['safe', 'disabled', nil]

Instance Method Summary collapse

Methods inherited from CloudListResource

#create, #get, #initialize, #list, #list_all, #total

Constructor Details

This class inherits a constructor from TestdroidAPI::CloudListResource

Instance Method Details

#upload(filename, skip_scan_wait = false) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/testdroid_api/files.rb', line 6

def upload(filename, skip_scan_wait=false)
  unless ::File.exist?(filename)
    @client.logger.error("Invalid filename")
    return
  end
  file = @client.upload("#{@uri}", filename)
  result = File.new("#{@uri}/#{file['id']}", @client, file)
  if !skip_scan_wait
    wait_for_virus_scan(Array(result))
  end
  return result
end

#wait_for_virus_scan(api_files, timeout = 300) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/testdroid_api/files.rb', line 19

def wait_for_virus_scan(api_files, timeout=300)
  all_safe = false
  begin
    Timeout.timeout(timeout) do
      while !all_safe do
        statuses = Set.new
        api_files.each do |file|
          current_status = get_virus_scan_status(file)
          if ACCEPTED_VIRUS_SCAN_STATUSES.include?(current_status)
            statuses.add(current_status)
          else
            sleep(1)
            file.refresh
            statuses.add(get_virus_scan_status(file))
          end
        end
        if statuses.include?('infected')
          raise 'File rejected by virus scan'
        end
        if ACCEPTED_VIRUS_SCAN_STATUSES.superset?(statuses)
          all_safe = true
        end
      end
    end
  rescue Timeout::Error
    @client.logger.error("Waiting for virus scan timed out")
    raise
  end
end