Comments (3)
Due to CRuby's conservative GC, you can never be sure that an object would be finalized, because there might be something on the C stack that looks like a reference to it.
However, CRuby can probably use the same approach that JRuby uses (create 50 objects and GC after each), since that should statistically make it unlikely that all instances will not be GCed.
Can you try the following patch and let me know if it makes the tests pass?:
diff --git a/spec/rack/test/uploaded_file_spec.rb b/spec/rack/test/uploaded_file_spec.rb
index 2cb56ac..67bfbc5 100644
--- a/spec/rack/test/uploaded_file_spec.rb
+++ b/spec/rack/test/uploaded_file_spec.rb
@@ -69,8 +69,10 @@ describe Rack::Test::UploadedFile do
System.gc
end
else
- c.new(file_path)
- GC.start
+ 50.times do |_i|
+ c.new(file_path)
+ GC.start
+ end
end
# Due to CRuby's conservative garbage collection, you can never guarantee
from rack-test.
Due to CRuby's conservative GC, you can never be sure that an object would be finalized, because there might be something on the C stack that looks like a reference to it.
However, CRuby can probably use the same approach that JRuby uses (create 50 objects and GC after each), since that should statistically make it unlikely that all instances will not be GCed.
Can you try the following patch and let me know if it makes the tests pass?:
diff --git a/spec/rack/test/uploaded_file_spec.rb b/spec/rack/test/uploaded_file_spec.rb index 2cb56ac..67bfbc5 100644 --- a/spec/rack/test/uploaded_file_spec.rb +++ b/spec/rack/test/uploaded_file_spec.rb @@ -69,8 +69,10 @@ describe Rack::Test::UploadedFile do System.gc end else - c.new(file_path) - GC.start + 50.times do |_i| + c.new(file_path) + GC.start + end end # Due to CRuby's conservative garbage collection, you can never guarantee
That does the trick! π Thank you!!
from rack-test.
OK, I pushed a commit for that. Thanks for the report!
from rack-test.
Related Issues (20)
- Encoding error with binary files HOT 13
- uploaded_file.rb#append_to: incompatible character encodings: UTF-8 and ASCII-8BIT HOT 3
- clarify that minitest is used for testing HOT 1
- utils.rb#build_primitive_part: incompatible character encodings: UTF-8 and ASCII-8BIT HOT 4
- Π‘an`t pass cookies HOT 1
- Setting original_filename when the content is not StringIO HOT 4
- build_primitive_part: undefined method `b' while testing docx HOT 4
- ActiveSupport::MessageVerifier::InvalidSignature error while uploading file in RSpec Tests HOT 2
- Resolving dependencies for published CVE's HOT 1
- Cannot set CONTENT_TYPE at Rack::MockRequest.env_for HOT 1
- Request#[] is deprecated and will be removed in a future version of Rack. Please use request.params[] instead HOT 2
- something amiss with release tags HOT 3
- Preferred way to set :domain option on cookie jar while setting a cookie using []=? HOT 2
- Rack >= 2.2.2 tests skip `Rack::Events#on_finish` HOT 3
- Is `Rack::Test::UploadedFile` supposed to be used with StringIO instead of real files? HOT 1
- Accessing Tempfile after GC of UploadedFile will cause IOError HOT 2
- Vulnerability scan shows rack-test is bringing in a vulnerable version of rack HOT 4
- Request body received as empty string in POST request (sinatra 4, rack 3) HOT 4
- no _dump_data is defined for class StringIO when running tests HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. πππ
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rack-test.