Merge "Make create_user domain-aware for V3CredsClient"
diff --git a/releasenotes/notes/make-create-user-domain-aware-for-v3-creds-client-5054f58e715adc0c.yaml b/releasenotes/notes/make-create-user-domain-aware-for-v3-creds-client-5054f58e715adc0c.yaml
new file mode 100644
index 0000000..8931f09
--- /dev/null
+++ b/releasenotes/notes/make-create-user-domain-aware-for-v3-creds-client-5054f58e715adc0c.yaml
@@ -0,0 +1,9 @@
+---
+fixes:
+ - |
+ [`bug 1613819 <https://bugs.launchpad.net/tempest/+bug/1613819>`_]
+ admin_domain_name and default_credentials_domain_name parameters
+ under [auth] now affect a domain used for creating test users just
+ as they affect it for projects. Previously a domain with an id set
+ to "default" had to be present in order for test user creation to
+ succeed with Keystone v3.
diff --git a/tempest/lib/common/cred_client.py b/tempest/lib/common/cred_client.py
index e16a565..f6e9b49 100644
--- a/tempest/lib/common/cred_client.py
+++ b/tempest/lib/common/cred_client.py
@@ -173,6 +173,22 @@
self.domains_client.update_domain(domain_id, enabled=False)
self.domains_client.delete_domain(domain_id)
+ def create_user(self, username, password, project=None, email=None,
+ domain_id=None):
+ params = {'name': username,
+ 'password': password,
+ 'domain_id': domain_id or self.creds_domain['id']}
+ # with keystone v3, a default project is not required
+ if project:
+ params[self.project_id_param] = project['id']
+ # email is not a first-class attribute of a user
+ if email:
+ params['email'] = email
+ user = self.users_client.create_user(**params)
+ if 'user' in user:
+ user = user['user']
+ return user
+
def get_credentials(
self, user, project, password, domain=None, system=None):
# User, project and domain already include both ID and name here,
diff --git a/tempest/tests/lib/common/test_cred_client.py b/tempest/tests/lib/common/test_cred_client.py
index b99311c..7ea660b 100644
--- a/tempest/tests/lib/common/test_cred_client.py
+++ b/tempest/tests/lib/common/test_cred_client.py
@@ -111,3 +111,21 @@
self.assertIsNone(ret.project_name)
self.assertEqual(ret.system, {'system': 'all'})
self.assertEqual(ret.domain_name, 'some_domain')
+
+ def test_create_user(self):
+ self.users_client.create_user.return_value = {
+ 'user': 'a_user'
+ }
+ fake_project = {
+ 'id': 'fake_project_id',
+ }
+ res = self.creds_client.create_user('fake_username',
+ 'fake_password',
+ fake_project,
+ 'fake_email')
+ self.assertEqual('a_user', res)
+ self.users_client.create_user.assert_called_once_with(
+ name='fake_username', password='fake_password',
+ project_id=fake_project['id'],
+ email='fake_email',
+ domain_id='fake_domain_id')