Skip to content

Commit

Permalink
tests refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
f0t0n committed Mar 10, 2016
1 parent 5f042b2 commit 36cfd14
Showing 1 changed file with 58 additions and 42 deletions.
100 changes: 58 additions & 42 deletions tests/test_signature.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,65 +6,81 @@


@pytest.fixture(scope='module')
def state():
signature = (
'0947c88ce16d078dde4a2aded1fe4627643a378757dccc3428c19569fea99542'
)
prefix = 'HMAC-SHA256'
access_key = 'my access key'
secret_key = 'my secret key'
message = '1457369891.672671'
full_signature = '{} {}:{}'.format(prefix, access_key, signature)
return dict(message=message,
access_key=access_key,
secret_key=secret_key,
signature=signature,
full_signature=full_signature)


def test_generate_key():
key_settings = {
def _prefix():
return 'HMAC-SHA256'


@pytest.fixture(scope='module')
def _access_key():
return 'my access key'


@pytest.fixture(scope='module')
def _secret_key():
return 'my secret key'


@pytest.fixture(scope='module')
def _message():
return '1457369891.672671'


@pytest.fixture(scope='module')
def _signature():
return '0947c88ce16d078dde4a2aded1fe4627643a378757dccc3428c19569fea99542'


@pytest.fixture(scope='module')
def _full_signature(_prefix, _access_key, _signature):
return '{} {}:{}'.format(_prefix, _access_key, _signature)


@pytest.fixture(scope='module')
def _key_settings():
return {
'key_length': 5,
'key_chars': 'abc123',
}
key = generate_key(**key_settings)
assert (len(key) == key_settings['key_length'],


def test_generate_key(_key_settings):
key = generate_key(**_key_settings)
assert (len(key) == _key_settings['key_length'],
'Key should have defined length')
assert (not set(key) - set(key_settings['key_chars']),
assert (not set(key) - set(_key_settings['key_chars']),
'Key should contain only defined chars')


def test_create_signature(state):
expected_result = state['full_signature']
actual_result = create_signature(state['access_key'], state['secret_key'],
state['message'])
def test_create_signature(_access_key, _secret_key, _message, _full_signature):
expected_result = _full_signature
actual_result = create_signature(_access_key, _secret_key, _message)
assert actual_result == expected_result, 'Should produce correct signature'


def test_parse_signature(state):
access_key, signature = parse_signature(state['full_signature'])
def test_parse_signature(_access_key, _signature, _full_signature):
access_key, signature = parse_signature(_full_signature)
assert (
(access_key, signature) == (state['access_key'], state['signature']),
(access_key, signature) == (_access_key, _signature),
'Should parse access key and signature correctly'
)
with pytest.raises(ValueError) as e:
parse_signature(state['full_signature'], auth_header_prefix='my pref')
parse_signature(_full_signature, auth_header_prefix='WRONG_PREFIX')
assert 'Invalid prefix value in `Authorization` header.' in str(e.value)


def test_verify_signature(state):
valid = (state['access_key'], state['secret_key'], state['message'],
state['full_signature'])
invalid = (
(state['access_key'], state['secret_key'], state['message'] + 'x',
state['full_signature']),
(state['access_key'] + 'x', state['secret_key'],
state['message'], state['full_signature']),
(state['access_key'], state['secret_key'] + 'x',
state['message'], state['full_signature']),
(state['access_key'], state['secret_key'], state['message'],
state['full_signature'] + 'x')
)
def test_verify_signature(_access_key, _secret_key, _message, _full_signature):
valid = (_access_key, _secret_key, _message, _full_signature)
len_valid = len(valid)

def _invalid(wrong_index):
args = list(valid)
arg = args.pop(wrong_index)
args.insert(wrong_index, arg + 'x')
return args

invalid = (_invalid(i) for i in range(len_valid - 1))

assert verify_signature(*valid)

for args in invalid:
assert not verify_signature(*args)

0 comments on commit 36cfd14

Please sign in to comment.