ambidexter 0.0.0 → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ac2c0f51bc58103c5d7e80d5b09a4b35af1d9560
4
- data.tar.gz: 73e6726d740433320330d992ffc9e85718be650a
3
+ metadata.gz: 8cc9e99ab8aeb4e9da3074f0bf294812f08c8f60
4
+ data.tar.gz: 8d26a8ad0319c7d176dca815a7f32b7446b54e7b
5
5
  SHA512:
6
- metadata.gz: eece94d881c718ad1f309eacf009cab3d137145c7c575843d01a243f53ee947afc7f83bb87211616cdac58ea76647ee661458b630dac0f79baa80c1a6e331ebf
7
- data.tar.gz: 9367012004b93e4aafd0b6e69453abe3c7306508fafdd5a99df1e6611e2964a324e611e00cf2eba07aeffe3bb6991a1e0530649d5eafb513f9d142e86243b5bf
6
+ metadata.gz: f81d14ca193b4ae000931e74b37501fd1aefbec93a2f11836c8ba7a7b555a41ea1308507a8360989f26caccc4eb60eeccea62c6639122bb8c18e5d8791bb60b9
7
+ data.tar.gz: 4fc109396b56b3c0bbe6fb8306b9dc66459467c36c943da042fd5aca75cd6a34ae98c57db69eae352826b23915c7762e26d1014cd1110d0f9e69320f550869a0
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'server'
4
+ require 'client'
5
+
6
+ if ARGV.include?('server')
7
+ server = Server.new
8
+ server.mount
9
+ server.start
10
+ elsif ARGV.include?('client')
11
+ client = Client.new
12
+ client.test
13
+ puts
14
+ puts client.result
15
+ end
@@ -0,0 +1,17 @@
1
+ class Application
2
+ class LoremIpsum
3
+ def self.lorem
4
+ 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
5
+ tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
6
+ quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
7
+ consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
8
+ cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat
9
+ non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
10
+ end
11
+ end
12
+
13
+ private
14
+ def blank?(value)
15
+ value.nil? || value.strip.empty?
16
+ end
17
+ end
@@ -0,0 +1,148 @@
1
+ require "application"
2
+ require "curb"
3
+ require "colorize"
4
+
5
+ class Client < Application
6
+ def initialize
7
+ # Setting IP of server
8
+ print "Input IP address of servrer: ".green
9
+ @ip = $stdin.gets.chomp
10
+ @ip = 'localhost' if blank? @ip
11
+
12
+ # Setting PORT of server
13
+ print "Input Port of servrer: ".green
14
+ @port = $stdin.gets.chomp
15
+ @port = '5899' if blank? @port
16
+
17
+ # Setting eterations count
18
+ print "Input eterations count: ".green
19
+ @each_count = $stdin.gets.chomp.to_i
20
+ @each_count = 1 if @each_count.zero?
21
+
22
+ # Setting eterations count
23
+ print "Input threads count: ".green
24
+ @threads_count = $stdin.gets.chomp.to_i
25
+ @threads_count = 1 if @threads_count.zero?
26
+
27
+ # Building link
28
+ @uri = "http://#{@ip}:#{@port}"
29
+
30
+ # Thread and time arrays
31
+ @req_times = []
32
+ @threads = []
33
+ end
34
+
35
+ def test
36
+ @threads_count.times do
37
+ @threads << Thread.new do
38
+ @each_count.times do
39
+ # Raw root GET
40
+ t = Time.now
41
+ response = Curl.get(@uri)
42
+ @req_times << Time.now - t
43
+ if response.status == '200 OK'
44
+ print '.'.green
45
+ else
46
+ print '!'.red
47
+ end
48
+
49
+ # Root POST with correct params
50
+ t = Time.now
51
+ response = Curl.post(@uri, { name: 'Oleg', github_nickname: 'sorefull' })
52
+ @req_times << Time.now - t
53
+ if response.status == '202 Accepted'
54
+ print '.'.green
55
+ else
56
+ print '!'.red
57
+ end
58
+
59
+ # Root POST with wrong params
60
+ t = Time.now
61
+ response = Curl.post(@uri, { name: '', github_nickname: '' })
62
+ @req_times << Time.now - t
63
+ if response.status == '401 Unauthorized'
64
+ print '.'.green
65
+ else
66
+ print '!'.red
67
+ end
68
+
69
+ # Lorem GET with body check
70
+ t = Time.now
71
+ response = Curl.get(@uri + '/lorem')
72
+ @req_times << Time.now - t
73
+ if response.body == LoremIpsum.lorem
74
+ print '.'.green
75
+ else
76
+ print '!'.red
77
+ end
78
+
79
+ # Lorem GET with params
80
+ t = Time.now
81
+ response = Curl.get(@uri + '/lorem', { length: 10 })
82
+ @req_times << Time.now - t
83
+ if response.body == LoremIpsum.lorem[0..10]
84
+ print '.'.green
85
+ else
86
+ print '!'.red
87
+ end
88
+
89
+ # Cookie GET with correct cookies
90
+ t = Time.now
91
+ response = Curl.get(@uri + '/cookie') do |http|
92
+ http.headers['Cookie'] = 'private=asdfg; public=gijj'
93
+ end
94
+ @req_times << Time.now - t
95
+ if response.status == '200 OK'
96
+ print '.'.green
97
+ else
98
+ print '!'.red
99
+ end
100
+
101
+ # Cookie GET with wrong cookies
102
+ t = Time.now
103
+ response = Curl.get(@uri + '/cookie') do |http|
104
+ http.headers['Cookie'] = 'private=wrong; public=wrong'
105
+ end
106
+ @req_times << Time.now - t
107
+ if response.status == '401 Unauthorized'
108
+ print '.'.green
109
+ else
110
+ print '!'.red
111
+ end
112
+
113
+ # File GET
114
+ file_name = '/file.txt'
115
+ t = Time.now
116
+ response = Curl.get(@uri + file_name)
117
+ @req_times << Time.now - t
118
+ file = File.open("./files#{file_name}", 'r')
119
+ if response.body == file.read && response.status == '200 OK'
120
+ print '.'.green
121
+ else
122
+ print '!'.red
123
+ end
124
+
125
+ # File POST
126
+ file_name = 'image.jpeg'
127
+ response = Curl::Easy.new(@uri + '/file')
128
+ response.multipart_form_post = true
129
+ t = Time.now
130
+ response.http_post(Curl::PostField.file('uploaded_image', "./files/#{file_name}"))
131
+ @req_times << Time.now - t
132
+ if response.status == '200 OK'
133
+ print '.'.green
134
+ else
135
+ print '!'.red
136
+ end
137
+ end
138
+ end
139
+ end
140
+
141
+ # Joining threads
142
+ @threads.each {|thread| thread.join}
143
+ end
144
+
145
+ def result
146
+ @req_times
147
+ end
148
+ end
@@ -0,0 +1,75 @@
1
+ require "application"
2
+ require "webrick"
3
+ include WEBrick
4
+ require 'securerandom'
5
+
6
+ class Server < Application
7
+ class RootPath < WEBrick::HTTPServlet::AbstractServlet
8
+ def do_GET(request, response)
9
+ response.status = 200
10
+ end
11
+ def do_POST(request, response)
12
+ if request.query == { "name"=>"Oleg", "github_nickname"=>"sorefull"}
13
+ response.status = 202
14
+ else
15
+ response.status = 401
16
+ end
17
+ end
18
+ end
19
+
20
+ class LoremPath < WEBrick::HTTPServlet::AbstractServlet
21
+ def do_GET(request, response)
22
+ length = request.query['length'].to_i
23
+ length = -1 if length < 1
24
+ response.body = Server::LoremIpsum.lorem[0..length]
25
+ response.status = 200
26
+ end
27
+ end
28
+
29
+ class CookiePath < WEBrick::HTTPServlet::AbstractServlet
30
+ def do_GET(request, response)
31
+ if request.cookies.select{|c| c.name == 'private'}.first.value == 'asdfg' &&
32
+ request.cookies.select{|c| c.name == 'public'}.first.value == 'gijj'
33
+ response.status = 200
34
+ else
35
+ response.status = 401
36
+ end
37
+ end
38
+ end
39
+
40
+ class FilePath < WEBrick::HTTPServlet::AbstractServlet
41
+ def do_POST(request, response)
42
+ file_data = request.query["uploaded_image"]
43
+ random_string = SecureRandom.hex(3)
44
+ f = File.open("tmp/#{random_string}_image.jpeg", "wb")
45
+ f.syswrite file_data
46
+ f.close
47
+ response.status = FileUtils.compare_file("tmp/#{random_string}_image.jpeg", 'files/image.jpeg') ? 200 : 500
48
+ FileUtils.rm_rf("tmp/#{random_string}_image.jpeg")
49
+ end
50
+ end
51
+
52
+ def initialize
53
+ print "Input Port of servrer: ".green
54
+ @port = $stdin.gets.chomp
55
+ @port = '5899' if blank? @port
56
+ FileUtils.rm_rf('tmp')
57
+ Dir.mkdir('tmp')
58
+ end
59
+
60
+ def mount
61
+ @server = HTTPServer.new(:Port => @port)
62
+ @server.mount "/", RootPath
63
+ @server.mount "/lorem", LoremPath
64
+ @server.mount "/cookie", CookiePath
65
+ @server.mount "/file", FilePath
66
+ @server.mount('/file.txt', WEBrick::HTTPServlet::DefaultFileHandler, './files/file.txt')
67
+ end
68
+
69
+ def start
70
+ ['TERM', 'INT'].each do |signal|
71
+ trap(signal){ @server.shutdown }
72
+ end
73
+ @server.start
74
+ end
75
+ end
metadata CHANGED
@@ -1,25 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ambidexter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oleg Cherednichenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-11 00:00:00.000000000 Z
11
+ date: 2016-06-12 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Ambidexter two hands and will give bouth to help you in testing your
14
- network for HTTP stuff
13
+ description: Ambidexter hands two hands and will give bouth to help you in testing
14
+ your network for HTTP stuff
15
15
  email: olegh.cherednichenko@gmail.com
16
16
  executables:
17
- - greet
17
+ - ambidexter
18
18
  extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
- - bin/greet
22
- - lib/ambidexter.rb
21
+ - bin/ambidexter
22
+ - lib/application.rb
23
+ - lib/client.rb
24
+ - lib/server.rb
23
25
  homepage: http://rubygems.org/gems/ambidexter
24
26
  licenses:
25
27
  - MIT
data/bin/greet DELETED
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'ambidexter'
4
- Ambidexter.hello
@@ -1,5 +0,0 @@
1
- class Ambidexter
2
- def self.hello
3
- puts 'Hello from Ambidexter'
4
- end
5
- end