Skip to content

Commit d906d8b

Browse files
#827 lots of tests
1 parent 17905bd commit d906d8b

File tree

10 files changed

+228
-19
lines changed

10 files changed

+228
-19
lines changed

SoftLayer/CLI/core.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,18 +115,23 @@ def cli(env,
115115
**kwargs):
116116
"""Main click CLI entry-point."""
117117

118-
logger = logging.getLogger()
119-
logger.addHandler(logging.StreamHandler())
120-
logger.setLevel(DEBUG_LOGGING_MAP.get(verbose, logging.DEBUG))
121-
122118
# Populate environement with client and set it as the context object
123119
env.skip_confirmations = really
124120
env.config_file = config
125121
env.format = format
126122
env.ensure_client(config_file=config, is_demo=demo, proxy=proxy)
127-
128123
env.vars['_start'] = time.time()
129-
env.vars['_timings'] = SoftLayer.DebugTransport(env.client.transport)
124+
125+
if demo is False:
126+
logger = logging.getLogger()
127+
logger.addHandler(logging.StreamHandler())
128+
logger.setLevel(DEBUG_LOGGING_MAP.get(verbose, logging.DEBUG))
129+
env.vars['_timings'] = SoftLayer.DebugTransport(env.client.transport)
130+
else:
131+
# This section is for running CLI tests.
132+
logging.getLogger("urllib3").setLevel(logging.WARNING)
133+
env.vars['_timings'] = SoftLayer.TimingTransport(env.client.transport)
134+
130135
env.client.transport = env.vars['_timings']
131136

132137

SoftLayer/CLI/user/detail.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ def cli(env, identifier, keys, permissions, hardware, virtual, logins, events):
5050
access = mgr.get_user(user_id, mask)
5151
env.fout(print_access(access.get('virtualGuests', []), 'Virtual Guests'))
5252
if logins:
53-
mask = "id, unsuccessfulLogins, successfulLogins"
5453
login_log = mgr.get_logins(user_id)
5554
env.fout(print_logins(login_log))
5655
if events:

SoftLayer/CLI/user/edit_permissions.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ def cli(env, identifier, enable, permission):
2626
user_id = helpers.resolve_id(mgr.resolve_ids, identifier, 'username')
2727
object_mask = "mask[id,permissions,isMasterUserFlag]"
2828
if enable:
29-
result = mgr.add_permissions(identifier, permission)
29+
result = mgr.add_permissions(user_id, permission)
3030
click.secho("Permissions added successfully: %s" % ", ".join(permission), fg='green')
3131
else:
32-
result = mgr.remove_permissions(identifier, permission)
32+
result = mgr.remove_permissions(user_id, permission)
3333
click.secho("Permissions removed successfully: %s" % ", ".join(permission), fg='green')
3434

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
getAllObjects = [
2+
{
3+
"accountId": 1234,
4+
"eventCreateDate": "2018-05-15T14:37:13.378291-06:00",
5+
"eventName": "Login Successful",
6+
"ipAddress": "1.2.3.4",
7+
"label": "sl1234-aaa",
8+
"metaData": "",
9+
"objectId": 6657767,
10+
"objectName": "User",
11+
"openIdConnectUserName": "a@b.com",
12+
"resource": {
13+
"accountId": 307608,
14+
"address1": "4849 Alpha Rd",
15+
"city": "Dallas"
16+
},
17+
"traceId": "5afb44f95c61f",
18+
"userId": 6657767,
19+
"userType": "CUSTOMER",
20+
"username": "sl1234-aaa"
21+
}
22+
]

SoftLayer/fixtures/SoftLayer_User_Customer.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,13 @@
4242
'userStatus': {'name': 'Active'},
4343
'userStatusId': 1001,
4444
'username': 'SL12345-test',
45-
'vpnManualConfig': False
45+
'vpnManualConfig': False,
46+
'permissions': [
47+
{'key': 'ALL_1',
48+
'keyName': 'ACCESS_ALL_HARDWARE',
49+
'name': 'All Hardware Access'}
50+
],
51+
'roles': []
4652
}
4753

4854
getPermissions = [
@@ -55,4 +61,19 @@
5561
{'key': 'A_10',
5662
'keyName': 'ADD_SERVICE_STORAGE',
5763
'name': 'Add/Upgrade Storage (StorageLayer)'}
58-
]
64+
]
65+
66+
67+
getLoginAttempts = [
68+
{
69+
"createDate": "2017-10-03T09:28:33-06:00",
70+
"ipAddress": "1.2.3.4",
71+
"successFlag": False,
72+
"userId": 1111,
73+
"username": "sl1234"
74+
}
75+
]
76+
77+
addBulkPortalPermission = True
78+
removeBulkPortalPermission = True
79+
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
getAllObjects = [
2+
{
3+
"key": "T_1",
4+
"keyName": "TICKET_VIEW",
5+
"name": "View Tickets"
6+
}
7+
]

SoftLayer/managers/user.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,18 +53,36 @@ def list_users(self, objectMask=None, objectFilter=None):
5353

5454
def get_user(self, user_id, objectMask=None):
5555
if objectMask is None:
56-
objectMask = """mask[userStatus[name], parent[id, username]]"""
56+
objectMask = "mask[userStatus[name], parent[id, username]]"
5757
return self.userService.getObject(id=user_id, mask=objectMask)
5858

5959
def get_all_permissions(self):
6060
permissions = self.client.call('User_Customer_CustomerPermission_Permission', 'getAllObjects')
6161
return sorted(permissions, key=itemgetter('keyName'))
6262

6363
def add_permissions(self, user_id, permissions):
64+
"""Enables a list of permissions for a user
65+
66+
:param int id: user id to set
67+
:param list permissions: List of permissions keynames to enable
68+
:returns: True on success, Exception otherwise
69+
70+
Example::
71+
add_permissions(123, ['BANDWIDTH_MANAGE'])
72+
"""
6473
pretty_permissions = format_permission_object(permissions)
6574
return self.userService.addBulkPortalPermission(pretty_permissions, id=user_id)
6675

6776
def remove_permissions(self, user_id, permissions):
77+
"""Disables a list of permissions for a user
78+
79+
:param int id: user id to set
80+
:param list permissions: List of permissions keynames to disable
81+
:returns: True on success, Exception otherwise
82+
83+
Example::
84+
remove_permissions(123, ['BANDWIDTH_MANAGE'])
85+
"""
6886
pretty_permissions = format_permission_object(permissions)
6987
return self.userService.removeBulkPortalPermission(pretty_permissions, id=user_id)
7088

SoftLayer/testing/__init__.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -160,11 +160,7 @@ def set_mock(self, service, method):
160160
"""Set and return mock on the current client."""
161161
return self.mocks.set_mock(service, method)
162162

163-
def run_command(self,
164-
args=None,
165-
env=None,
166-
fixtures=True,
167-
fmt='json'):
163+
def run_command(self, args=None, env=None, fixtures=True, fmt='json'):
168164
"""A helper that runs a SoftLayer CLI command.
169165

170166
This returns a click.testing.Result object.

tests/CLI/modules/user_tests.py

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
class UserTests(testing.TestCase):
1515

16+
17+
"""User list tests"""
1618
def test_user_list(self):
1719
result = self.run_command(['user', 'list'])
1820
self.assert_no_fail(result)
@@ -23,7 +25,7 @@ def test_user_list_only_id(self):
2325
self.assert_no_fail(result)
2426
self.assertEqual([{"id":11100}, {"id":11111}], json.loads(result.output))
2527

26-
28+
"""User detail tests"""
2729
def test_detail(self):
2830
result = self.run_command(['user', 'detail', '11100'])
2931
self.assert_no_fail(result)
@@ -46,4 +48,46 @@ def test_detail_hardware(self):
4648
self.assert_called_with(
4749
'SoftLayer_User_Customer', 'getObject', identifier=11100,
4850
mask='mask[id, hardware, dedicatedHosts]'
49-
)
51+
)
52+
53+
def test_detail_virtual(self):
54+
result = self.run_command(['user', 'detail', '11100', '-v'])
55+
self.assert_no_fail(result)
56+
self.assert_called_with(
57+
'SoftLayer_User_Customer', 'getObject', identifier=11100,
58+
mask='mask[id, virtualGuests]'
59+
)
60+
61+
def test_detail_logins(self):
62+
result = self.run_command(['user', 'detail', '11100', '-l'])
63+
self.assert_no_fail(result)
64+
self.assert_called_with(
65+
'SoftLayer_User_Customer', 'getLoginAttempts', identifier=11100
66+
)
67+
68+
def test_detail_events(self):
69+
result = self.run_command(['user', 'detail', '11100', '-e'])
70+
self.assert_no_fail(result)
71+
self.assert_called_with('SoftLayer_Event_Log', 'getAllObjects')
72+
73+
74+
"""User permissions tests"""
75+
def test_permissions_list(self):
76+
result = self.run_command(['user', 'permissions', '11100'])
77+
self.assert_no_fail(result)
78+
self.assert_called_with('SoftLayer_User_Customer_CustomerPermission_Permission', 'getAllObjects')
79+
self.assert_called_with(
80+
'SoftLayer_User_Customer', 'getObject', identifier=11100,
81+
mask='mask[id, permissions, isMasterUserFlag, roles]'
82+
)
83+
84+
"""User edit-permissions tests"""
85+
def test_edit_perms_on(self):
86+
result = self.run_command(['user', 'edit-permissions', '11100', '--enable', '-p TEST'])
87+
self.assert_no_fail(result)
88+
self.assert_called_with('SoftLayer_User_Customer', 'addBulkPortalPermission', identifier=11100)
89+
90+
def test_edit_perms_off(self):
91+
result = self.run_command(['user', 'edit-permissions', '11100', '--disable', '-p TEST'])
92+
self.assert_no_fail(result)
93+
self.assert_called_with('SoftLayer_User_Customer', 'removeBulkPortalPermission', identifier=11100)

tests/managers/user_tests.py

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
"""
2+
SoftLayer.tests.managers.user_tests
3+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4+
5+
"""
6+
import mock
7+
import SoftLayer
8+
from SoftLayer import testing
9+
10+
11+
class SshKeyTests(testing.TestCase):
12+
13+
def set_up(self):
14+
self.manager = SoftLayer.UserManager(self.client)
15+
16+
def test_list_user_defaults(self):
17+
result = self.manager.list_users()
18+
self.assert_called_with('SoftLayer_Account', 'getUsers',
19+
mask="mask[id, username, displayName, userStatus[name], hardwareCount, virtualGuestCount]")
20+
21+
def test_list_user_mask(self):
22+
result = self.manager.list_users(objectMask="mask[id]")
23+
self.assert_called_with('SoftLayer_Account', 'getUsers', mask="mask[id]")
24+
25+
def test_list_user_filter(self):
26+
test_filter = {'id': {'operation': 1234}}
27+
result = self.manager.list_users(objectFilter=test_filter)
28+
self.assert_called_with('SoftLayer_Account', 'getUsers', filter=test_filter)
29+
30+
def test_get_user_default(self):
31+
result = self.manager.get_user(1234)
32+
self.assert_called_with('SoftLayer_User_Customer', 'getObject', identifier=1234,
33+
mask="mask[userStatus[name], parent[id, username]]")
34+
35+
def test_get_user_mask(self):
36+
result = self.manager.get_user(1234, objectMask="mask[id]")
37+
self.assert_called_with('SoftLayer_User_Customer', 'getObject', identifier=1234, mask="mask[id]")
38+
39+
def test_get_all_permissions(self):
40+
result = self.manager.get_all_permissions()
41+
self.assert_called_with('SoftLayer_User_Customer_CustomerPermission_Permission', 'getAllObjects')
42+
43+
def test_add_permissions(self):
44+
result = self.manager.add_permissions(1234, ['TEST'])
45+
expected_args = (
46+
[{'keyName': 'TEST'}],
47+
)
48+
self.assert_called_with('SoftLayer_User_Customer', 'addBulkPortalPermission',
49+
args=expected_args, identifier=1234)
50+
51+
def test_remove_permissions(self):
52+
result = self.manager.remove_permissions(1234, ['TEST'])
53+
expected_args = (
54+
[{'keyName': 'TEST'}],
55+
)
56+
self.assert_called_with('SoftLayer_User_Customer', 'removeBulkPortalPermission',
57+
args=expected_args, identifier=1234)
58+
59+
60+
def test_get_logins_default(self):
61+
from datetime import date
62+
with mock.patch('SoftLayer.managers.user.datetime.date') as mock_date:
63+
mock_date.today.return_value = date(2018, 5, 15)
64+
mock_date.side_effect = lambda *args, **kw: date(*args, **kw)
65+
66+
result = self.manager.get_logins(1234)
67+
expected_filter = {
68+
'loginAttempts': {
69+
'createDate': {
70+
'operation': 'greaterThanDate',
71+
'options': [{'name': 'date', 'value': ['04/15/2018 0:0:0']}]
72+
}
73+
}
74+
}
75+
self.assert_called_with('SoftLayer_User_Customer', 'getLoginAttempts', filter=expected_filter)
76+
77+
78+
def test_get_events_default(self):
79+
from datetime import date
80+
with mock.patch('SoftLayer.managers.user.datetime.date') as mock_date:
81+
mock_date.today.return_value = date(2018, 5, 15)
82+
mock_date.side_effect = lambda *args, **kw: date(*args, **kw)
83+
84+
result = self.manager.get_events(1234)
85+
expected_filter = {
86+
'userId': {
87+
'operation': 1234
88+
},
89+
'eventCreateDate': {
90+
'operation': 'greaterThanDate',
91+
'options': [{'name': 'date', 'value': ['2018-04-15T00:00:00.0000-06:00']}]
92+
}
93+
}
94+
self.assert_called_with('SoftLayer_Event_Log', 'getAllObjects', filter=expected_filter)
95+
96+
97+

0 commit comments

Comments
 (0)