Skip to content

Commit

Permalink
Add memory consumption test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
thisismydesign committed May 24, 2017
1 parent 2913823 commit eeeae1a
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 0 deletions.
2 changes: 2 additions & 0 deletions json-streamer.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ Gem::Specification.new do |spec|
spec.add_development_dependency "rspec", "~> 3.0"
spec.add_development_dependency "coveralls"
spec.add_development_dependency "ndhash"
spec.add_development_dependency "sys-proctable"
spec.add_development_dependency "get_process_mem"

spec.add_dependency "json-stream"
end
47 changes: 47 additions & 0 deletions spec/json/streamer/json_streamer_spec.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
require 'spec_helper'
require 'json/stream'
require 'get_process_mem'


RSpec.describe Json::Streamer::JsonStreamer do

Expand Down Expand Up @@ -283,6 +286,50 @@
end
end

context 'Big JSON array parsed with JSON::Stream', :speed => 'slow', :type => 'memory' do
it 'should increase memory consumption' do

json_array_size = 2**16
hash = Array.new(json_array_size) {@example_hash}
json_file_mock = StringIO.new(JSON.generate(hash))

memory_consumption_before_parsing = GetProcessMem.new.mb
obj = JSON::Stream::Parser.parse(json_file_mock)
memory_consumption_after_parsing = GetProcessMem.new.mb

p "Number of elements: #{json_array_size}"
p "Memory consumption before and after parsing: #{memory_consumption_before_parsing.round} MB - #{memory_consumption_after_parsing.round} MB"
expect(memory_consumption_after_parsing).to be > 1.5 * memory_consumption_before_parsing
p "With JSON::Stream memory consumption increased with at least 150% during processing."
end
end

context 'Big JSON array parsed with JSON::Streamer', :speed => 'slow', :type => 'memory' do
it 'should NOT increase memory consumption' do

json_array_size = 2**18
hash = Array.new(json_array_size) {@example_hash}
json_file_mock = StringIO.new(JSON.generate(hash))

memory_consumption_before_parsing = GetProcessMem.new.mb

streamer = Json::Streamer::JsonStreamer.new(json_file_mock, 10)
object_count = 0
streamer.get(nesting_level:1) do |object|
expect(object).to eq(@example_hash)
object_count += 1
end
expect(object_count).to eq(json_array_size)

memory_consumption_after_parsing = GetProcessMem.new.mb

p "Number of elements: #{json_array_size}"
p "Memory consumption before and after parsing: #{memory_consumption_before_parsing.round} MB - #{memory_consumption_after_parsing.round} MB"
expect(memory_consumption_after_parsing).to be < 1.1 * memory_consumption_before_parsing
p "With JSON::Streamer memory consumption did not increase significantly during processing."
end
end

end

end

0 comments on commit eeeae1a

Please sign in to comment.