1require 'test/unit' 2require 'cgi' 3require 'cgi/session' 4require 'cgi/session/pstore' 5require 'stringio' 6require 'tmpdir' 7 8class CGISessionTest < Test::Unit::TestCase 9 def setup 10 @session_dir = Dir.mktmpdir(%w'session dir') 11 end 12 13 def teardown 14 @environ.each do |key, val| ENV.delete(key) end 15 $stdout = STDOUT 16 FileUtils.rm_rf(@session_dir) 17 end 18 19 def test_cgi_session_filestore 20 @environ = { 21 'REQUEST_METHOD' => 'GET', 22 # 'QUERY_STRING' => 'id=123&id=456&id=&str=%40h+%3D%7E+%2F%5E%24%2F', 23 # 'HTTP_COOKIE' => '_session_id=12345; name1=val1&val2;', 24 'SERVER_SOFTWARE' => 'Apache 2.2.0', 25 'SERVER_PROTOCOL' => 'HTTP/1.1', 26 } 27 value1="value1" 28 value2="\x8F\xBC\x8D]" 29 value2.force_encoding("SJIS") if defined?(::Encoding) 30 ENV.update(@environ) 31 cgi = CGI.new 32 session = CGI::Session.new(cgi,"tmpdir"=>@session_dir) 33 session["key1"]=value1 34 session["key2"]=value2 35 assert_equal(value1,session["key1"]) 36 assert_equal(value2,session["key2"]) 37 session.close 38 $stdout = StringIO.new 39 cgi.out{""} 40 41 @environ = { 42 'REQUEST_METHOD' => 'GET', 43 # 'HTTP_COOKIE' => "_session_id=#{session_id}", 44 'QUERY_STRING' => "_session_id=#{session.session_id}", 45 'SERVER_SOFTWARE' => 'Apache 2.2.0', 46 'SERVER_PROTOCOL' => 'HTTP/1.1', 47 } 48 ENV.update(@environ) 49 cgi = CGI.new 50 session = CGI::Session.new(cgi,"tmpdir"=>@session_dir) 51 $stdout = StringIO.new 52 assert_equal(value1,session["key1"]) 53 assert_equal(value2,session["key2"]) 54 session.close 55 56 end 57 def test_cgi_session_pstore 58 @environ = { 59 'REQUEST_METHOD' => 'GET', 60 # 'QUERY_STRING' => 'id=123&id=456&id=&str=%40h+%3D%7E+%2F%5E%24%2F', 61 # 'HTTP_COOKIE' => '_session_id=12345; name1=val1&val2;', 62 'SERVER_SOFTWARE' => 'Apache 2.2.0', 63 'SERVER_PROTOCOL' => 'HTTP/1.1', 64 } 65 value1="value1" 66 value2="\x8F\xBC\x8D]" 67 value2.force_encoding("SJIS") if defined?(::Encoding) 68 ENV.update(@environ) 69 cgi = CGI.new 70 session = CGI::Session.new(cgi,"tmpdir"=>@session_dir,"database_manager"=>CGI::Session::PStore) 71 session["key1"]=value1 72 session["key2"]=value2 73 assert_equal(value1,session["key1"]) 74 assert_equal(value2,session["key2"]) 75 session.close 76 $stdout = StringIO.new 77 cgi.out{""} 78 79 @environ = { 80 'REQUEST_METHOD' => 'GET', 81 # 'HTTP_COOKIE' => "_session_id=#{session_id}", 82 'QUERY_STRING' => "_session_id=#{session.session_id}", 83 'SERVER_SOFTWARE' => 'Apache 2.2.0', 84 'SERVER_PROTOCOL' => 'HTTP/1.1', 85 } 86 ENV.update(@environ) 87 cgi = CGI.new 88 session = CGI::Session.new(cgi,"tmpdir"=>@session_dir,"database_manager"=>CGI::Session::PStore) 89 $stdout = StringIO.new 90 assert_equal(value1,session["key1"]) 91 assert_equal(value2,session["key2"]) 92 session.close 93 end 94 def test_cgi_session_specify_session_id 95 @environ = { 96 'REQUEST_METHOD' => 'GET', 97 # 'QUERY_STRING' => 'id=123&id=456&id=&str=%40h+%3D%7E+%2F%5E%24%2F', 98 # 'HTTP_COOKIE' => '_session_id=12345; name1=val1&val2;', 99 'SERVER_SOFTWARE' => 'Apache 2.2.0', 100 'SERVER_PROTOCOL' => 'HTTP/1.1', 101 } 102 value1="value1" 103 value2="\x8F\xBC\x8D]" 104 value2.force_encoding("SJIS") if defined?(::Encoding) 105 ENV.update(@environ) 106 cgi = CGI.new 107 session = CGI::Session.new(cgi,"tmpdir"=>@session_dir,"session_id"=>"foo") 108 session["key1"]=value1 109 session["key2"]=value2 110 assert_equal(value1,session["key1"]) 111 assert_equal(value2,session["key2"]) 112 assert_equal("foo",session.session_id) 113 #session_id=session.session_id 114 session.close 115 $stdout = StringIO.new 116 cgi.out{""} 117 118 @environ = { 119 'REQUEST_METHOD' => 'GET', 120 # 'HTTP_COOKIE' => "_session_id=#{session_id}", 121 'QUERY_STRING' => "_session_id=#{session.session_id}", 122 'SERVER_SOFTWARE' => 'Apache 2.2.0', 123 'SERVER_PROTOCOL' => 'HTTP/1.1', 124 } 125 ENV.update(@environ) 126 cgi = CGI.new 127 session = CGI::Session.new(cgi,"tmpdir"=>@session_dir) 128 $stdout = StringIO.new 129 assert_equal(value1,session["key1"]) 130 assert_equal(value2,session["key2"]) 131 assert_equal("foo",session.session_id) 132 session.close 133 end 134 def test_cgi_session_specify_session_key 135 @environ = { 136 'REQUEST_METHOD' => 'GET', 137 # 'QUERY_STRING' => 'id=123&id=456&id=&str=%40h+%3D%7E+%2F%5E%24%2F', 138 # 'HTTP_COOKIE' => '_session_id=12345; name1=val1&val2;', 139 'SERVER_SOFTWARE' => 'Apache 2.2.0', 140 'SERVER_PROTOCOL' => 'HTTP/1.1', 141 } 142 value1="value1" 143 value2="\x8F\xBC\x8D]" 144 value2.force_encoding("SJIS") if defined?(::Encoding) 145 ENV.update(@environ) 146 cgi = CGI.new 147 session = CGI::Session.new(cgi,"tmpdir"=>@session_dir,"session_key"=>"bar") 148 session["key1"]=value1 149 session["key2"]=value2 150 assert_equal(value1,session["key1"]) 151 assert_equal(value2,session["key2"]) 152 session_id=session.session_id 153 session.close 154 $stdout = StringIO.new 155 cgi.out{""} 156 157 @environ = { 158 'REQUEST_METHOD' => 'GET', 159 'HTTP_COOKIE' => "bar=#{session_id}", 160 # 'QUERY_STRING' => "bar=#{session.session_id}", 161 'SERVER_SOFTWARE' => 'Apache 2.2.0', 162 'SERVER_PROTOCOL' => 'HTTP/1.1', 163 } 164 ENV.update(@environ) 165 cgi = CGI.new 166 session = CGI::Session.new(cgi,"tmpdir"=>@session_dir,"session_key"=>"bar") 167 $stdout = StringIO.new 168 assert_equal(value1,session["key1"]) 169 assert_equal(value2,session["key2"]) 170 session.close 171 end 172end 173