Skip to content

Commit 9d6bf59

Browse files
Merge pull request #1133 from acamacho82/issues1129
#1129 Fixed unexpected errors in slcli subnet create
2 parents 8fcd8d7 + 6d5b3f4 commit 9d6bf59

File tree

4 files changed

+61
-16
lines changed

4 files changed

+61
-16
lines changed

SoftLayer/CLI/subnet/create.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
@click.argument('network', type=click.Choice(['public', 'private']))
1414
@click.argument('quantity', type=click.INT)
1515
@click.argument('vlan-id')
16-
@click.option('--v6', '--ipv6', is_flag=True, help="Order IPv6 Addresses")
16+
@click.option('--ipv6', '--v6', is_flag=True, help="Order IPv6 Addresses")
1717
@click.option('--test',
1818
is_flag=True,
1919
help="Do not order the subnet; just get a quote")
@@ -42,14 +42,10 @@ def cli(env, network, quantity, vlan_id, ipv6, test):
4242
if ipv6:
4343
version = 6
4444

45-
result = mgr.add_subnet(network,
46-
quantity=quantity,
47-
vlan_id=vlan_id,
48-
version=version,
49-
test_order=test)
50-
if not result:
51-
raise exceptions.CLIAbort(
52-
'Unable to place order: No valid price IDs found.')
45+
try:
46+
result = mgr.add_subnet(network, quantity=quantity, vlan_id=vlan_id, version=version, test_order=test)
47+
except SoftLayer.SoftLayerAPIError:
48+
raise exceptions.CLIAbort('There is no price id for {} {} ipv{}'.format(quantity, network, version))
5349

5450
table = formatting.Table(['Item', 'cost'])
5551
table.align['Item'] = 'r'

SoftLayer/managers/network.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,6 @@ def add_subnet(self, subnet_type, quantity=None, vlan_id=None, version=4,
153153
price_id = item['prices'][0]['id']
154154
break
155155

156-
if not price_id:
157-
raise TypeError('Invalid combination specified for ordering a'
158-
' subnet.')
159-
160156
order = {
161157
'packageId': 0,
162158
'prices': [{'id': price_id}],

tests/CLI/modules/subnet_tests.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,17 @@
44
55
:license: MIT, see LICENSE for more details.
66
"""
7+
from SoftLayer.fixtures import SoftLayer_Product_Order
8+
from SoftLayer.fixtures import SoftLayer_Product_Package
79
from SoftLayer import testing
810

911
import json
12+
import mock
13+
import SoftLayer
1014

1115

1216
class SubnetTests(testing.TestCase):
17+
1318
def test_detail(self):
1419
result = self.run_command(['subnet', 'detail', '1234'])
1520

@@ -39,3 +44,54 @@ def test_detail(self):
3944
def test_list(self):
4045
result = self.run_command(['subnet', 'list'])
4146
self.assert_no_fail(result)
47+
48+
@mock.patch('SoftLayer.CLI.formatting.confirm')
49+
def test_create_subnet_ipv4(self, confirm_mock):
50+
confirm_mock.return_value = True
51+
52+
item_mock = self.set_mock('SoftLayer_Product_Package', 'getItems')
53+
item_mock.return_value = SoftLayer_Product_Package.getItems
54+
55+
place_mock = self.set_mock('SoftLayer_Product_Order', 'placeOrder')
56+
place_mock.return_value = SoftLayer_Product_Order.placeOrder
57+
58+
result = self.run_command(['subnet', 'create', 'private', '8', '12346'])
59+
self.assert_no_fail(result)
60+
61+
output = [
62+
{'Item': 'Total monthly cost', 'cost': '0.00'}
63+
]
64+
65+
self.assertEqual(output, json.loads(result.output))
66+
67+
@mock.patch('SoftLayer.CLI.formatting.confirm')
68+
def test_create_subnet_ipv6(self, confirm_mock):
69+
confirm_mock.return_value = True
70+
71+
item_mock = self.set_mock('SoftLayer_Product_Package', 'getItems')
72+
item_mock.return_value = SoftLayer_Product_Package.getItems
73+
74+
place_mock = self.set_mock('SoftLayer_Product_Order', 'verifyOrder')
75+
place_mock.return_value = SoftLayer_Product_Order.verifyOrder
76+
77+
result = self.run_command(['subnet', 'create', '--v6', 'public', '64', '12346', '--test'])
78+
self.assert_no_fail(result)
79+
80+
output = [
81+
{'Item': 'this is a thing', 'cost': '2.00'},
82+
{'Item': 'Total monthly cost', 'cost': '2.00'}
83+
]
84+
85+
self.assertEqual(output, json.loads(result.output))
86+
87+
def test_create_subnet_no_prices_found(self):
88+
item_mock = self.set_mock('SoftLayer_Product_Package', 'getItems')
89+
item_mock.return_value = SoftLayer_Product_Package.getItems
90+
91+
verify_mock = self.set_mock('SoftLayer_Product_Order', 'verifyOrder')
92+
verify_mock.side_effect = SoftLayer.SoftLayerAPIError('SoftLayer_Exception', 'Price not found')
93+
94+
result = self.run_command(['subnet', 'create', '--v6', 'public', '32', '12346', '--test'])
95+
96+
self.assertRaises(SoftLayer.SoftLayerAPIError, verify_mock)
97+
self.assertEqual(result.exception.message, 'There is no price id for 32 public ipv6')

tests/managers/network_tests.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,6 @@ def test_ip_lookup(self):
2828
'getByIpAddress',
2929
args=('10.0.1.37',))
3030

31-
def test_add_subnet_raises_exception_on_failure(self):
32-
self.assertRaises(TypeError, self.network.add_subnet, ('bad'))
33-
3431
def test_add_global_ip(self):
3532
# Test a global IPv4 order
3633
result = self.network.add_global_ip(test_order=True)

0 commit comments

Comments
 (0)