Skip to content

Commit 086889d

Browse files
author
Nathan Beittenmiller
committed
Merge pull request softlayer#254 from sudorandom/fixtures_for_all
Fixtures for all
2 parents c06cc74 + 0ee5f0e commit 086889d

43 files changed

Lines changed: 861 additions & 1110 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

SoftLayer/API.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,9 @@ def __repr__(self):
260260

261261
__str__ = __repr__
262262

263+
def __len__(self):
264+
return 0
265+
263266

264267
class TimedClient(Client):
265268
""" Subclass of Client()

SoftLayer/CLI/formatting.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
:copyright: (c) 2013, SoftLayer Technologies, Inc. All rights reserved.
88
:license: MIT, see LICENSE for more details.
99
"""
10+
# pylint: disable=E0202
1011
import os
1112
import json
1213

SoftLayer/managers/hardware.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,11 @@ def cancel_hardware(self, hardware_id, reason='unneeded', comment=''):
5353
# content - Comment about the cancellation
5454
# cancelAssociatedItems
5555
# attachmentType - Only option is HARDWARE
56-
ticket_obj = self.client['Ticket']
57-
return ticket_obj.createCancelServerTicket(hardware_id, cancel_reason,
58-
comment, True, 'HARDWARE')
56+
return self.client['Ticket'].createCancelServerTicket(hardware_id,
57+
cancel_reason,
58+
comment,
59+
True,
60+
'HARDWARE')
5961

6062
def cancel_metal(self, hardware_id, immediate=False):
6163
""" Cancels the specified bare metal instance.
@@ -653,7 +655,6 @@ def _parse_package_data(self, package_id):
653655
'labor_fee': price.get('laborFee', 0),
654656
'capacity': float(price['item'].get('capacity', 0)),
655657
})
656-
657658
results['categories'][code]['items'] = items
658659

659660
return results

SoftLayer/managers/image.py

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@ def __init__(self, client):
2929
self.vgbdtg = self.client['Virtual_Guest_Block_Device_Template_Group']
3030
#: A list of resolver functions. Used primarily by the CLI to provide
3131
#: a variety of methods for uniquely identifying an object such as guid
32-
self.resolvers = [self._get_ids_from_guid_public,
33-
self._get_ids_from_guid_private,
34-
self._get_ids_from_name_public,
32+
self.resolvers = [self._get_ids_from_name_public,
3533
self._get_ids_from_name_private]
3634

3735
def get_image(self, image_id, **kwargs):
@@ -104,15 +102,3 @@ def _get_ids_from_name_public(self, name):
104102
def _get_ids_from_name_private(self, name):
105103
results = self.list_private_images(name=name)
106104
return [result['id'] for result in results]
107-
108-
def _get_ids_from_guid_public(self, guid):
109-
if len(guid) != 36:
110-
return
111-
results = self.list_public_images(guid=guid)
112-
return [result['id'] for result in results]
113-
114-
def _get_ids_from_guid_private(self, guid):
115-
if len(guid) != 36:
116-
return
117-
results = self.list_private_images(guid=guid)
118-
return [result['id'] for result in results]

SoftLayer/tests/CLI/modules/bmc_tests.py

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,16 @@
88
:copyright: (c) 2013, SoftLayer Technologies, Inc. All rights reserved.
99
:license: MIT, see LICENSE for more details.
1010
"""
11-
from SoftLayer.tests import unittest
12-
from mock import MagicMock, patch
11+
from SoftLayer.tests import unittest, FixtureClient
12+
from mock import patch
1313

1414
from SoftLayer.CLI.helpers import format_output, CLIAbort, ArgumentError
1515
from SoftLayer.CLI.modules import bmc
16-
from SoftLayer.tests.mocks import product_package_mock
1716

1817

1918
class BMCCLITests(unittest.TestCase):
2019
def setUp(self):
21-
self.client = self._setup_package_mocks(MagicMock())
20+
self.client = FixtureClient()
2221

2322
def test_BMCCreateOptions(self):
2423
args = {
@@ -277,12 +276,3 @@ def test_get_default_value_returns_none_for_unknown_category(self):
277276
runnable = bmc.CreateBMCInstance(client=self.client)
278277
output = runnable._get_default_value(option_mock, 'nope')
279278
self.assertEqual(None, output)
280-
281-
def _setup_package_mocks(self, client):
282-
p = client['Product_Package']
283-
p.getAllObjects = product_package_mock.getAllObjects_Mock()
284-
p.getConfiguration = product_package_mock.getConfiguration_Mock(True)
285-
p.getCategories = product_package_mock.getCategories_Mock(True)
286-
p.getRegions = product_package_mock.getRegions_Mock()
287-
288-
return client

SoftLayer/tests/CLI/modules/server_tests.py

Lines changed: 26 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
:copyright: (c) 2013, SoftLayer Technologies, Inc. All rights reserved.
99
:license: MIT, see LICENSE for more details.
1010
"""
11-
from SoftLayer.tests import unittest
12-
from mock import Mock, MagicMock, patch
11+
from SoftLayer.tests import unittest, FixtureClient
12+
from mock import Mock, patch
1313
try:
1414
# Python 3.x compatibility
1515
import builtins # NOQA
@@ -19,13 +19,11 @@
1919

2020
from SoftLayer.CLI.helpers import format_output, CLIAbort, ArgumentError
2121
from SoftLayer.CLI.modules import server
22-
from SoftLayer.tests.mocks import (
23-
account_mock, hardware_mock, product_package_mock)
2422

2523

2624
class ServerCLITests(unittest.TestCase):
2725
def setUp(self):
28-
self.client = MagicMock()
26+
self.client = FixtureClient()
2927

3028
def test_ServerCancelReasons(self):
3129
runnable = server.ServerCancelReasons(client=self.client)
@@ -68,31 +66,31 @@ def test_ServerCreateOptions(self):
6866
'--controller': False,
6967
}
7068

71-
client = self._setup_package_mocks(self.client)
72-
runnable = server.ServerCreateOptions(client=client)
69+
runnable = server.ServerCreateOptions(client=self.client)
7370

7471
output = runnable.execute(args)
7572

7673
expected = {
77-
'datacenter': ['RANDOM_LOCATION'],
78-
'dual nic': ['100_DUAL', '10_DUAL'],
79-
'disk_controllers': ['None', 'RAID0'],
80-
'os (CENTOS)': ['CENTOS_6_64'],
81-
'os (DEBIAN)': ['DEBIAN_6_32'],
82-
'os (REDHAT)': ['REDHAT_6_64_6'],
83-
'os (UBUNTU)': ['UBUNTU_12_64', 'UBUNTU_12_64_MINIMAL'],
84-
'os (WIN)': ['WIN_2003-STD-R2_64', 'WIN_2008-DC-HYPERV_64',
85-
'WIN_2008-ENT_64', 'WIN_2008-STD_64'],
86-
'memory': [4, 6],
87-
'disk': ['1000_DRIVE'],
88-
'single nic': ['100', '1000'],
8974
'cpu': [
9075
{'description': 'Dual Quad Core Pancake 200 - 1.60GHz',
9176
'id': 723},
9277
{'description': 'Dual Quad Core Pancake 200 - 1.80GHz',
93-
'id': 724}
94-
],
95-
}
78+
'id': 724}],
79+
'datacenter': ['RANDOM_LOCATION'],
80+
'disk': ['250_SATA_II', '500_SATA_II'],
81+
'disk_controllers': ['None', 'RAID0'],
82+
'dual nic': ['1000_DUAL', '100_DUAL', '10_DUAL'],
83+
'memory': [4, 6],
84+
'os (CENTOS)': ['CENTOS_6_64_LAMP', 'CENTOS_6_64_MINIMAL'],
85+
'os (REDHAT)': ['REDHAT_6_64_LAMP', 'REDHAT_6_64_MINIMAL'],
86+
'os (UBUNTU)': ['UBUNTU_12_64_LAMP', 'UBUNTU_12_64_MINIMAL'],
87+
'os (WIN)': [
88+
'WIN_2008-DC_64',
89+
'WIN_2008-ENT_64',
90+
'WIN_2008-STD-R2_64',
91+
'WIN_2008-STD_64',
92+
'WIN_2012-DC-HYPERV_64'],
93+
'single nic': ['100', '1000']}
9694

9795
self.assertEqual(expected, format_output(output, 'python'))
9896

@@ -109,8 +107,7 @@ def test_ServerCreateOptions_with_cpu_only(self):
109107
'--controller': False,
110108
}
111109

112-
client = self._setup_package_mocks(self.client)
113-
runnable = server.ServerCreateOptions(client=client)
110+
runnable = server.ServerCreateOptions(client=self.client)
114111

115112
output = runnable.execute(args)
116113

@@ -128,13 +125,7 @@ def test_ServerCreateOptions_with_cpu_only(self):
128125
def test_ServerDetails(self):
129126
hw_id = 1234
130127

131-
client = Mock()
132-
client.__getitem__ = Mock()
133-
service = client['Hardware_Server']
134-
service.getObject = hardware_mock.getObject_Mock(1000)
135-
dns_mock = hardware_mock.getReverseDomainRecords_Mock(1000)
136-
service.getReverseDomainRecords = dns_mock
137-
runnable = server.ServerDetails(client=client)
128+
runnable = server.ServerDetails(client=self.client)
138129

139130
args = {'<identifier>': hw_id, '--passwords': True, '--price': True}
140131
output = runnable.execute(args)
@@ -163,7 +154,6 @@ def test_ServerDetails(self):
163154
self.assertEqual(expected, format_output(output, 'python'))
164155

165156
def test_ListServers(self):
166-
self.client['Account'].getHardware = account_mock.getHardware_Mock()
167157
runnable = server.ListServers(client=self.client)
168158

169159
output = runnable.execute({'--tags': 'openstack'})
@@ -375,7 +365,7 @@ def test_CreateServer(self):
375365
'--datacenter': 'TEST00',
376366
'--cpu': False,
377367
'--network': '100',
378-
'--disk': ['1000_DRIVE', '1000_DRIVE'],
368+
'--disk': ['250_SATA_II', '250_SATA_II'],
379369
'--os': 'UBUNTU_12_64_MINIMAL',
380370
'--memory': False,
381371
'--controller': False,
@@ -387,8 +377,7 @@ def test_CreateServer(self):
387377
'--vlan_private': 20468,
388378
}
389379

390-
client = self._setup_package_mocks(self.client)
391-
runnable = server.CreateServer(client=client)
380+
runnable = server.CreateServer(client=self.client)
392381

393382
# First, test the --test flag
394383
with patch('SoftLayer.HardwareManager.verify_order') as verify_mock:
@@ -466,7 +455,6 @@ def test_CreateServer(self):
466455
self.assertRaises(CLIAbort, runnable.execute, args)
467456

468457
def test_CreateServer_failures(self):
469-
client = self._setup_package_mocks(self.client)
470458

471459
# This is missing a required argument
472460
args = {
@@ -483,7 +471,7 @@ def test_CreateServer_failures(self):
483471
'--template': None,
484472
}
485473

486-
runnable = server.CreateServer(client=client)
474+
runnable = server.CreateServer(client=self.client)
487475

488476
# Verify that ArgumentError is properly raised on error
489477
self.assertRaises(ArgumentError, runnable.execute, args)
@@ -521,8 +509,7 @@ def test_CreateServer_with_export(self, export_to_template):
521509
'--export': 'test_file.txt',
522510
}
523511

524-
client = self._setup_package_mocks(self.client)
525-
runnable = server.CreateServer(client=client)
512+
runnable = server.CreateServer(client=self.client)
526513

527514
expected = args.copy()
528515
del(expected['--export'])
@@ -605,12 +592,3 @@ def test_get_default_value_returns_none_for_unknown_category(self):
605592
runnable = server.CreateServer()
606593
output = runnable._get_default_value(option_mock, 'nope')
607594
self.assertEqual(None, output)
608-
609-
def _setup_package_mocks(self, client):
610-
package = client['Product_Package']
611-
package.getAllObjects = product_package_mock.getAllObjects_Mock()
612-
package.getConfiguration = product_package_mock.getConfiguration_Mock()
613-
package.getCategories = product_package_mock.getCategories_Mock()
614-
package.getRegions = product_package_mock.getRegions_Mock()
615-
616-
return client

SoftLayer/tests/api_tests.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ def test_service_repr(self):
6464
)
6565
self.assertIn("Service", repr(client['SERVICE']))
6666

67+
def test_len(self):
68+
client = SoftLayer.Client(
69+
username='doesnotexist',
70+
api_key='issurelywrong'
71+
)
72+
self.assertEqual(len(client), 0)
73+
6774

6875
class APIClient(unittest.TestCase):
6976
def setUp(self):

SoftLayer/tests/basic_tests.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,3 +152,11 @@ def test_b(self):
152152
def test_not_found(self):
153153
ids = self.fixture.resolve_ids('something')
154154
self.assertEqual(ids, [])
155+
156+
def test_globalidentifier(self):
157+
ids = self.fixture.resolve_ids('9d888bc2-7c9a-4dba-bbd8-6bd688687bae')
158+
self.assertEqual(ids, ['9d888bc2-7c9a-4dba-bbd8-6bd688687bae'])
159+
160+
def test_globalidentifier_upper(self):
161+
ids = self.fixture.resolve_ids('B534EF96-55C4-4891-B51A-63866411B58E')
162+
self.assertEqual(ids, ['B534EF96-55C4-4891-B51A-63866411B58E'])

SoftLayer/tests/fixture_client.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,29 @@ def reset_mock(self):
3030

3131
class FixtureService(object):
3232

33-
def __init__(self, name):
33+
def __init__(self, service_name):
34+
self.service_name = service_name
3435
try:
35-
self.module = import_module('SoftLayer.tests.fixtures.%s' % name)
36+
self.module = import_module('SoftLayer.tests.fixtures.%s'
37+
% service_name)
3638
except ImportError:
37-
self.module = None
39+
raise NotImplementedError('%s fixture is not implemented'
40+
% service_name)
3841

3942
# Keep track of MagicMock instances in order to do future assertions
4043
self.loaded_methods = {}
4144

4245
def __getattr__(self, name):
43-
if self.loaded_methods.get(name):
46+
if name in self.loaded_methods:
4447
return self.loaded_methods[name]
4548

4649
call_handler = MagicMock()
4750
fixture = getattr(self.module, name, None)
48-
if fixture:
51+
if fixture is not None:
4952
call_handler.return_value = fixture
53+
else:
54+
raise NotImplementedError('%s::%s fixture is not implemented'
55+
% (self.service_name, name))
5056

5157
self.loaded_methods[name] = call_handler
5258
return call_handler

0 commit comments

Comments
 (0)