# coding: utf-8 require 'spec_helper' require 'uri' require 'httpclient/cookie' describe 'Cookies' do before :each do @c = WebAgent::Cookie.new() end it { expect(@c).to be_an_instance_of WebAgent::Cookie } it '#discard' do expect(!!@c.discard?).to be_falsey @c.discard = true expect(!!@c.discard?).to be_truthy end it '#match?' do url = urify('http://www.rubycolor.org/hoge/funi/#919191') @c.domain = 'www.rubycolor.org' expect(@c.match?(url)).to be_truthy @c.domain = '.rubycolor.org' expect(@c.match?(url)).to be_truthy @c.domain = 'aaa.www.rubycolor.org' expect(@c.match?(url)).to be_falsey @c.domain = 'aaa.www.rubycolor.org' expect(@c.match?(url)).to be_falsey @c.domain = 'www.rubycolor.org' @c.path = '/' expect(@c.match?(url)).to be_truthy @c.domain = 'www.rubycolor.org' @c.path = '/hoge' expect(@c.match?(url)).to be_truthy @c.domain = 'www.rubycolor.org' @c.path = '/hoge/hoge' expect(@c.match?(url)).to be_falsey @c.domain = 'www.rubycolor.org' @c.path = '/hoge' @c.secure = true expect(@c.match?(url)).to be_falsey url2 = urify('https://www.rubycolor.org/hoge/funi/#919191') @c.domain = 'www.rubycolor.org' @c.path = '/hoge' @c.secure = true expect(@c.match?(url2)).to be_truthy @c.domain = 'www.rubycolor.org' @c.path = '/hoge' @c.secure = nil expect(@c.match?(url2)).to be_truthy url.port = 80 @c.domain = 'www.rubycolor.org' @c.path = '/hoge' expect(@c.match?(url)).to be_truthy url_nopath = URI.parse('http://www.rubycolor.org') @c.domain = 'www.rubycolor.org' @c.path = '/' expect(@c.match?(url_nopath)).to be_truthy end it '#head_match?' do expect(@c.head_match?("","")).to be_truthy expect(@c.head_match?("a","")).to be_falsey expect(@c.head_match?("","a")).to be_truthy expect(@c.head_match?("abcde","abcde")).to be_truthy expect(@c.head_match?("abcde","abcdef")).to be_truthy expect(@c.head_match?("abcdef","abcde")).to be_falsey expect(@c.head_match?("abcde","bcde")).to be_falsey expect(@c.head_match?("bcde","abcde")).to be_falsey end it 'tail_match?' do expect(@c.tail_match?("","")).to be_truthy expect(@c.tail_match?("a","")).to be_falsey expect(@c.tail_match?("","a")).to be_truthy expect(@c.tail_match?("abcde","abcde")).to be_truthy expect(@c.tail_match?("abcde","abcdef")).to be_falsey expect(@c.tail_match?("abcdef","abcde")).to be_falsey expect(@c.tail_match?("abcde","bcde")).to be_falsey expect(@c.tail_match?("bcde","abcde")).to be_truthy end it 'domain_match' do extend WebAgent::CookieUtils expect(!!domain_match("hoge.co.jp",".")).to be_truthy expect(!!domain_match("192.168.10.1","192.168.10.1")).to be_truthy expect(!!domain_match("192.168.10.1","192.168.10.2")).to be_falsey expect(!!domain_match("hoge.co.jp",".hoge.co.jp")).to be_truthy expect(!!domain_match("www.hoge.co.jp", "www.hoge.co.jp")).to be_truthy expect(!!domain_match("www.hoge.co.jp", "www2.hoge.co.jp")).to be_falsey expect(!!domain_match("www.hoge.co.jp", ".hoge.co.jp")).to be_truthy expect(!!domain_match("www.aa.hoge.co.jp", ".hoge.co.jp")).to be_truthy expect(!!domain_match("www.hoge.co.jp", "hoge.co.jp")).to be_falsey end it 'join_quotedstr' do arr1 = ['hoge=funi', 'hoge2=funi2'] expect(arr1).to eq @c.instance_eval{join_quotedstr(arr1,';')} arr2 = ['hoge="fu', 'ni"', 'funi=funi'] expect(['hoge="fu;ni"','funi=funi']).to eq @c.instance_eval{join_quotedstr(arr2,';')} arr3 = ['hoge="funi";hoge2="fu','ni2";hoge3="hoge"', 'funi="funi"'] expect(['hoge="funi";hoge2="fu,ni2";hoge3="hoge"', 'funi="funi"']).to eq @c.instance_eval{join_quotedstr(arr3,',')} end end describe 'CookieManager' do before :each do @cm = WebAgent::CookieManager.new() end it 'parse' do str = "inkid=n92b0ADOgACIgUb9lsjHqAAAHu2a; expires=Wed, 01-Dec-2010 00:00:00 GMT; path=/" @cm.parse(str, urify('http://www.test.jp')) cookie = @cm.cookies[0] expect(cookie).to be_an_instance_of WebAgent::Cookie expect(cookie.name).to eq "inkid" expect(cookie.value).to eq "n92b0ADOgACIgUb9lsjHqAAAHu2a" expect(cookie.expires).to eq Time.gm(2010, 12, 1, 0,0,0) expect(cookie.path).to eq "/" end it 'parse2' do str = "xmen=off,0,0,1; path=/; domain=.excite.co.jp; expires=Wednesday, 31-Dec-2037 12:00:00 GMT" @cm.parse(str, urify('http://www.excite.co.jp')) cookie = @cm.cookies[0] expect(cookie).to be_an_instance_of WebAgent::Cookie expect(cookie.name).to eq "xmen" expect(cookie.value).to eq "off,0,0,1" expect(cookie.domain).to eq ".excite.co.jp" expect(cookie.expires).to eq Time.gm(2037,12,31,12,0,0) expect(cookie.path).to eq "/" expect(cookie.secure?).to be_falsey expect(cookie.http_only?).to be_falsey end it 'parse3' do str = "xmen=off,0,0,1; path=/; domain=.excite.co.jp; expires=Wednesday, 31-Dec-2037 12:00:00 GMT;Secure;HTTPOnly" @cm.parse(str, urify('http://www.excite.co.jp')) cookie = @cm.cookies[0] expect(cookie).to be_an_instance_of WebAgent::Cookie expect(cookie.name).to eq "xmen" expect(cookie.value).to eq "off,0,0,1" expect(cookie.domain).to eq ".excite.co.jp" expect(cookie.expires).to eq Time.gm(2037,12,31,12,0,0) expect(cookie.path).to eq "/" expect(cookie.secure?).to be_truthy expect(cookie.http_only?).to be_truthy end it 'parse_double_semicolon' do str = "xmen=off,0,0,1;; path=\"/;;\"; domain=.excite.co.jp; expires=Wednesday, 31-Dec-2037 12:00:00 GMT" @cm.parse(str, urify('http://www.excite.co.jp')) cookie = @cm.cookies[0] expect(cookie).to be_an_instance_of WebAgent::Cookie expect(cookie.name).to eq "xmen" expect(cookie.value).to eq "off,0,0,1" expect(cookie.domain).to eq ".excite.co.jp" expect(cookie.expires).to eq Time.gm(2037,12,31,12,0,0) expect(cookie.path).to eq "/;;" end it 'check_expired_cookies' do c1 = WebAgent::Cookie.new() c2 = c1.dup c3 = c1.dup c4 = c1.dup c1.expires = Time.now - 100 c2.expires = Time.now + 100 c3.expires = Time.now - 10 c4.expires = nil cookies = [c1,c2,c3,c4] @cm.cookies = cookies @cm.check_expired_cookies() # expires == nil cookies (session cookie) exists. expect(@cm.cookies).to eq [c2,c4] end it 'parse_expires' do str = "inkid=n92b0ADOgACIgUb9lsjHqAAAHu2a; expires=; path=/" @cm.parse(str, urify('http://www.test.jp')) cookie = @cm.cookies[0] expect(cookie).to be_an_instance_of WebAgent::Cookie expect(cookie.name).to eq "inkid" expect(cookie.value).to eq "n92b0ADOgACIgUb9lsjHqAAAHu2a" expect(cookie.expires).to be_nil expect(cookie.path).to eq "/" str = "inkid=n92b0ADOgACIgUb9lsjHqAAAHu2a; path=/; expires=" @cm.parse(str, urify('http://www.test.jp')) cookie = @cm.cookies[0] expect(cookie).to be_an_instance_of WebAgent::Cookie expect(cookie.name).to eq "inkid" expect(cookie.value).to eq "n92b0ADOgACIgUb9lsjHqAAAHu2a" expect(cookie.expires).to be_nil expect(cookie.path).to eq "/" str = "inkid=n92b0ADOgACIgUb9lsjHqAAAHu2a; path=/; expires=\"\"" @cm.parse(str, urify('http://www.test.jp')) cookie = @cm.cookies[0] expect(cookie).to be_an_instance_of WebAgent::Cookie expect(cookie.name).to eq "inkid" expect(cookie.value).to eq "n92b0ADOgACIgUb9lsjHqAAAHu2a" expect(cookie.expires).to be_nil expect(cookie.path).to eq "/" end it 'parse_after_expiration' do str = "inkid=n92b0ADOgACIgUb9lsjHqAAAHu2a; expires=Wed, 01-Dec-2010 00:00:00 GMT; path=/" @cm.parse(str, urify('http://www.test.jp')) cookie = @cm.cookies[0] expect(cookie).to be_an_instance_of WebAgent::Cookie expect(cookie.name).to eq "inkid" expect(cookie.value).to eq "n92b0ADOgACIgUb9lsjHqAAAHu2a" expect(cookie.expires).to eq Time.gm(2010, 12, 1, 0,0,0) expect(cookie.path).to eq "/" time = Time.now.utc.round + 60 expires = time.strftime("%a, %d-%b-%Y %H:%M:%S GMT") str = "inkid=n92b0ADOgACIgUb9lsjHqAAAHu2a; expires=#{expires}; path=/" @cm.parse(str, urify('http://www.test.jp')) cookie = @cm.cookies[0] expect(cookie).to be_an_instance_of WebAgent::Cookie expect(cookie.name).to eq "inkid" expect(cookie.value).to eq "n92b0ADOgACIgUb9lsjHqAAAHu2a" expect(cookie.expires).to eq time expect(cookie.path).to eq "/" end it 'find_cookie' do str = "xmen=off,0,0,1; path=/; domain=.excite2.co.jp; expires=Wednesday, 31-Dec-2037 12:00:00 GMT" @cm.parse(str, urify("http://www.excite2.co.jp/")) str = "xmen=off,0,0,2; path=/; domain=.excite.co.jp; expires=Wednesday, 31-Dec-2037 12:00:00 GMT" @cm.parse(str, urify("http://www.excite.co.jp/")) @cm.cookies[0].use = true @cm.cookies[1].use = true url = urify('http://www.excite.co.jp/hoge/funi/') cookie_str = @cm.find(url) expect(cookie_str).to eq "xmen=off,0,0,2" end it 'load_cookies' do begin File.open("tmp_test.tmp","w") {|f| f.write < same as URL c.url = urify("http://www.inac.co.jp/hoge/hoge2/hoge3") @cm.add(c) # c1, c2 = @cm.cookies expect(c1.path).to eq '' expect(c2.path).to eq '/hoge/hoge2' end it 'test_check_cookie_accept_domain' do @cm.accept_domains = [".example1.co.jp", "www1.example.jp"] @cm.reject_domains = [".example2.co.jp", "www2.example.jp"] check1 = @cm.check_cookie_accept_domain("www.example1.co.jp") expect(check1).to be_truthy check2 = @cm.check_cookie_accept_domain("www.example2.co.jp") expect(check2).to be_falsey check3 = @cm.check_cookie_accept_domain("www1.example.jp") expect(check3).to be_truthy check4 = @cm.check_cookie_accept_domain("www2.example.jp") expect(check4).to be_falsey check5 = @cm.check_cookie_accept_domain("aa.www2.example.jp") expect(check5).to be_truthy check6 = @cm.check_cookie_accept_domain("aa.www2.example.jp") expect(check6).to be_truthy expect(@cm.check_cookie_accept_domain(nil)).to be_falsey end end