Skip to content

Commit 9655907

Browse files
expanding employee unit tests
1 parent 65df1cd commit 9655907

File tree

7 files changed

+106
-38
lines changed

7 files changed

+106
-38
lines changed

SoftLayer/API.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -688,8 +688,14 @@ def refresh_token(self, userId, auth_token):
688688

689689
self.auth = None
690690
auth_result = self.call('SoftLayer_User_Employee', 'refreshEncryptedToken', auth_token, id=userId)
691-
print(auth_result)
692-
self.settings['softlayer']['access_token'] = auth_result[0]
691+
if len(auth_result) > 1:
692+
for returned_data in auth_result:
693+
# Access tokens should be 188 characters, but just incase its longer or something.
694+
if len(returned_data) > 180:
695+
self.settings['softlayer']['access_token'] = returned_data
696+
else:
697+
message = "Excepted 2 properties from refreshEncryptedToken, got |{}|".format(auth_result)
698+
raise exceptions.SoftLayerAPIError(message)
693699

694700
config.write_config(self.settings, self.config_file)
695701
self.auth = slauth.EmployeeAuthentication(userId, auth_result[0])

SoftLayer/CLI/login.py

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,21 +42,14 @@ def cli(env):
4242
try:
4343
employee = client.call('SoftLayer_User_Employee', 'getObject', id=settings.get('userid'), mask="mask[id,username]")
4444
print(employee)
45+
client.refresh_token(settings.get('userid'), settings.get('access_token'))
4546
refresh = client.call('SoftLayer_User_Employee', 'refreshEncryptedToken', settings.get('access_token'), id=settings.get('userid'))
46-
print("REFRESH:\n{}\n".format(refresh))
47-
# we expect 2 results, a hash and a timeout
48-
if len(refresh) > 1:
49-
for returned_data in refresh:
50-
# Access tokens should be 188 characters, but just incase.
51-
if len(returned_data) > 180:
52-
settings['access_token'] = returned_data
53-
else:
54-
raise Exception("Got unexpected data. Expected 2 properties: {}".format(refresh))
47+
5548
config_settings['softlayer'] = settings
5649
config.write_config(config_settings, env.config_file)
5750
return
5851
except Exception as ex:
59-
print("Error with Hash, try with password: {}".format(ex))
52+
print("Error with Hash Authentication, try with password: {}".format(ex))
6053

6154

6255
url = settings.get('endpoint_url') or consts.API_EMPLOYEE_ENDPOINT
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="iso-8859-1"?>
2+
<methodResponse>
3+
<fault>
4+
<value>
5+
<struct>
6+
<member>
7+
<name>faultCode</name>
8+
<value>
9+
<string>SoftLayer_Exception_Public</string>
10+
</value>
11+
</member>
12+
<member>
13+
<name>faultString</name>
14+
<value>
15+
<string>Invalid username/password</string>
16+
</value>
17+
</member>
18+
</struct>
19+
</value>
20+
</fault>
21+
</methodResponse>

SoftLayer/fixtures/xmlrpc/refreshFailure.xml

Whitespace-only changes.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<params>
3+
<param>
4+
<value>
5+
<array>
6+
<data>
7+
<value>
8+
<string>REFRESHEDTOKENaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</string>
9+
</value>
10+
<value>
11+
<string>300</string>
12+
</value>
13+
</data>
14+
</array>
15+
</value>
16+
</param>
17+
</params>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<params>
3+
<param>
4+
<value>
5+
<struct>
6+
<member>
7+
<name>hash</name>
8+
<value>
9+
<string>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</string>
10+
</value>
11+
</member>
12+
<member>
13+
<name>userId</name>
14+
<value>
15+
<int>1234</int>
16+
</value>
17+
</member>
18+
</struct>
19+
</value>
20+
</param>
21+
</params>

tests/api_tests.py

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
:license: MIT, see LICENSE for more details.
66
"""
77
import io
8+
import os
89
from unittest import mock as mock
910
import requests
1011

@@ -317,43 +318,52 @@ def test_authenticate_with_password(self, _call):
317318

318319
class EmployeeClientTests(testing.TestCase):
319320

321+
320322
@staticmethod
321-
def failed_log():
323+
def setup_response(filename, status_code=200, total_items=1):
324+
basepath = os.path.dirname(__file__)
325+
body = b''
326+
print(f"Base Path: {basepath}")
327+
with open(f"{basepath}/../SoftLayer/fixtures/xmlrpc/{filename}.xml", 'rb') as fixture:
328+
body = fixture.read()
322329
response = requests.Response()
323-
list_body = b'''<?xml version="1.0" encoding="iso-8859-1"?>
324-
<methodResponse>
325-
<fault>
326-
<value>
327-
<struct>
328-
<member>
329-
<name>faultCode</name>
330-
<value>
331-
<string>SoftLayer_Exception_Public</string>
332-
</value>
333-
</member>
334-
<member>
335-
<name>faultString</name>
336-
<value>
337-
<string>Invalid username/password</string>
338-
</value>
339-
</member>
340-
</struct>
341-
</value>
342-
</fault>
343-
</methodResponse>'''
330+
list_body = body
344331
response.raw = io.BytesIO(list_body)
345-
response.status_code = 200
332+
response.headers['SoftLayer-Total-Items'] = total_items
333+
response.status_code = status_code
346334
return response
347335

336+
348337
def set_up(self):
349338
self.client = SoftLayer.API.EmployeeClient(config_file='./tests/testconfig')
350339

351340
@mock.patch('SoftLayer.transports.xmlrpc.requests.Session.request')
352-
def test_auth_with_pass(self, api_response):
353-
api_response.return_value = self.failed_log()
341+
def test_auth_with_pass_failure(self, api_response):
342+
api_response.return_value = self.setup_response('invalidLogin')
354343
exception = self.assertRaises(
355344
exceptions.SoftLayerAPIError,
356345
self.client.authenticate_with_password, 'testUser', 'testPassword', '123456')
346+
self.assertEqual(exception.faultCode, "SoftLayer_Exception_Public")
357347

348+
@mock.patch('SoftLayer.transports.xmlrpc.requests.Session.request')
349+
def test_auth_with_pass_success(self, api_response):
350+
api_response.return_value = self.setup_response('successLogin')
351+
result = self.client.authenticate_with_password('testUser', 'testPassword', '123456')
352+
print(result)
353+
self.assertEqual(result['userId'], 1234)
354+
self.assertEqual(self.client.settings['softlayer']['userid'], '1234')
355+
self.assertIn('x'*200, self.client.settings['softlayer']['access_token'])
356+
357+
def test_auth_with_hash(self):
358+
self.client.auth = None
359+
self.client.authenticate_with_hash(5555, 'abcdefg')
360+
self.assertEqual(self.client.auth.user_id, 5555)
361+
self.assertEqual(self.client.auth.hash, 'abcdefg')
358362

359-
self.assertEqual(exception.faultCode, "SoftLayer_Exception_Public")
363+
@mock.patch('SoftLayer.transports.xmlrpc.requests.Session.request')
364+
def test_refresh_token(self, api_response):
365+
api_response.return_value = self.setup_response('refreshSuccess')
366+
result = self.client.refresh_token(9999, 'qweasdzxcqweasdzxcqweasdzxc')
367+
self.assertEqual(self.client.auth.user_id, 9999)
368+
self.assertIn('REFRESHEDTOKENaaaa', self.client.auth.hash)
369+

0 commit comments

Comments
 (0)