test_server 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +6 -3
  3. data/Gemfile +13 -5
  4. data/README.md +16 -0
  5. data/Rakefile +17 -3
  6. data/app/assets/javascripts/test_server/file_uploader.js.coffee +3 -0
  7. data/app/assets/stylesheets/application.scss +31 -0
  8. data/app/assets/stylesheets/test_server/file_uploader.css.scss +3 -0
  9. data/app/controllers/test_server/file_uploader_controller.rb +42 -0
  10. data/app/helpers/test_server/file_uploader_helper.rb +2 -0
  11. data/app/models/test_server/file_upload.rb +41 -0
  12. data/app/views/layouts/application.html.haml +10 -0
  13. data/app/views/test_server/dashboard/show.html.haml +1 -0
  14. data/app/views/test_server/file_uploader/_form.html.haml +27 -0
  15. data/app/views/test_server/file_uploader/_overview.html.haml +1 -0
  16. data/app/views/test_server/file_uploader/index.html.haml +1 -0
  17. data/app/views/test_server/file_uploader/result.html.haml +40 -0
  18. data/app/views/test_server/file_uploader/upload.html.haml +1 -0
  19. data/config/routes.rb +8 -2
  20. data/lib/test_server/checksum.rb +21 -0
  21. data/lib/test_server/checksum_calculator.rb +27 -0
  22. data/lib/test_server/command_runner.rb +58 -0
  23. data/lib/test_server/exceptions.rb +3 -0
  24. data/lib/test_server/file_size.rb +14 -0
  25. data/lib/test_server/filetype_detector.rb +21 -0
  26. data/lib/test_server/locales/en.yml +28 -1
  27. data/lib/test_server/main.rb +6 -1
  28. data/lib/test_server/md5_calculator.rb +17 -0
  29. data/lib/test_server/permitted_params.rb +25 -7
  30. data/lib/test_server/sha256_calculator.rb +17 -0
  31. data/lib/test_server/uploaded_file.rb +58 -0
  32. data/lib/test_server/version.rb +1 -1
  33. data/lib/test_server/virus_detector.rb +43 -0
  34. data/lib/test_server.rb +15 -0
  35. data/public/assets/{manifest-7c069da388f8a976fadfaab958b9feb7.json → manifest-1a3c45fcd482cca628c8cdc72631eb98.json} +0 -0
  36. data/spec/controllers/test_server/file_uploader_controller_spec.rb +26 -0
  37. data/spec/encoder_spec.rb +3 -3
  38. data/spec/features/fetch_data_via_javascript_spec.rb +18 -18
  39. data/spec/filetype_detector_spec.rb +31 -0
  40. data/spec/fixtures/file_uploader/file.bin +0 -0
  41. data/spec/permitted_params_spec.rb +1 -1
  42. data/spec/sha256_calculator_spec.rb +36 -0
  43. data/spec/spec_helper.rb +2 -0
  44. data/spec/support/commands.rb +15 -0
  45. data/spec/support/debugging.rb +6 -1
  46. data/spec/support/eicar.rb +15 -0
  47. data/spec/support/fixtures.rb +16 -0
  48. data/spec/support/rails.rb +2 -0
  49. data/spec/uploaded_file_spec.rb +167 -0
  50. data/spec/views/errors/not_found.html.haml_spec.rb +1 -1
  51. data/spec/views/test_server/file_uploader/index.html.haml_spec.rb +32 -0
  52. data/spec/views/test_server/file_uploader/result.html.haml_spec.rb +58 -0
  53. data/spec/views/test_server/file_uploader/upload.html.haml_spec.rb +12 -0
  54. data/spec/views/test_server/reflector/client_ip_address.html.haml_spec.rb +1 -1
  55. data/spec/virus_detector_spec.rb +45 -0
  56. data/test_server.gemspec +2 -3
  57. metadata +48 -19
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe TestServer::FileUploaderController do
4
+
5
+ describe "GET 'show'" do
6
+ it "returns http success" do
7
+ post 'result'
8
+ response.should be_success
9
+ end
10
+ end
11
+
12
+ describe "GET 'index'" do
13
+ it "returns http success" do
14
+ get 'index'
15
+ response.should be_success
16
+ end
17
+ end
18
+
19
+ describe "GET 'upload'" do
20
+ it "returns http success" do
21
+ get 'upload'
22
+ response.should be_success
23
+ end
24
+ end
25
+
26
+ end
data/spec/encoder_spec.rb CHANGED
@@ -20,7 +20,7 @@ describe Encoder do
20
20
 
21
21
  context '#name?' do
22
22
  it 'checks name' do
23
- expect(MyEncoder.new.name?(MyEncoder.new.name)).to be_true
23
+ expect(MyEncoder.new.name?(MyEncoder.new.name)).to be_truthy
24
24
  end
25
25
  end
26
26
 
@@ -34,7 +34,7 @@ describe Encoder do
34
34
  it 'compares instances for hash' do
35
35
  e1 = MyEncoder.new
36
36
  e2 = MyEncoder.new
37
- expect(e1.eql? e2).to be_true
37
+ expect(e1.eql? e2).to be_truthy
38
38
  end
39
39
  end
40
40
 
@@ -42,7 +42,7 @@ describe Encoder do
42
42
  it 'understands equality' do
43
43
  e1 = MyEncoder.new
44
44
  e2 = MyEncoder.new
45
- expect(e1 == e2).to be_true
45
+ expect(e1 == e2).to be_truthy
46
46
  end
47
47
  end
48
48
 
@@ -54,25 +54,25 @@ describe 'Fetch data via javascript', :js do
54
54
  expect(page).to have_content(url)
55
55
  end
56
56
 
57
- it 'supports opening a new page based on given values' do
58
- url = '/generator/xhr'
59
- visit '/generator/xhr'
60
-
61
- within '#form' do
62
- fill_in 'url', :with => url
63
- fill_in 'count', :with => 1
64
- fill_in 'timeout', :with => 100
65
- find('#repeat').trigger('click')
66
- end
57
+ #it 'supports opening a new page based on given values' do
58
+ # url = '/generator/xhr'
59
+ # visit '/generator/xhr'
60
+
61
+ # within '#form' do
62
+ # fill_in 'url', :with => url
63
+ # fill_in 'count', :with => 1
64
+ # fill_in 'timeout', :with => 100
65
+ # find('#repeat').trigger('click')
66
+ # end
67
67
 
68
- click_link('clone')
68
+ # click_link('clone')
69
69
 
70
- within_window '' do
71
- expect(find('#url').value).to eq url
72
- expect(find('#count').value).to eq '1'
73
- expect(find('#timeout').value).to eq '100'
74
- expect(find('#repeat').checked?).to be true
75
- end
76
- end
70
+ # within_window '' do
71
+ # expect(find('#url').value).to eq url
72
+ # expect(find('#count').value).to eq '1'
73
+ # expect(find('#timeout').value).to eq '100'
74
+ # expect(find('#repeat').checked?).to be true
75
+ # end
76
+ #end
77
77
  end
78
78
  end
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe FiletypeDetector do
5
+ context '#use' do
6
+ it 'adds filetype if it\'s known' do
7
+ test_file = create_file('file.html', '<html></html>')
8
+
9
+ file = double 'file'
10
+ expect(file).to receive(:path).and_return(test_file)
11
+ expect(file).to receive(:filetype=).with('HTML document, ASCII text, with no line terminators')
12
+
13
+ detector = FiletypeDetector.new
14
+ detector.use file
15
+
16
+ end
17
+
18
+ it 'adds error message if an error occured during filetype detection' do
19
+ test_file = SecureRandom.hex
20
+
21
+ file = double 'file'
22
+ expect(file).to receive(:path).and_return(test_file)
23
+ allow(file).to receive(:name).and_return(File.basename(test_file))
24
+ expect(file).to receive(:filetype=).with("cannot open `#{test_file}' (No such file or directory)")
25
+
26
+ detector = FiletypeDetector.new
27
+ detector.use file
28
+
29
+ end
30
+ end
31
+ end
@@ -58,7 +58,7 @@ describe PermittedParams do
58
58
  permitted_params = PermittedParams.new(params)
59
59
 
60
60
  params = permitted_params.known_params_for_controller("string", "plain")
61
- expect(params).to eq [:base64, :base64_strict, :count, :expires, :gzip]
61
+ expect(params).to eq [:base64, :base64_strict, :count, :expires, :gzip, :wait]
62
62
  end
63
63
  end
64
64
  end
@@ -0,0 +1,36 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Sha256Calculator do
5
+
6
+ context '#use' do
7
+ it 'adds check sum to file' do
8
+ test_file = create_file('file.html', 'data')
9
+ checksum = Digest::SHA256.hexdigest 'data'
10
+
11
+ file = double 'file'
12
+ expect(file).to receive(:path).and_return(test_file)
13
+ expect(file).to receive(:checksum=) do |arg|
14
+ expect(arg.algorithm).to eq(:sha256)
15
+ expect(arg.value).to eq(checksum)
16
+ end
17
+
18
+ detector = Sha256Calculator.new
19
+ detector.use file
20
+ end
21
+
22
+ it 'adds error message to file' do
23
+ test_file = SecureRandom.hex
24
+
25
+ file = double 'file'
26
+ allow(file).to receive(:path).and_return(test_file)
27
+ allow(file).to receive(:name).and_return(File.basename(test_file))
28
+ expect(file).to receive(:checksum=) do |arg|
29
+ expect(arg.value).to eq("An error occured while determine checksum for \"#{test_file}\".")
30
+ end
31
+
32
+ detector = Sha256Calculator.new
33
+ detector.use file
34
+ end
35
+ end
36
+ end
data/spec/spec_helper.rb CHANGED
@@ -16,6 +16,8 @@ require 'test_server'
16
16
 
17
17
  # Loading support files
18
18
  Dir.glob(::File.expand_path('../support/*.rb', __FILE__)).each { |f| require_relative f }
19
+ # Loading shared examples
20
+ Dir.glob(::File.expand_path('../shared_examples/**/*.rb', __FILE__)).each { |f| require_relative f }
19
21
 
20
22
  include TestServer
21
23
 
@@ -0,0 +1,15 @@
1
+ # encoding: utf-8
2
+ require 'fedux_org/stdlib/command/which'
3
+
4
+ module TestServer
5
+ module SpecHelper
6
+ module Commands
7
+ include ::FeduxOrg::Stdlib::Command::Which
8
+ end
9
+ end
10
+ end
11
+
12
+ RSpec.configure do |c|
13
+ c.include TestServer::SpecHelper::Commands
14
+ end
15
+
@@ -1,3 +1,8 @@
1
1
  # encoding: utf-8
2
2
  require 'pry'
3
- require 'debugger'
3
+
4
+ if RUBY_VERSION < '2.0.0'
5
+ require 'debugger'
6
+ else
7
+ require 'byebug'
8
+ end
@@ -0,0 +1,15 @@
1
+ # encoding: utf-8
2
+ module TestServer
3
+ module SpecHelper
4
+ module Eicar
5
+ def eicar_test_string
6
+ %w{X 5 O ! P % @ A P [ 4 \\ P Z X 5 4 ( P ^ ) 7 C C ) 7 \} $ E I C A R - S T A N D A R D - A N T I V I R U S - T E S T - F I L E ! $ H + H * }.join
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ RSpec.configure do |c|
13
+ c.include TestServer::SpecHelper::Eicar
14
+ end
15
+
@@ -0,0 +1,16 @@
1
+ # encoding: utf-8
2
+
3
+ module TestServer
4
+ module SpecHelper
5
+ module Fixtures
6
+ def fixture_file(name)
7
+ File.new(File.expand_path("../../fixtures/#{name}", __FILE__))
8
+ end
9
+ end
10
+ end
11
+ end
12
+
13
+ RSpec.configure do |c|
14
+ c.include TestServer::SpecHelper::Fixtures
15
+ end
16
+
@@ -30,4 +30,6 @@ RSpec.configure do |config|
30
30
  # the seed, which is printed after each run.
31
31
  # --seed 1234
32
32
  #config.order = "random"
33
+
34
+ config.infer_spec_type_from_file_location!
33
35
  end
@@ -0,0 +1,167 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe UploadedFile do
5
+ context '#initialize' do
6
+ it 'requires an uploaded file' do
7
+ uploaded_file = double('ActionDispatch::Http::UploadedFile')
8
+ allow(uploaded_file).to receive(:tempfile)
9
+
10
+ UploadedFile.new(uploaded_file)
11
+ end
12
+
13
+ it 'handles empty string' do
14
+ expect {
15
+ UploadedFile.new('')
16
+ }.not_to raise_error
17
+ end
18
+ end
19
+
20
+ context '#path' do
21
+ it 'returns path for uploaded file' do
22
+ uploaded_file = double('ActionDispatch::Http::UploadedFile')
23
+ allow(uploaded_file).to receive(:tempfile)
24
+ allow(uploaded_file).to receive(:path).and_return('/tmp/filename.png')
25
+
26
+ file = UploadedFile.new(uploaded_file)
27
+ expect(file.path).to eq('/tmp/filename.png')
28
+ end
29
+ end
30
+
31
+ context '#name' do
32
+ it 'returns basename for uploaded file' do
33
+ uploaded_file = double('ActionDispatch::Http::UploadedFile')
34
+ allow(uploaded_file).to receive(:tempfile)
35
+ allow(uploaded_file).to receive(:original_filename).and_return('filename.png')
36
+
37
+ file = UploadedFile.new(uploaded_file)
38
+ expect(file.name).to eq('filename.png')
39
+ end
40
+ end
41
+
42
+ context '#contains_virus?' do
43
+ it 'is false if does not contain virus' do
44
+ uploaded_file = double('ActionDispatch::Http::UploadedFile')
45
+ allow(uploaded_file).to receive(:tempfile)
46
+
47
+ file = UploadedFile.new(uploaded_file)
48
+ expect(file.contains_virus?).to be_falsey
49
+ end
50
+ end
51
+
52
+ context '#virus_id' do
53
+ it 'sets a virus id' do
54
+ uploaded_file = double('ActionDispatch::Http::UploadedFile')
55
+ allow(uploaded_file).to receive(:tempfile)
56
+
57
+ file = UploadedFile.new(uploaded_file)
58
+
59
+ expect {
60
+ file.virus_id = 'EICAR'
61
+ }.not_to raise_error
62
+ end
63
+
64
+ it 'returns a virus id' do
65
+ uploaded_file = double('ActionDispatch::Http::UploadedFile')
66
+ allow(uploaded_file).to receive(:tempfile)
67
+
68
+ file = UploadedFile.new(uploaded_file)
69
+ file.virus_id = 'EICAR'
70
+
71
+ expect(file.virus_id).to eq 'EICAR'
72
+ end
73
+ end
74
+
75
+ context '#has_filetype?' do
76
+ it 'is false if has no filetype' do
77
+ uploaded_file = double('ActionDispatch::Http::UploadedFile')
78
+ allow(uploaded_file).to receive(:tempfile)
79
+
80
+ file = UploadedFile.new(uploaded_file)
81
+ expect(file.has_filetype?).to be_falsey
82
+ end
83
+ end
84
+
85
+ context '#filetype' do
86
+ it 'sets a filetype' do
87
+ uploaded_file = double('ActionDispatch::Http::UploadedFile')
88
+ allow(uploaded_file).to receive(:tempfile)
89
+
90
+ file = UploadedFile.new(uploaded_file)
91
+
92
+ expect {
93
+ file.filetype = 'Text'
94
+ }.not_to raise_error
95
+ end
96
+
97
+ it 'returns a filetype' do
98
+ uploaded_file = double('ActionDispatch::Http::UploadedFile')
99
+ allow(uploaded_file).to receive(:tempfile)
100
+
101
+ file = UploadedFile.new(uploaded_file)
102
+ file.filetype = 'Text'
103
+
104
+ expect(file.filetype).to eq 'Text'
105
+ end
106
+ end
107
+
108
+ context '#checksum=' do
109
+ it 'sets the checksum for file' do
110
+ uploaded_file = double('ActionDispatch::Http::UploadedFile')
111
+ allow(uploaded_file).to receive(:tempfile)
112
+
113
+ file = UploadedFile.new(uploaded_file)
114
+
115
+ expect {
116
+ file.checksum = Digest::SHA256.hexdigest 'message'
117
+ }.not_to raise_error
118
+ end
119
+ end
120
+
121
+ context '#checksum' do
122
+ it 'returns checksum hash for content' do
123
+ uploaded_file = double('ActionDispatch::Http::UploadedFile')
124
+ allow(uploaded_file).to receive(:tempfile)
125
+
126
+ checksum = Digest::SHA256.hexdigest 'message'
127
+
128
+ file = UploadedFile.new(uploaded_file)
129
+ file.checksum = checksum
130
+
131
+ expect(file.checksum.first).to eq(checksum)
132
+ end
133
+ end
134
+
135
+ context '#has_checksum' do
136
+ it 'is false if has no checksum' do
137
+ uploaded_file = double('ActionDispatch::Http::UploadedFile')
138
+ allow(uploaded_file).to receive(:tempfile)
139
+
140
+ file = UploadedFile.new(uploaded_file)
141
+ expect(file.has_checksum?).to be_falsey
142
+ end
143
+
144
+ it 'is true if has a checksum' do
145
+ uploaded_file = double('ActionDispatch::Http::UploadedFile')
146
+ allow(uploaded_file).to receive(:tempfile)
147
+
148
+ file = UploadedFile.new(uploaded_file)
149
+ file.checksum = Digest::SHA256.hexdigest 'message'
150
+ expect(file.has_checksum?).to be_truthy
151
+ end
152
+ end
153
+
154
+ context '#size' do
155
+ it 'returns the file size' do
156
+ uploaded_file = double('ActionDispatch::Http::UploadedFile')
157
+ allow(uploaded_file).to receive(:tempfile)
158
+ allow(uploaded_file).to receive(:size).and_return 4294967296
159
+
160
+ file = UploadedFile.new(uploaded_file)
161
+ expect(file.size[:b].value).to eq('4294967296')
162
+ expect(file.size[:kib].value).to eq('4194304.00')
163
+ expect(file.size[:mib].value).to eq('4096.00')
164
+ expect(file.size[:gib].value).to eq('4.00')
165
+ end
166
+ end
167
+ end
@@ -1,5 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "errors/not_found.html.haml" do
4
- pending "add some examples to (or delete) #{__FILE__}"
4
+ skip
5
5
  end
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe "file_uploader/index.html.haml" do
5
+ before :each do
6
+ config = Class.new do
7
+ include FeduxOrg::Stdlib::Filesystem
8
+
9
+ def root_directory
10
+ ::File.expand_path('../../../', __FILE__)
11
+ end
12
+
13
+ def log_level
14
+ :unknown
15
+ end
16
+
17
+ def access_log
18
+ File.join(working_directory, 'access.log')
19
+ end
20
+ end.new
21
+
22
+ TestServer.config = config
23
+ end
24
+
25
+ context 'Upload files' do
26
+ it 'lists links to all other test functions' do
27
+ visit '/file_uploader/'
28
+
29
+ expect(page).to have_content 'Upload file'
30
+ end
31
+ end
32
+ end