Skip to content

Commit

Permalink
Generic integration tests base class (#234)
Browse files Browse the repository at this point in the history
* Rename tests.util => tests.utils for consistency

* Move create_client to utils

* Move manager management to HvacIntegrationTestCase class

* Change print to logging call

* Move prep_policy to new shared integration class

* Rearrange methods in tests.utils a bit more
  • Loading branch information
jeffwecan committed Jul 30, 2018
1 parent 3071f86 commit b80f003
Show file tree
Hide file tree
Showing 3 changed files with 196 additions and 189 deletions.
102 changes: 29 additions & 73 deletions hvac/tests/test_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,11 @@
from unittest import TestCase
from uuid import UUID

from hvac import Client, exceptions
from hvac.tests import util
from hvac import exceptions
from hvac.tests import utils


def create_client(**kwargs):
return Client(url='https://localhost:8200',
cert=('test/client-cert.pem', 'test/client-key.pem'),
verify='test/server-cert.pem',
**kwargs)


class IntegrationTest(TestCase):
@classmethod
def setUpClass(cls):
cls.manager = util.ServerManager(config_path='test/vault-tls.hcl', client=create_client())
cls.manager.start()
cls.manager.initialize()
cls.manager.unseal()

@classmethod
def tearDownClass(cls):
cls.manager.stop()

def root_token(self):
cls = type(self)
return cls.manager.root_token

def setUp(self):
self.client = create_client(token=self.root_token())
class IntegrationTest(utils.HvacIntegrationTestCase, TestCase):

def test_unseal_multi(self):
cls = type(self)
Expand Down Expand Up @@ -123,7 +99,7 @@ def test_auth_backend_manipulation(self):
self.client.enable_auth_backend('github')
assert 'github/' in self.client.list_auth_backends()

self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.disable_auth_backend('github')
assert 'github/' not in self.client.list_auth_backends()

Expand All @@ -149,7 +125,7 @@ def test_secret_backend_manipulation(self):
assert 'test/' not in self.client.list_secret_backends()
assert 'foobar/' in self.client.list_secret_backends()

self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.disable_secret_backend('foobar')
assert 'foobar/' not in self.client.list_secret_backends()

Expand All @@ -163,30 +139,10 @@ def test_audit_backend_manipulation(self):
self.client.enable_audit_backend('file', options=options, name='tmpfile')
assert 'tmpfile/' in self.client.list_audit_backends()

self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.disable_audit_backend('tmpfile')
assert 'tmpfile/' not in self.client.list_audit_backends()

def prep_policy(self, name):
text = """
path "sys" {
policy = "deny"
}
path "secret" {
policy = "write"
}
"""
obj = {
'path': {
'sys': {
'policy': 'deny'},
'secret': {
'policy': 'write'}
}
}
self.client.set_policy(name, text)
return text, obj

def test_policy_manipulation(self):
assert 'root' in self.client.list_policies()
assert self.client.get_policy('test') is None
Expand Down Expand Up @@ -253,7 +209,7 @@ def test_userpass_auth(self):
assert self.client.token == result['auth']['client_token']
assert self.client.is_authenticated()

self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.disable_auth_backend('userpass')

def test_create_userpass(self):
Expand All @@ -268,15 +224,15 @@ def test_create_userpass(self):
assert self.client.is_authenticated()

# Test ttl:
self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.create_userpass('testcreateuser', 'testcreateuserpass', policies='not_root', ttl='10s')
self.client.token = result['auth']['client_token']

result = self.client.auth_userpass('testcreateuser', 'testcreateuserpass')

assert result['auth']['lease_duration'] == 10

self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.disable_auth_backend('userpass')

def test_list_userpass(self):
Expand Down Expand Up @@ -341,7 +297,7 @@ def test_update_userpass_password(self):
assert self.client.is_authenticated()

# teardown
self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.disable_auth_backend('userpass')

def test_delete_userpass(self):
Expand All @@ -355,7 +311,7 @@ def test_delete_userpass(self):
assert self.client.token == result['auth']['client_token']
assert self.client.is_authenticated()

self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.delete_userpass('testcreateuser')
self.assertRaises(exceptions.InvalidRequest, self.client.auth_userpass, 'testcreateuser', 'testcreateuserpass')

Expand All @@ -373,7 +329,7 @@ def test_app_id_auth(self):
assert self.client.token == result['auth']['client_token']
assert self.client.is_authenticated()

self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.disable_auth_backend('app-id')

def test_create_app_id(self):
Expand All @@ -394,7 +350,7 @@ def test_create_app_id(self):
self.client.delete_app_id('testappid')
assert self.client.get_app_id('testappid')['data'] is None

self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.disable_auth_backend('app-id')

def test_cubbyhole_auth(self):
Expand Down Expand Up @@ -432,11 +388,11 @@ def test_create_user_id(self):

assert self.client.token == result['auth']['client_token']
assert self.client.is_authenticated()
self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.delete_user_id('testuserid')
assert self.client.get_user_id('testuserid')['data'] is None

self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.disable_auth_backend('app-id')

def test_create_role(self):
Expand All @@ -452,7 +408,7 @@ def test_create_role(self):
del lib_result['request_id']

assert result == lib_result
self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.disable_auth_backend('approle')

def test_delete_role(self):
Expand Down Expand Up @@ -483,7 +439,7 @@ def test_delete_role(self):
)

# reset test environment
self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.disable_auth_backend('approle')

def test_create_delete_role_secret_id(self):
Expand All @@ -502,7 +458,7 @@ def test_create_delete_role_secret_id(self):
assert False
except (exceptions.InvalidPath, ValueError):
assert True
self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.disable_auth_backend('approle')

def test_auth_approle(self):
Expand All @@ -518,7 +474,7 @@ def test_auth_approle(self):
assert result['auth']['metadata']['foo'] == 'bar'
assert self.client.token == result['auth']['client_token']
assert self.client.is_authenticated()
self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.disable_auth_backend('approle')

def test_auth_approle_dont_use_token(self):
Expand All @@ -533,7 +489,7 @@ def test_auth_approle_dont_use_token(self):
result = self.client.auth_approle(role_id, secret_id, use_token=False)
assert result['auth']['metadata']['foo'] == 'bar'
assert self.client.token != result['auth']['client_token']
self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.disable_auth_backend('approle')

def test_transit_read_write(self):
Expand Down Expand Up @@ -704,22 +660,22 @@ def test_transit_sign_verify_signature_data(self):
assert verify_resp

def test_missing_token(self):
client = create_client()
client = utils.create_client()
assert not client.is_authenticated()

def test_invalid_token(self):
client = create_client(token='not-a-real-token')
client = utils.create_client(token='not-a-real-token')
assert not client.is_authenticated()

def test_illegal_token(self):
client = create_client(token='token-with-new-line\n')
client = utils.create_client(token='token-with-new-line\n')
try:
client.is_authenticated()
except ValueError as e:
assert 'Invalid header value' in str(e)

def test_broken_token(self):
client = create_client(token='\x1b')
client = utils.create_client(token='\x1b')
try:
client.is_authenticated()
except exceptions.InvalidRequest as e:
Expand Down Expand Up @@ -1213,7 +1169,7 @@ def test_auth_ec2_alternate_mount_point_with_no_client_token_exception(self):
self.assertEqual(expected_exception_message, actual_exception_message)

# Reset test state.
self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.disable_auth_backend(mount_point=test_mount_point)

def test_auth_ec2_alternate_mount_point_with_no_client_token(self):
Expand Down Expand Up @@ -1241,7 +1197,7 @@ def test_auth_ec2_alternate_mount_point_with_no_client_token(self):
self.assertEqual(expected_exception_message, actual_exception_message)

# Reset test state.
self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.disable_auth_backend(mount_point=test_mount_point)

def test_auth_gcp_alternate_mount_point_with_no_client_token_exception(self):
Expand Down Expand Up @@ -1269,7 +1225,7 @@ def test_auth_gcp_alternate_mount_point_with_no_client_token_exception(self):
self.assertEqual(expected_exception_message, actual_exception_message)

# Reset test state.
self.client.token = self.root_token()
self.client.token = self.manager.root_token
self.client.disable_auth_backend(mount_point=test_mount_point)

def test_tune_auth_backend(self):
Expand Down Expand Up @@ -1569,7 +1525,7 @@ def test_auth_kubernetes(self):

def test_read_lease(self):
# Set up a test pki backend and issue a cert against some role so we.
util.configure_test_pki(client=self.client)
self.configure_test_pki()
pki_issue_response = self.client.write(
path='pki/issue/my-role',
common_name='test.hvac.com',
Expand All @@ -1585,4 +1541,4 @@ def test_read_lease(self):
)

# Reset integration test state.
util.disable_test_pki(client=self.client)
self.disable_test_pki()
116 changes: 0 additions & 116 deletions hvac/tests/util.py

This file was deleted.

0 comments on commit b80f003

Please sign in to comment.