mirror of
https://github.com/httpie/cli.git
synced 2025-06-26 12:31:47 +02:00
Improved session tests.
This commit is contained in:
parent
3c2de34285
commit
1d987c5b4d
@ -4,95 +4,121 @@ import shutil
|
|||||||
from tests import TestEnvironment, mk_config_dir, http, httpbin, HTTP_OK
|
from tests import TestEnvironment, mk_config_dir, http, httpbin, HTTP_OK
|
||||||
|
|
||||||
|
|
||||||
class TestSessions:
|
class BaseSessionTest(object):
|
||||||
|
|
||||||
@property
|
|
||||||
def env(self):
|
|
||||||
return TestEnvironment(config_dir=self.config_dir)
|
|
||||||
|
|
||||||
def setup_method(self, method):
|
def setup_method(self, method):
|
||||||
# Start a full-blown session with a custom request header,
|
"""Create and a unique config dir for each test."""
|
||||||
# authorization, and response cookies.
|
|
||||||
self.config_dir = mk_config_dir()
|
self.config_dir = mk_config_dir()
|
||||||
r = http('--follow', '--session=test', '--auth=username:password',
|
|
||||||
'GET', httpbin('/cookies/set?hello=world'), 'Hello:World',
|
|
||||||
env=self.env)
|
|
||||||
assert HTTP_OK in r
|
|
||||||
|
|
||||||
def teardown_method(self, method):
|
def teardown_method(self, method):
|
||||||
shutil.rmtree(self.config_dir)
|
shutil.rmtree(self.config_dir)
|
||||||
|
|
||||||
def test_session_create(self):
|
def env(self):
|
||||||
# Verify that the session has been created.
|
"""
|
||||||
r = http('--session=test', 'GET', httpbin('/get'), env=self.env)
|
Return an environment.
|
||||||
assert HTTP_OK in r
|
|
||||||
assert r.json['headers']['Hello'] == 'World'
|
Each environment created withing a test method
|
||||||
assert r.json['headers']['Cookie'] == 'hello=world'
|
will share the same config_dir. It is necessary
|
||||||
assert 'Basic ' in r.json['headers']['Authorization']
|
for session files being reused.
|
||||||
|
|
||||||
|
"""
|
||||||
|
return TestEnvironment(config_dir=self.config_dir)
|
||||||
|
|
||||||
|
|
||||||
|
class TestSessionFlow(BaseSessionTest):
|
||||||
|
"""
|
||||||
|
These tests, start with an existing session create in setup_method().
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
def setup_method(self, method):
|
||||||
|
"""
|
||||||
|
Start a full-blown session with a custom request header,
|
||||||
|
authorization, and response cookies.
|
||||||
|
|
||||||
|
"""
|
||||||
|
super(TestSessionFlow, self).setup_method(method)
|
||||||
|
r1 = http('--follow', '--session=test', '--auth=username:password',
|
||||||
|
'GET', httpbin('/cookies/set?hello=world'), 'Hello:World',
|
||||||
|
env=self.env())
|
||||||
|
assert HTTP_OK in r1
|
||||||
|
|
||||||
|
def test_session_created_and_reused(self):
|
||||||
|
# Verify that the session created in setup_method() has been used.
|
||||||
|
r2 = http('--session=test', 'GET', httpbin('/get'), env=self.env())
|
||||||
|
assert HTTP_OK in r2
|
||||||
|
assert r2.json['headers']['Hello'] == 'World'
|
||||||
|
assert r2.json['headers']['Cookie'] == 'hello=world'
|
||||||
|
assert 'Basic ' in r2.json['headers']['Authorization']
|
||||||
|
|
||||||
|
def test_session_update(self):
|
||||||
|
# Get a response to a request from the original session.
|
||||||
|
r2 = http('--session=test', 'GET', httpbin('/get'), env=self.env())
|
||||||
|
assert HTTP_OK in r2
|
||||||
|
|
||||||
|
# Make a request modifying the session data.
|
||||||
|
r3 = http('--follow', '--session=test', '--auth=username:password2',
|
||||||
|
'GET', httpbin('/cookies/set?hello=world2'), 'Hello:World2',
|
||||||
|
env=self.env())
|
||||||
|
assert HTTP_OK in r3
|
||||||
|
|
||||||
|
# Get a response to a request from the updated session.
|
||||||
|
r4 = http('--session=test', 'GET', httpbin('/get'), env=self.env())
|
||||||
|
assert HTTP_OK in r4
|
||||||
|
assert r4.json['headers']['Hello'] == 'World2'
|
||||||
|
assert r4.json['headers']['Cookie'] == 'hello=world2'
|
||||||
|
assert (r2.json['headers']['Authorization'] !=
|
||||||
|
r4.json['headers']['Authorization'])
|
||||||
|
|
||||||
|
def test_session_read_only(self):
|
||||||
|
# Get a response from the original session.
|
||||||
|
r2 = http('--session=test', 'GET', httpbin('/get'), env=self.env())
|
||||||
|
assert HTTP_OK in r2
|
||||||
|
|
||||||
|
# Make a request modifying the session data but
|
||||||
|
# with --session-read-only.
|
||||||
|
r3 = http('--follow', '--session-read-only=test',
|
||||||
|
'--auth=username:password2', 'GET',
|
||||||
|
httpbin('/cookies/set?hello=world2'), 'Hello:World2',
|
||||||
|
env=self.env())
|
||||||
|
assert HTTP_OK in r3
|
||||||
|
|
||||||
|
# Get a response from the updated session.
|
||||||
|
r4 = http('--session=test', 'GET', httpbin('/get'), env=self.env())
|
||||||
|
assert HTTP_OK in r4
|
||||||
|
|
||||||
|
# Origin can differ on Travis.
|
||||||
|
del r2.json['origin'], r4.json['origin']
|
||||||
|
# Different for each request.
|
||||||
|
del r2.json['headers']['X-Request-Id']
|
||||||
|
del r4.json['headers']['X-Request-Id']
|
||||||
|
|
||||||
|
# Should be the same as before r3.
|
||||||
|
assert r2.json == r4.json
|
||||||
|
|
||||||
|
|
||||||
|
class TestSession(BaseSessionTest):
|
||||||
|
"""Stand-alone session tests."""
|
||||||
|
|
||||||
def test_session_ignored_header_prefixes(self):
|
def test_session_ignored_header_prefixes(self):
|
||||||
r = http('--session=test', 'GET', httpbin('/get'),
|
r1 = http('--session=test', 'GET', httpbin('/get'),
|
||||||
'Content-Type: text/plain',
|
'Content-Type: text/plain',
|
||||||
'If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT',
|
'If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT',
|
||||||
env=self.env)
|
env=self.env())
|
||||||
assert HTTP_OK in r
|
assert HTTP_OK in r1
|
||||||
|
|
||||||
r2 = http('--session=test', 'GET', httpbin('/get'))
|
r2 = http('--session=test', 'GET', httpbin('/get'), env=self.env())
|
||||||
assert HTTP_OK in r2
|
assert HTTP_OK in r2
|
||||||
assert 'Content-Type' not in r2.json['headers']
|
assert 'Content-Type' not in r2.json['headers']
|
||||||
assert 'If-Unmodified-Since' not in r2.json['headers']
|
assert 'If-Unmodified-Since' not in r2.json['headers']
|
||||||
|
|
||||||
def test_session_update(self):
|
|
||||||
# Get a response to a request from the original session.
|
|
||||||
r1 = http('--session=test', 'GET', httpbin('/get'), env=self.env)
|
|
||||||
assert HTTP_OK in r1
|
|
||||||
|
|
||||||
# Make a request modifying the session data.
|
|
||||||
r2 = http('--follow', '--session=test', '--auth=username:password2',
|
|
||||||
'GET', httpbin('/cookies/set?hello=world2'), 'Hello:World2',
|
|
||||||
env=self.env)
|
|
||||||
assert HTTP_OK in r2
|
|
||||||
|
|
||||||
# Get a response to a request from the updated session.
|
|
||||||
r3 = http('--session=test', 'GET', httpbin('/get'), env=self.env)
|
|
||||||
assert HTTP_OK in r3
|
|
||||||
assert r3.json['headers']['Hello'] == 'World2'
|
|
||||||
assert r3.json['headers']['Cookie'] == 'hello=world2'
|
|
||||||
assert (r1.json['headers']['Authorization'] !=
|
|
||||||
r3.json['headers']['Authorization'])
|
|
||||||
|
|
||||||
def test_session_read_only(self):
|
|
||||||
# Get a response from the original session.
|
|
||||||
r1 = http('--session=test', 'GET', httpbin('/get'), env=self.env)
|
|
||||||
assert HTTP_OK in r1
|
|
||||||
|
|
||||||
# Make a request modifying the session data but
|
|
||||||
# with --session-read-only.
|
|
||||||
r2 = http('--follow', '--session-read-only=test',
|
|
||||||
'--auth=username:password2', 'GET',
|
|
||||||
httpbin('/cookies/set?hello=world2'), 'Hello:World2',
|
|
||||||
env=self.env)
|
|
||||||
assert HTTP_OK in r2
|
|
||||||
|
|
||||||
# Get a response from the updated session.
|
|
||||||
r3 = http('--session=test', 'GET', httpbin('/get'), env=self.env)
|
|
||||||
assert HTTP_OK in r3
|
|
||||||
|
|
||||||
# Origin can differ on Travis.
|
|
||||||
del r1.json['origin'], r3.json['origin']
|
|
||||||
# Different for each request.
|
|
||||||
del r1.json['headers']['X-Request-Id'], \
|
|
||||||
r3.json['headers']['X-Request-Id']
|
|
||||||
# Should be the same as before r2.
|
|
||||||
assert r1.json == r3.json
|
|
||||||
|
|
||||||
def test_session_by_path(self):
|
def test_session_by_path(self):
|
||||||
session_path = os.path.join(self.config_dir, 'session-by-path.json')
|
session_path = os.path.join(self.config_dir, 'session-by-path.json')
|
||||||
r1 = http('--session=' + session_path, 'GET', httpbin('/get'),
|
r1 = http('--session=' + session_path, 'GET', httpbin('/get'),
|
||||||
'Foo:Bar', env=self.env)
|
'Foo:Bar', env=self.env())
|
||||||
assert HTTP_OK in r1
|
assert HTTP_OK in r1
|
||||||
|
|
||||||
r2 = http('--session=' + session_path, 'GET', httpbin('/get'),
|
r2 = http('--session=' + session_path, 'GET', httpbin('/get'),
|
||||||
env=self.env)
|
env=self.env())
|
||||||
assert HTTP_OK in r2
|
assert HTTP_OK in r2
|
||||||
assert r2.json['headers']['Foo'] == 'Bar'
|
assert r2.json['headers']['Foo'] == 'Bar'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user