test_server 0.4.1 → 0.5.0

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.
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