Skip to content

Commit 65df1cd

Browse files
building up unit tests
1 parent e8d4d16 commit 65df1cd

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

SoftLayer/API.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,11 @@ def call(self, service, method, *args, **kwargs):
704704
if ex.faultCode == 401:
705705
LOGGER.warning("Token has expired, trying to refresh. %s", ex.faultString)
706706
return ex
707+
if ex.faultCode == "SoftLayer_Exception_EncryptedToken_Expired":
708+
userId = self.settings['softlayer'].get('userId')
709+
access_token = self.settings['softlayer'].get('access_token')
710+
LOGGER.warning("Token has expired2, trying to refresh. %s", ex.faultString)
711+
self.refresh_token()
707712
else:
708713
raise ex
709714

tests/api_tests.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@
44
55
:license: MIT, see LICENSE for more details.
66
"""
7+
import io
78
from unittest import mock as mock
9+
import requests
810

911
import SoftLayer
1012
import SoftLayer.API
1113
from SoftLayer import testing
1214
from SoftLayer import transports
15+
from SoftLayer import exceptions
1316

1417

1518
class Initialization(testing.TestCase):
@@ -310,3 +313,47 @@ def test_authenticate_with_password(self, _call):
310313
self.assertIsNotNone(self.client.auth)
311314
self.assertEqual(self.client.auth.user_id, 12345)
312315
self.assertEqual(self.client.auth.auth_token, 'TOKEN')
316+
317+
318+
class EmployeeClientTests(testing.TestCase):
319+
320+
@staticmethod
321+
def failed_log():
322+
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>'''
344+
response.raw = io.BytesIO(list_body)
345+
response.status_code = 200
346+
return response
347+
348+
def set_up(self):
349+
self.client = SoftLayer.API.EmployeeClient(config_file='./tests/testconfig')
350+
351+
@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()
354+
exception = self.assertRaises(
355+
exceptions.SoftLayerAPIError,
356+
self.client.authenticate_with_password, 'testUser', 'testPassword', '123456')
357+
358+
359+
self.assertEqual(exception.faultCode, "SoftLayer_Exception_Public")

0 commit comments

Comments
 (0)