GIF89a=( õ' 7IAXKgNgYvYx\%wh…hŽth%ˆs%—x¨}9®Œ©€&©‰%¶†(¹–.¹5·œD¹&Çš)ÇŸ5ǘ;Í£*È¡&Õ²)ׯ7×µ<Ñ»4ï°3ø‘HÖ§KͯT÷¨Yÿšqÿ»qÿÔFØ !ù ' !ÿ NETSCAPE2.0 , =( þÀ“pH,È¤rÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§gª«ªE¯°¨¬ª±²Œ¹º¹E¾­”´ÂB¶¯ §Åȸ»ÑD¾¿Á•ÄÅ®° ÝH¾ÒLÀÆDÙ«D¶BÝïðÀ¾DÑÑÔTÌÍíH òGö¨A RÎڐ |¥ ٭&ºìE8œ¹kGÔAÞpx­a¶­ã R2XB®åE8I€Õ6Xî:vT)äžþÀq¦è³¥ì仕F~%xñ  4#ZÔ‰O|-4Bs‘X:= QÉ œš lºÒyXJŠGȦ|s hÏíK–3l7·B|¥$'7Jީܪ‰‡àá”Dæn=Pƒ ¤Òëí‰`䌨ljóá¯Éüv>á–Á¼5 ½.69ûϸd«­ºÀûnlv©‹ªîf{¬ÜãPbŸ  l5‘ޝpß ´ ˜3aÅùäI«O’ý·‘áÞ‡˜¾Æ‚ÙÏiÇÿ‹Àƒ #öó)pâš Þ½ ‘Ý{ó)vmÞü%D~ 6f s}ŃƒDØW Eþ`‡þ À…L8xá†ç˜{)x`X/> Ì}mø‚–RØ‘*|`D=‚Ø_ ^ð5 !_…'aä“OÚ—7âcð`D”Cx`ÝÂ¥ä‹éY¹—F¼¤¥Š?¡Õ™ n@`} lď’ÄÉ@4>ñd œ à‘vÒxNÃ×™@žd=ˆgsžG±æ ´²æud &p8Qñ)ˆ«lXD©øÜéAžHìySun jª×k*D¤LH] †¦§C™Jä–´Xb~ʪwStŽ6K,°£qÁœ:9ت:¨þªl¨@¡`‚ûÚ ».Û¬¯t‹ÆSÉ[:°=Š‹„‘Nåû”Ìî{¿ÂA ‡Rà›ÀÙ6úë°Ÿð0Ä_ ½;ÃϱîÉì^ÇÛÇ#Ëë¼ôº!±Ä˜íUîÅÇ;0L1óÁµö«p% AÀºU̬ݵ¼á%霼€‡¯Á~`ÏG¯»À× ­²± =4ªnpð3¾¤³¯­ü¾¦îuÙuµÙ®|%2ÊIÿür¦#0·ÔJ``8È@S@5ê¢ ö×Þ^`8EÜ]ý.뜃Âç 7 ú ȉÞj œ½Dç zý¸iþœÑÙûÄë!ˆÞÀl§Ïw‹*DçI€nEX¯¬¼ &A¬Go¼QföõFç°¯;é¦÷îŽêJ°îúôF5¡ÌQ|îúöXªæ»TÁÏyñêï]ê² o óÎC=öõ›ÒÓPB@ D×½œä(>èCÂxŽ`±«Ÿ–JЀ»Û á¤±p+eE0`ëŽ`A Ú/NE€Ø†À9‚@¤à H½7”à‡%B‰`Àl*ƒó‘–‡8 2ñ%¸ —€:Ù1Á‰E¸àux%nP1ð!‘ðC)¾P81lÑɸF#ˆ€{´âé°ÈB„0>±û °b¡Š´±O‚3È–Ù()yRpbµ¨E.Z‘D8ÊH@% òŒx+%Ù˜Æcü »¸˜fõ¬b·d`Fê™8èXH"ÉÈ-±|1Ô6iI, 2““¬$+](A*jÐ QTÂo‰.ÛU슬Œã„Ž`¯SN¡–¶Äåyše¯ª’­¬‚´b¦Éož œ)åyâ@Ì®3 ÎtT̉°&Ø+žLÀf"Ø-|žçÔ>‡Ðv¦Ðžì\‚ Q1)Ž@Žh#aP72”ˆ™¨$‚ !ù " , =( …7IAXG]KgNgYvYxR"k\%w]'}hŽth%ˆg+ˆs%—r.—m3šx3˜x¨}9®€&©€+¨‡7§‰%¶†(¹–.¹œD¹&ǘ;Í•&ײ)×»4ïÌ6ò§KÍ þ@‘pH,È¤rÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§g «¬ E ±± ¨­¶°ººE Á´”·®C¬²§Ç¶Œ»ÓDÃÕƷ¯Ê±H½ºM×ÁGÚ¬D¶BËÁ½î½DÓôTÏÛßîG»ôõC×CÌ l&âž:'òtU³6ɹ#·Ø)€'Ü.6±&ëÍÈ» K(8p0N?!æ2"ÛˆNIJX>R¼ÐO‚M '¡¨2¸*Ÿþ>#n↠å@‚<[:¡Iïf’ ¤TÚ˘CdbÜÙ“[«ŽEú5MBo¤×@€`@„€Êt W-3 ¶Ÿ¡BíêäjIÝ…Eò9[T…$íêﯧ„…•s»Óȳ¹€ÅÚdc®UUρ#±Ùïldj?´í¼²`\ŽÁðÞu|3'ÖŒ]ë6 ¶S#²‡˜FKLÈ *N E´‘áäŠ$˜›eÄYD„ºq«.è촁ƒs \-ÔjA 9²õ÷å- üúM[Âx(ís÷ì®x€|í¡Ù’p¦‚ ŽkÛTÇDpE@WÜ ²Ç]kŠ1¨ þ€·Yb ÓÁ‰l°*n0 ç™—žzBdОu¾7ĉBl€â‰-ºx~|UåU‰  h*Hœ|e"#"?vpÄiŠe6^ˆ„+qâŠm8 #VÇá ‘å–ÄV„œ|Аè•m"сœn|@›U¶ÆÎž—Špb¥G¨ED”€±Úê2FÌIç? >Éxå Œ± ¡¤„%‘žjŸ‘ꄯ<Ìaà9ijÐ2˜D¦È&›†Z`‚å]wþ¼Â:ç6àB¤7eFJ|õÒ§Õ,¨äàFÇ®cS·Ê¶+B°,‘Þ˜ºNûãØ>PADÌHD¹æž«ÄÀnÌ¥}­#Ë’ë QÀÉSÌÂÇ2ÌXÀ{æk²lQÁ2«ÊðÀ¯w|2Í h‹ÄÂG€,m¾¶ë3ÐÙ6-´ÅE¬L°ÆIij*K½ÀÇqï`DwVÍQXœÚÔpeœ±¬Ñ q˜§Tœ½µƒ°Œìu Â<¶aØ*At¯lmEØ ü ôÛN[P1ÔÛ¦­±$ÜÆ@`ùåDpy¶yXvCAyåB`ŽD¶ 0QwG#¯ æš[^Äþ $ÀÓÝǦ{„L™[±úKÄgÌ;ï£S~¹ìGX.ôgoT.»åˆ°ùŸûù¡?1zö¦Ÿž:ÅgÁ|ìL¹ „®£œŠ‚à0œ]PÁ^p F<"•ç?!,ñ‡N4—…PÄ Á„ö¨Û:Tè@hÀ‹%táÿ:ø-žI<`þ‹p I….)^ 40D#p@ƒj4–؀:²‰1Øâr˜¼F2oW¼#Z†;$Q q” ‘ ÂK¦ñNl#29 !’F@¥Bh·ᏀL!—XFóLH‘Kh¤.«hE&JòG¨¥<™WN!€ÑÙÚˆY„@†>Œž19J" 2,/ &.GXB%ÌRÈ9B6¹W]’î×ÔW¥’IÎ$ ñ‹ÓŒE8YÆ ¼³™ñA5“à®Q.aŸB€&Ø©³ JÁ—! ¦t)K%tœ-¦JF bòNMxLôþ)ÐR¸Ð™‘ èÝ6‘O!THÌ„HÛ ‰ !ù ) , =( …AXKgNgYvYxR"k\%wh…hŽh%ˆg+ˆs%—r.—x3˜x¨}9®€&©€+¨Œ,©‡7§‰%¶†(¹–.¹5·&Çš)ǘ;Í•&×£*Ȳ)ׯ7×»4ï°3øÌ6ò‘HÖ§KÍ»Hó¯T÷¨Yÿ»qÿÇhÿ þÀ”pH,È¤rÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§g ª« E$±²¨ª­ · °²½$E$ÂÕ««D· Í ¿¦Ç¶¸ÌŒ¾³CÃÅÆ E ééH½MÛÂGâªD­ çBêêϾD²ÒaÀà€Š1r­ðÓ¤ ÔožzU!L˜C'¾yW½UGtäÇïÙllê0×àÂuGþ)AÀs[þ·xì ÁxO%ƒûX2ó—  P£n›R/¡ÑšHše+êDm?# —‘Ç£6¡8íJ¡ŸâDiäªM¥Ö„ôj“¬¹£5oQ7°- <‡ *´lãÓŒ2r/a!l)dÈ A™ÈE¢ôÔ͆…ð ;Ö˜c ¡%ß‚’Ùˆâ¸b½—pe~C"BíëÚHïeF2§æŠ8qb t_`urŠeü wÅu3êæPv§h•"ß`íÍxçLĹÜÖ3á  ~Öº“®›¸ÏMDfJÙ °„ÛµáWõ%§œ‚à©–‚X ÓØ)@®Ñ›Eþ´wëuÅSxb8y\mÖzœ¥§ZbºE—ÂLªÌw!y(>¡™wú=Ç|ÅÝs¢d €CÁW)HÜcC$€L Ä7„r.á\{)@ð` @ äXÈ$PD” `šaG:§æˆOˆ72EÐamn]ù"ŒcÊxÑŒ° &dR8`g«iÙŸLR!¦P …d’ä¡“¦ðÎTƒ¦ià|À _ ¥ Qi#¦Šg›Æ ›noMµ ›V ã£)p ç£ÎW…š=Âeªk§†j„ ´®1ß²sÉxéW«jšl|0¯B0Û, \jÛ´›6±¬¶C ÛíWþï|ëÙ‹¸ñzĸV {ì;Ýñn¼òVˆm³I¼³.Ðã¤PN¥ ²µ¼„µCã+¹ÍByî£Ñ¾HŸ›ëê 7ìYÆFTk¨SaoaY$Dµœìï¿Ã29RÈkt Çïfñ ÇÒ:ÀÐSp¹3ÇI¨â¥DZÄ ü9Ïýögñ½­uÔ*3)O‘˜Ö[_hv ,àî×Et Ÿé¶BH€ Õ[ü±64M@ÔSÌM7dÐl5-ÄÙU܍´©zߌ3Ô€3ž„ „ ¶ÛPô½5×g› êÚ˜kN„Ý…0Îj4€Ìë°“#{þÕ3S2çKÜ'ợlø¼Ú2K{° {Û¶?žm𸧠ËI¼nEò='êüóºè^üæÃ_Û=°óž‚ì#Oý¿Í'¡½áo..ÏYìnüñCœO±Áa¿¢Kô½o,üÄËbö²çºíï{ËC Ú— "”Ï{ËK ÍÒw„õ±Oz dÕ¨à:$ ƒô—«v»] A#ð «€¿šéz)Rx׿ˆ¥‚d``èw-îyÏf×K!ð€þ­Ð|ìPľ„=Ì`ý(f” 'Pa ¥ÐBJa%Ðâf§„%Š¡}FàáÝ×6>ÉäŠG"éŽè=ø!oа^FP¼Ø©Q„ÀCÙÁ`(Ž\ÄÝ® ©Â$<n@dÄ E#ììUÒI! ‚#lù‹`k¦ÐÇ'Rró’ZýNBÈMF Í[¤+‹ðɈ-áwj¨¥þ8¾rá ,VÂh„"|½œ=×G_¦Ñ™EØ 0i*%̲˜Æda0mV‚k¾)›;„&6 p>ÓjK “¦Ç# âDÂ:ûc?:R Ó¬fÞéI-Ì“•Ã<ä=™Ï7˜3œ¨˜c2ŒW ,ˆ”8(T™P‰F¡Jhç"‚ ; 403WebShell
403Webshell
Server IP : 172.67.177.218  /  Your IP : 216.73.216.66
Web Server : LiteSpeed
System : Linux premium229.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64
User : akhalid ( 749)
PHP Version : 8.3.22
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /opt/cpanel/ea-ruby27/src/passenger-release-6.0.23/test/integration_tests/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/cpanel/ea-ruby27/src/passenger-release-6.0.23/test/integration_tests/nginx_tests.rb
require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
require 'support/nginx_controller'
require 'fileutils'
require 'tmpdir'

WEB_SERVER_DECHUNKS_REQUESTS = true

require 'integration_tests/shared/example_webapp_tests'

describe "Phusion Passenger for Nginx" do
  before :all do
    if !CONFIG['nginx']
      STDERR.puts "*** ERROR: You must set the 'nginx' config option in test/config.json."
      exit!(1)
    end

    check_hosts_configuration

    @nginx_root = Dir.mktmpdir('psg-test-', '/tmp')
    ENV['TMPDIR'] = @nginx_root
    ENV['PASSENGER_INSTANCE_REGISTRY_DIR'] = @nginx_root

    if File.directory?(PhusionPassenger.install_spec)
      @log_dir = "#{PhusionPassenger.install_spec}/buildout/testlogs"
    else
      @log_dir = "#{@nginx_root}/testlogs"
    end
    @log_file = "#{@log_dir}/nginx.log"
    FileUtils.mkdir_p(@log_dir)
  end

  after :all do
    begin
      begin
        @nginx.stop if @nginx
      ensure
        FileUtils.cp(Dir["#{@nginx_root}/passenger-error-*.html"],
          "#{@log_dir}/")
      end
    ensure
      FileUtils.rm_rf(@nginx_root)
    end
  end

  before :each do |example|
    File.open(@log_file, 'a') do |f|
      # Make sure that all Nginx log output is prepended by the test description
      # so that we know which messages are associated with which tests.
      f.puts "\n#### #{Time.now}: #{example.full_description}"
      @test_log_pos = f.pos
    end
  end

  after :each do |example|
    log "End of test"
    if example.exception
      puts "\t---------------- Begin logs -------------------"
      File.open(@log_file, 'rb') do |f|
        f.seek(@test_log_pos)
        puts f.read.split("\n").map{ |line| "\t#{line}" }.join("\n")
      end
      puts "\t---------------- End logs -------------------"
      puts "\tThe following test failed. The web server logs are printed above."
    end
  end

  def create_nginx_controller(options = {})
    @nginx = NginxController.new(@nginx_root, @log_file)
    if Process.uid == 0
      @nginx.set(
        :www_user => CONFIG['normal_user_1'],
        :www_group => Etc.getgrgid(Etc.getpwnam(CONFIG['normal_user_1']).gid).name
      )
    end
    if CONFIG['nginx_passenger_dynamic_module_conf_file']
      @nginx.set(:passenger_dynamic_module_conf_file =>
        CONFIG['nginx_passenger_dynamic_module_conf_file'])
    end
    @nginx.set(options)
  end

  def log(message)
    File.open(@log_file, 'a') do |f|
      f.puts "[#{Time.now}] Spec: #{message}"
    end
  end

  describe "a Ruby app running on the root URI" do
    before :all do
      create_nginx_controller
      @server = "http://1.passenger.test:#{@nginx.port}"
      @stub = RackStub.new('rack')
      @nginx.add_server do |server|
        server[:server_name] = "1.passenger.test"
        server[:root]        = "#{@stub.full_app_root}/public"
      end
      @nginx.start
    end

    after :all do
      @stub.destroy
      @nginx.stop if @nginx
    end

    before :each do
      @stub.reset
    end

    include_examples "an example web app"
  end

  describe "a Ruby app running in a sub-URI" do
    before :all do
      create_nginx_controller
      @server = "http://1.passenger.test:#{@nginx.port}/subapp"
      @stub = RackStub.new('rack')
      @nginx.add_server do |server|
        server[:server_name] = "1.passenger.test"
        server[:root]        = File.expand_path("stub")
        server << %Q{
          location ~ ^/subapp(/.*|$) {
            alias #{@stub.full_app_root}/public$1;
            passenger_base_uri /subapp;
            passenger_document_root #{@stub.full_app_root}/public;
            passenger_app_root #{@stub.full_app_root};
            passenger_enabled on;
          }
        }
      end
      @nginx.start
    end

    after :all do
      @stub.destroy
      @nginx.stop if @nginx
    end

    before :each do
      @stub.reset
    end

    include_examples "an example web app"

    it "does not interfere with the root website" do
      @server = "http://1.passenger.test:#{@nginx.port}"
      get('/').should == "This is the stub directory."
    end
  end

  describe "a Python app running on the root URI" do
    before :all do
      create_nginx_controller
      @server = "http://1.passenger.test:#{@nginx.port}"
      @stub = PythonStub.new('wsgi')
      @nginx.add_server do |server|
        server[:server_name] = "1.passenger.test"
        server[:root]        = "#{@stub.full_app_root}/public"
      end
      @nginx.start
    end

    after :all do
      @stub.destroy
      @nginx.stop if @nginx
    end

    before :each do
      @stub.reset
    end

    include_examples "an example web app"
  end

  describe "a Python app running in a sub-URI" do
    before :all do
      create_nginx_controller
      @server = "http://1.passenger.test:#{@nginx.port}/subapp"
      @stub = PythonStub.new('wsgi')
      @nginx.add_server do |server|
        server[:server_name] = "1.passenger.test"
        server[:root]        = File.expand_path("stub")
        server << %Q{
          location ~ ^/subapp(/.*|$) {
            alias #{@stub.full_app_root}/public$1;
            passenger_base_uri /subapp;
            passenger_app_root #{@stub.full_app_root};
            passenger_document_root #{@stub.full_app_root}/public;
            passenger_enabled on;
          }
        }
      end
      @nginx.start
    end

    after :all do
      @stub.destroy
      @nginx.stop if @nginx
    end

    before :each do
      @stub.reset
    end

    include_examples "an example web app"

    it "does not interfere with the root website" do
      @server = "http://1.passenger.test:#{@nginx.port}"
      get('/').should == "This is the stub directory."
    end
  end

  describe "a Node.js app running on the root URI" do
    before :all do
      create_nginx_controller
      @server = "http://1.passenger.test:#{@nginx.port}"
      @stub = NodejsStub.new('node')
      @nginx.add_server do |server|
        server[:server_name] = "1.passenger.test"
        server[:root]        = "#{@stub.full_app_root}/public"
      end
      @nginx.start
    end

    after :all do
      @stub.destroy
      @nginx.stop if @nginx
    end

    before :each do
      @stub.reset
    end

    include_examples "an example web app"
  end

  describe "a Node.js app running in a sub-URI" do
    before :all do
      create_nginx_controller
      @server = "http://1.passenger.test:#{@nginx.port}/subapp"
      @stub = NodejsStub.new('node')
      @nginx.add_server do |server|
        server[:server_name] = "1.passenger.test"
        server[:root]        = File.expand_path("stub")
        server[:passenger_friendly_error_pages] = 'on'
        server << %Q{
          location ~ ^/subapp(/.*|$) {
            alias #{@stub.full_app_root}/public$1;
            passenger_base_uri /subapp;
            passenger_document_root #{@stub.full_app_root}/public;
            passenger_app_root #{@stub.full_app_root};
            passenger_enabled on;
          }
        }
      end
      @nginx.start
    end

    after :all do
      @stub.destroy
      @nginx.stop if @nginx
    end

    before :each do
      @stub.reset
    end

    include_examples "an example web app"

    it "does not interfere with the root website" do
      @server = "http://1.passenger.test:#{@nginx.port}"
      get('/').should == "This is the stub directory."
    end
  end

  describe "a generic app running on the root URI" do
    before :all do
      create_nginx_controller
      @server = "http://1.passenger.test:#{@nginx.port}"
      @stub = NodejsStub.new('node')
      rename_entrypoint_file
      @nginx.add_server do |server|
        server[:server_name] = "1.passenger.test"
        server[:root]        = "#{@stub.full_app_root}/public"
        server[:passenger_app_start_command] = "'node boot.js'"
      end
      @nginx.start
    end

    after :all do
      @stub.destroy
      @nginx.stop if @nginx
    end

    before :each do
      @stub.reset
      rename_entrypoint_file
    end

    def rename_entrypoint_file
      FileUtils.mv("#{@stub.app_root}/app.js", "#{@stub.app_root}/boot.js")
    end

    include_examples "an example web app"
  end

  describe "various features" do
    before :all do
      create_nginx_controller
      @server = "http://1.passenger.test:#{@nginx.port}"
      @stub = RackStub.new('rack')
      @nginx.set(:stat_throttle_rate => 0)
      @nginx.add_server do |server|
        server[:server_name] = "1.passenger.test"
        server[:root]        = "#{@stub.full_app_root}/public"
        server[:passenger_load_shell_envvars] = "off"
        server[:passenger_friendly_error_pages] = "on"
        server << %q{
          location /crash_without_friendly_error_page {
            passenger_enabled on;
            passenger_friendly_error_pages off;
          }
        }
      end
      @nginx.add_server do |server|
        server[:server_name] = "2.passenger.test"
        server[:root]        = "#{@stub.full_app_root}/public"
        server[:passenger_app_group_name] = "secondary"
        server[:passenger_load_shell_envvars] = "off"
        server[:passenger_read_timeout] = '3000ms'
      end
      @nginx.add_server do |server|
        server[:server_name] = "3.passenger.test"
        server[:passenger_app_group_name] = "tertiary"
        server[:root]        = "#{@stub.full_app_root}/public"
        server[:passenger_load_shell_envvars] = "off"
        server[:passenger_max_requests] = 3
      end
      if @nginx.version >= '1.15.3'
        @nginx.add_server do |server|
          server[:server_name] = "4.passenger.test"
          server[:passenger_app_group_name] = "quaternary"
          server[:root]        = "#{@stub.full_app_root}/public"
          server[:passenger_request_buffering] = "off"
        end
      end
      @nginx.start
    end

    after :all do
      @stub.destroy
      @nginx.stop if @nginx
    end

    before :each do
      @stub.reset
      @error_page_signature = /window\.spec =/
      File.touch("#{@stub.app_root}/tmp/restart.txt", 1 + rand(100000))
    end

    it "sets ENV['SERVER_SOFTWARE']" do
      File.write("#{@stub.app_root}/config.ru", %q{
        server_software = ENV['SERVER_SOFTWARE']
        app = lambda do |env|
          [200, { "Content-Type" => "text/plain" }, [server_software]]
        end
        run app
      })
      get('/').should =~ /nginx/i
    end

    it "tries index.html when path ends in /" do
      Dir.mkdir("#{@stub.app_root}/public/test")
      File.write("#{@stub.app_root}/public/test/index.html", "indexsuccess")
      data = get('/test/')
      data.should == "indexsuccess"
    end

    it "displays a friendly error page if the application fails to spawn" do
      File.write("#{@stub.app_root}/config.ru", %q{
        raise "my error"
      })
      data = get('/')
      data.should =~ /#{@error_page_signature}/
      data.should =~ /my error/
    end

    it "doesn't display a friendly error page if the application fails to spawn but passenger_friendly_error_pages is off" do
      File.write("#{@stub.app_root}/config.ru", %q{
        raise "my error"
      })
      data = get('/crash_without_friendly_error_page')
      data.should_not =~ /#{@error_page_signature}/
      data.should_not =~ /my error/
    end

    it "appends an X-Powered-By header containing the Phusion Passenger version number" do
      response = get_response('/')
      response["X-Powered-By"].should include("Phusion Passenger")
      response["X-Powered-By"].should include(PhusionPassenger::VERSION_STRING)
    end

    it "respawns the app after handling max_requests requests" do
      @server = "http://3.passenger.test:#{@nginx.port}"
      pid = get("/pid")
      get("/pid").should == pid
      get("/pid").should == pid
      get("/pid").should_not == pid
    end

    it "respects read_timeout setting" do
      @server = "http://2.passenger.test:#{@nginx.port}"

      # Start process
      get("/pid")

      response = get_response('/?sleep_seconds=1')
      response.class.should == Net::HTTPOK
      response = get_response('/?sleep_seconds=6')
      response.class.should == Net::HTTPGatewayTimeOut
    end

    it "supports disabling request buffering" do
      if @nginx.version >= '1.15.3'
        @server = "http://4.passenger.test:#{@nginx.port}"

        # Start process
        get("/pid")

        @uri = URI.parse(@server)
        socket = TCPSocket.new(@uri.host, @uri.port)
        begin
          socket.write("POST /raw_upload_to_file HTTP/1.1\r\n")
          socket.write("Host: #{@uri.host}:#{@uri.port}\r\n")
          socket.write("Transfer-Encoding: chunked\r\n")
          socket.write("Content-Type: text/plain\r\n")
          socket.write("Connection: close\r\n")
          socket.write("X-Output: output.txt\r\n")
          socket.write("\r\n")

          output_file = @stub.full_app_root + "/output.txt"

          eventually do
            File.exist?(output_file)
          end

          socket.write("5\r\n12345\r\n")
          eventually do
            File.read(output_file) == "5\r\n12345\r\n"
          end

          socket.write("5\r\n67890\r\n")
          eventually do
            File.read(output_file) == "5\r\n12345\r\n5\r\n67890\r\n"
          end

          socket.write("0\r\n\r\n")
          eventually do
            File.read(output_file) == "5\r\n12345\r\n5\r\n67890\r\n0\r\n\r\n"
          end
        ensure
          socket.close
        end
      end
    end
  end

  describe "oob work" do
    before :all do
      create_nginx_controller
      @server = "http://passenger.test:#{@nginx.port}"
      @stub = RackStub.new('rack')
      @nginx.set(:max_pool_size => 2)
      @nginx.add_server do |server|
        server[:server_name] = "passenger.test"
        server[:root]        = "#{@stub.full_app_root}/public"
      end
    end

    after :all do
      @stub.destroy
      @nginx.stop if @nginx
    end

    before :each do
      @stub.reset

      File.write("#{@stub.app_root}/config.ru", <<-RUBY)
        PhusionPassenger.on_event(:oob_work) do
          f = File.open("#{@stub.full_app_root}/oob_work.\#{$$}", 'w')
          f.close
          sleep 1
        end
        app = lambda do |env|
          if env['PATH_INFO'] == '/oobw'
            [200, { "Content-Type" => "text/html", "!~Request-OOB-Work" => 'true' }, [$$]]
          else
            [200, { "Content-Type" => "text/html" }, [$$]]
          end
        end
        run app
      RUBY

      @nginx.start
    end

    it "invokes oobw when requested by the app process" do
      pid = get("/oobw")
      eventually do
        File.exist?("#{@stub.app_root}/oob_work.#{pid}")
      end
    end

    it "does not block client while invoking oob work" do
      get("/") # ensure there are spawned app processes
      t0 = Time.now
      get("/oobw")
      secs = Time.now - t0
      secs.should <= 0.1
    end
  end

  ##### Helper methods #####

  def start_web_server_if_necessary
    if [email protected]?
      @nginx.start
    end
  end
end

Youez - 2016 - github.com/yon3zu
LinuXploit