class Client

Public Class Methods

new() click to toggle source
# File lib/client.rb, line 6
def initialize
  # Setting IP of server
  print "Input IP address of servrer: ".green
  @ip = $stdin.gets.chomp
  @ip = 'localhost' if blank? @ip

  # Setting PORT of server
  print "Input Port of servrer: ".green
  @port = $stdin.gets.chomp
  @port = '5899' if blank? @port

  # Setting iterations count
  print "Input iterations count: ".green
  @each_count = $stdin.gets.chomp.to_i
  @each_count = 1 if @each_count.zero?

  # Setting eterations count
  print "Input threads count: ".green
  @threads_count = $stdin.gets.chomp.to_i
  @threads_count = 1 if @threads_count.zero?

  # Setting timeout
  print "Input timeout: ".green
  @http_timeout = $stdin.gets.chomp.to_f
  @http_timeout = 10 if @http_timeout.zero?

  # Building link
  @uri = "http://#{@ip}:#{@port}"

  # Variables
  @req_times = []
  @threads = []
  @package_loss = 0
  @package_rec = 0
end

Public Instance Methods

send_results() click to toggle source
# File lib/client.rb, line 222
def send_results
  Curl.post(@uri + '/exit', { results: @req_times.join(' '), package_loss: @package_loss, package_rec: @package_rec })
end
test() click to toggle source
# File lib/client.rb, line 42
def test
  @threads_count.times do
    @threads << Thread.new do
      @each_count.times do
        # Raw root GET
        begin
          t = Time.now
          response = Curl.get(@uri) do |http|
            http.timeout = @http_timeout
          end
          @req_times << Time.now - t
          if response.status == '200 OK'
            print '.'.green
          else
            print '!'.red
          end
          @package_rec += 1
        rescue Curl::Err::TimeoutError
          print '#'.yellow
          @package_loss += 1
        end

        # Root POST with correct params
        begin
          t = Time.now
          response = Curl.post(@uri, { name: 'Oleg', github_nickname: 'sorefull' }) do |http|
            http.timeout = @http_timeout
          end
          @req_times << Time.now - t
          if response.status == '202 Accepted'
            print '.'.green
          else
            print '!'.red
          end
          @package_rec += 1
        rescue Curl::Err::TimeoutError
          print '#'.yellow
          @package_loss += 1
        end

        # Root POST with wrong params
        begin
          t = Time.now
          response = Curl.post(@uri, { name: '', github_nickname: '' }) do |http|
            http.timeout = @http_timeout
          end
          @req_times << Time.now - t
          if response.status == '401 Unauthorized'
            print '.'.green
          else
            print '!'.red
          end
          @package_rec += 1
        rescue Curl::Err::TimeoutError
          print '#'.yellow
          @package_loss += 1
        end

        # Lorem GET with body check
        begin
          t = Time.now
          response = Curl.get(@uri + '/lorem') do |http|
            http.timeout = @http_timeout
          end
          @req_times << Time.now - t
          if response.body == LoremIpsum.lorem
            print '.'.green
          else
            print '!'.red
          end
          @package_rec += 1
        rescue Curl::Err::TimeoutError
          print '#'.yellow
          @package_loss += 1
        end

        # Lorem GET with params
        begin
          t = Time.now
          response = Curl.get(@uri + '/lorem', { length: 10 }) do |http|
            http.timeout = @http_timeout
          end
          @req_times << Time.now - t
          if response.body == LoremIpsum.lorem[0..10]
            print '.'.green
          else
            print '!'.red
          end
          @package_rec += 1
        rescue Curl::Err::TimeoutError
          print '#'.yellow
          @package_loss += 1
        end

        # Cookie GET with correct cookies
        begin
        t = Time.now
          response = Curl.get(@uri + '/cookie') do |http|
            http.headers['Cookie'] = 'private=asdfg; public=gijj'
            http.timeout = @http_timeout
          end
          @req_times << Time.now - t
          if response.status == '200 OK'
            print '.'.green
          else
            print '!'.red
          end
          @package_rec += 1
        rescue Curl::Err::TimeoutError
          print '#'.yellow
          @package_loss += 1
        end

        # Cookie GET with wrong cookies
        begin
          t = Time.now
          response = Curl.get(@uri + '/cookie') do |http|
            http.headers['Cookie'] = 'private=wrong; public=wrong'
            http.timeout = @http_timeout
          end
          @req_times << Time.now - t
          if response.status == '401 Unauthorized'
            print '.'.green
          else
            print '!'.red
          end
          @package_rec += 1
        rescue Curl::Err::TimeoutError
          print '#'.yellow
          @package_loss += 1
        end

        # File GET
        begin
          file_name = '/file.txt'
          t = Time.now
          response = Curl.get(@uri + file_name) do |http|
            http.timeout = @http_timeout
          end
          @req_times << Time.now - t
          file = File.open("#{__dir__}/../files#{file_name}", 'r')
          if response.body == file.read && response.status == '200 OK'
            print '.'.green
          else
            print '!'.red
          end
          @package_rec += 1
        rescue Curl::Err::TimeoutError
          print '#'.yellow
          @package_loss += 1
        end

        # File POST
        begin
          file_name = 'image.jpeg'
          response = Curl::Easy.new(@uri + '/file') do |http|
            http.timeout = @http_timeout
          end
          response.multipart_form_post = true
          t = Time.now
          response.http_post(Curl::PostField.file('uploaded_image', "#{__dir__}/../files/#{file_name}"))
          @req_times << Time.now - t
          if response.status == '200 OK'
            print '.'.green
          else
            print '!'.red
          end
          @package_rec += 1
        rescue Curl::Err::TimeoutError
          print '#'.yellow
          @package_loss += 1
        end
      end
    end
  end

  # Joining threads
  @threads.each {|thread| thread.join}
end