Sha256: 20a48507c8bd7c49c259ddf7e8b0c21c04fb35b62cc535edc0260fdca2a56d36
Contents?: true
Size: 1.71 KB
Versions: 3
Compression:
Stored size: 1.71 KB
Contents
module TestdroidAPI class Files < CloudListResource ACCEPTED_VIRUS_SCAN_STATUSES = Set['safe', 'disabled', nil] 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 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 private def get_virus_scan_status(file) return file.file_properties.find{ |item| item['key'] == "virus_scan_status" }['value'] end end class File < CloudResource def initialize(uri, client, params = {}) super uri, client, "file", params @uri, @client = uri, client end end end
Version data entries
3 entries across 3 versions & 2 rubygems
Version | Path |
---|---|
testdroid-api-client-0.6.0 | lib/testdroid_api/files.rb |
testdroid-api-client-updated-0.5.1 | lib/testdroid_api/files.rb |
testdroid-api-client-0.5.0 | lib/testdroid_api/files.rb |