"""Test for the HMAC Calculation.""" import pytest from owsrequest import hmac @pytest.fixture(params=['body of the request', b'body of the request', '']) def fixture_body(request): """Return the body of a request.""" return request.param def test_secret_creation(): """Test creating a secret.""" assert len(hmac.create_secret()) == hmac.SECRET_SIZE assert hmac.create_secret() != hmac.create_secret() assert set(hmac.create_secret()) <= set(hmac.SECRET_CHARACTERS) def test_create_secret_with_size(): """Test creating a secret with a different size.""" secret_size = 40 assert secret_size != hmac.SECRET_SIZE assert len(hmac.create_secret(size=secret_size)) == secret_size def test_calculating_hmac(fixture_body): """Test calculating a HMAC.""" # For this case, it doesn't really matter that the body contains a value # or not if not fixture_body: return secret = 'foobar' calculated_hmac = hmac.calculate( secret, 'GET', fixture_body, '0d0d5248-1b89-11e6-9571-f45c89a67659', '/endpoint?some_query_params=some_value') assert calculated_hmac == '714011aadf6b3bf38cfffb532590d03e98cdd7bb' def test_calculating_body_md5(fixture_body): """Test calculating a body's md5.""" response = hmac.calculate_body_md5(fixture_body) if fixture_body: assert response assert response == 'ebb2d30c1e0859a597acd666e59fa41f' else: # verifies it is an empty string. assert isinstance(response, str) assert not response