You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.7 KiB
119 lines
3.7 KiB
import pytest |
|
from pappyproxy.session import Session |
|
from pappyproxy.http import Request, Response, ResponseCookie |
|
|
|
@pytest.fixture |
|
def req(): |
|
r = Request() |
|
r.start_line = 'GET / HTTP/1.1' |
|
return r |
|
|
|
@pytest.fixture |
|
def rsp(): |
|
r = Response() |
|
r.start_line = 'HTTP/1.1 200 OK' |
|
return r |
|
|
|
def test_session_basic(req, rsp): |
|
s = Session( |
|
cookie_vals={'session':'foo'}, |
|
header_vals={'auth':'bar'}, |
|
) |
|
|
|
assert 'session' not in req.cookies |
|
assert 'session' not in rsp.cookies |
|
assert 'auth' not in req.headers |
|
assert 'auth' not in rsp.headers |
|
s.apply_req(req) |
|
s.apply_rsp(rsp) |
|
assert req.cookies['session'] == 'foo' |
|
assert rsp.cookies['session'].cookie_str == 'session=foo' |
|
assert req.headers['auth'] == 'bar' |
|
assert 'auth' not in rsp.headers |
|
|
|
def test_session_cookieobj_basic(req, rsp): |
|
s = Session( |
|
cookie_vals={'session':ResponseCookie('session=foo; secure; httponly; path=/')}, |
|
header_vals={'auth':'bar'}, |
|
) |
|
|
|
s.apply_req(req) |
|
s.apply_rsp(rsp) |
|
assert req.cookies['session'] == 'foo' |
|
assert rsp.cookies['session'].key == 'session' |
|
assert rsp.cookies['session'].val == 'foo' |
|
assert rsp.cookies['session'].secure |
|
assert rsp.cookies['session'].http_only |
|
assert rsp.cookies['session'].path == '/' |
|
assert req.headers['auth'] == 'bar' |
|
assert 'auth' not in rsp.headers |
|
|
|
def test_session_save_req(req): |
|
req.headers['BasicAuth'] = 'asdfasdf' |
|
req.headers['Host'] = 'www.myfavoritecolor.foobar' |
|
req.cookies['session'] = 'foobar' |
|
req.cookies['favorite_color'] = 'blue' |
|
|
|
s = Session() |
|
s.save_req(req, ['session'], ['BasicAuth']) |
|
assert s.cookies == ['session'] |
|
assert s.headers == ['BasicAuth'] |
|
assert s.cookie_vals['session'].val == 'foobar' |
|
assert s.header_vals['BasicAuth'] == 'asdfasdf' |
|
assert 'Host' not in s.headers |
|
assert 'favorite_color' not in s.cookies |
|
|
|
def test_session_save_rsp(rsp): |
|
rsp.headers['BasicAuth'] = 'asdfasdf' |
|
rsp.headers['Host'] = 'www.myfavoritecolor.foobar' |
|
rsp.set_cookie(ResponseCookie('session=foobar; secure; path=/')) |
|
rsp.set_cookie(ResponseCookie('favorite_color=blue; secure; path=/')) |
|
|
|
s = Session() |
|
s.save_rsp(rsp, ['session']) |
|
assert s.cookies == ['session'] |
|
assert s.headers == [] |
|
assert s.cookie_vals['session'].key == 'session' |
|
assert s.cookie_vals['session'].val == 'foobar' |
|
assert s.cookie_vals['session'].path == '/' |
|
assert s.cookie_vals['session'].secure |
|
|
|
def test_session_mixed(req, rsp): |
|
s = Session( |
|
cookie_names=['session', 'state'], |
|
cookie_vals={'session':ResponseCookie('session=foo; secure; httponly; path=/')}, |
|
header_vals={'auth':'bar'}, |
|
) |
|
|
|
s.apply_req(req) |
|
s.apply_rsp(rsp) |
|
assert req.cookies['session'] == 'foo' |
|
assert rsp.cookies['session'].key == 'session' |
|
assert rsp.cookies['session'].val == 'foo' |
|
assert rsp.cookies['session'].secure |
|
assert rsp.cookies['session'].http_only |
|
assert rsp.cookies['session'].path == '/' |
|
assert 'auth' not in rsp.headers |
|
|
|
r = Response() |
|
r.start_line = 'HTTP/1.1 200 OK' |
|
r.set_cookie(ResponseCookie('state=bazzers')) |
|
r.set_cookie(ResponseCookie('session=buzzers')) |
|
s.save_rsp(r) |
|
assert s.cookie_vals['session'].val == 'buzzers' |
|
assert s.cookie_vals['state'].val == 'bazzers' |
|
|
|
def test_session_save_all(req, rsp): |
|
s = Session() |
|
rsp.set_cookie(ResponseCookie('state=bazzers')) |
|
rsp.set_cookie(ResponseCookie('session=buzzers')) |
|
s.save_rsp(rsp, save_all=True) |
|
|
|
assert s.cookies == ['state', 'session'] |
|
|
|
assert not 'state' in req.cookies |
|
assert not 'session' in req.cookies |
|
s.apply_req(req) |
|
assert req.cookies['state'] == 'bazzers' |
|
assert req.cookies['session'] == 'buzzers' |
|
|
|
|