Skip to content

Straggler rails version tests are never running for booter and response specs #376

@chadlwilson

Description

@chadlwilson

There are some straggler rails version-specific tests/code that are not currently running. Some may have been accidentally omitted from running on newer rails versions; others may have been logic specific to those rails versions that were not actually needed/wanted on newer versions.

  • Dead code? (folder doesn't exist I think, but test is passing anyway with and without rails)
    when '/WEB-INF' then File.expand_path('rails30/WEB-INF', STUB_DIR)
  • Body closing
    it "closes original body during write_body", :lib => [:rails30, :rails31, :rails32] do
    body = wrap_file_body File.expand_path('../../files/image.jpg', File.dirname(__FILE__))
    response = JRuby::Rack::Response.new [200, body.headers, body]
    expect(body).to receive(:close)
    response.write_body(response_environment)
    end
  • Dechunking?
    • may or may not be used/needed now (need to investigate whether JRuby::Rack::Response.dechunk = false is used/needed still).
      it "dechunks the body when a chunked response is detected",
      :lib => [:rails23, :rails31, :rails32, :rails40] do
      require 'rack/chunked'
      headers = {
      "Cache-Control" => 'no-cache',
      "Transfer-Encoding" => 'chunked'
      }
      body = [
      "1".freeze,
      "\nsecond chunk",
      "a multi\nline chunk \n42",
      "utf-8 chunk 'ty píčo'!\n",
      "terminated chunk\r\n",
      "", # should be skipped
      "\r\nthe very\r\n last\r\n\r\n chunk"
      ]
      with_dechunk do
      body = Rack::Chunked::Body.new body
      response = JRuby::Rack::Response.new([200, headers, body])
      response.write_headers(response_environment)
      times = 0
      expect(stream).to receive(:write).exactly(6).times do |bytes|
      str = String.from_java_bytes(bytes)
      str = str.force_encoding('UTF-8') if str.respond_to?(:force_encoding)
      case times += 1
      when 1 then expect(str).to eq "1"
      when 2 then expect(str).to eq "\nsecond chunk"
      when 3 then expect(str).to eq "a multi\nline chunk \n42"
      when 4 then expect(str).to eq "utf-8 chunk 'ty píčo'!\n"
      when 5 then expect(str).to eq "terminated chunk\r\n"
      when 6 then expect(str).to eq "\r\nthe very\r\n last\r\n\r\n chunk"
      else
      fail("unexpected :write received with #{str.inspect}")
      end
      end
      expect(stream).to receive(:flush).exactly(6 + 1).times # +1 for tail chunk
      response.write_body(response_environment)
      end
      end
      it "does not dechunk body when dechunkins is turned off",
      :lib => [:rails31, :rails32, :rails40] do
      dechunk = JRuby::Rack::Response.dechunk?
      begin
      JRuby::Rack::Response.dechunk = false
      require 'rack/chunked'
      headers = {
      "Cache-Control" => 'no-cache',
      "Transfer-Encoding" => 'chunked'
      }
      body = [
      "1".freeze,
      "\nsecond chunk",
      ""
      ]
      body = Rack::Chunked::Body.new body
      response = JRuby::Rack::Response.new([200, headers, body])
      response.write_headers(response_environment)
      times = 0
      expect(stream).to receive(:write).exactly(3).times do |bytes|
      str = String.from_java_bytes(bytes)
      case times += 1
      when 1 then expect(str).to eq "1\r\n1\r\n"
      when 2 then expect(str).to eq "d\r\n\nsecond chunk\r\n"
      when 3 then expect(str).to eq "0\r\n\r\n"
      else
      fail("unexpected :write received with #{str.inspect}")
      end
      end
      expect(stream).to receive(:flush).exactly(3).times
      response.write_body(response_environment)
      ensure
      JRuby::Rack::Response.dechunk = dechunk
      end
      end
  • Streaming files
    it "streams a file using a channel if wrapped in body_parts",
    :lib => [:rails30, :rails31, :rails32] do
    body = wrap_file_body path =
    File.expand_path('../../files/image.jpg', File.dirname(__FILE__))
    stream = self.stream
    response = JRuby::Rack::Response.new [200, body.headers, body]
    response.write_body(response_environment)
    expect_eql_java_bytes stream.to_java_bytes, File.read(path).to_java_bytes
    end

Would also be good to review and remove the associated code if they were specific to ancient rails versions.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions