Skip to content

Commit 1ada772

Browse files
committed
Add additional tests for file and block storage ordering conditions added as well as existing conditions.
1 parent 8658b81 commit 1ada772

5 files changed

Lines changed: 274 additions & 4 deletions

File tree

SoftLayer/managers/file.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,9 @@ def order_file_volume(self, storage_type, location, size, os_type=None,
242242
:param snapshot_size: The size of optional snapshot space,
243243
if snapshot space should also be ordered (None if not ordered)
244244
"""
245+
if os_type:
246+
raise exceptions.SoftLayerError(
247+
'OS type is not used on file storage orders')
245248

246249
try:
247250
location_id = storage_utils.get_location_id(self, location)
@@ -285,10 +288,6 @@ def order_file_volume(self, storage_type, location, size, os_type=None,
285288
"File volume storage_type must be either "
286289
"Performance or Endurance")
287290

288-
if os_type:
289-
raise exceptions.SoftLayerError(
290-
'OS type is not used on file storage orders.')
291-
292291
order = {
293292
'complexType': complex_type,
294293
'packageId': package['id'],

tests/CLI/modules/block_tests.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,30 @@ def test_volume_order_order_not_placed(self, order_mock):
217217
'Order could not be placed! Please verify '
218218
'your options and try again.\n')
219219

220+
@mock.patch('SoftLayer.BlockStorageManager.order_block_volume')
221+
def test_volume_order_performance_manager_error(self, order_mock):
222+
order_mock.side_effect = ValueError('failure!')
223+
224+
result = self.run_command(['block', 'volume-order',
225+
'--storage-type=performance', '--size=20',
226+
'--iops=100', '--os-type=linux',
227+
'--location=dal05'])
228+
229+
self.assertEqual(2, result.exit_code)
230+
self.assertEqual('Argument Error: failure!', result.exception.message)
231+
232+
@mock.patch('SoftLayer.BlockStorageManager.order_block_volume')
233+
def test_volume_order_endurance_manager_error(self, order_mock):
234+
order_mock.side_effect = ValueError('failure!')
235+
236+
result = self.run_command(['block', 'volume-order',
237+
'--storage-type=endurance', '--size=20',
238+
'--tier=0.25', '--os-type=linux',
239+
'--location=dal05'])
240+
241+
self.assertEqual(2, result.exit_code)
242+
self.assertEqual('Argument Error: failure!', result.exception.message)
243+
220244
def test_enable_snapshots(self):
221245
result = self.run_command(['block', 'snapshot-enable', '12345678',
222246
'--schedule-type=HOURLY', '--minute=10',

tests/CLI/modules/file_tests.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,28 @@ def test_volume_order_order_not_placed(self, order_mock):
246246
'Order could not be placed! Please verify '
247247
'your options and try again.\n')
248248

249+
@mock.patch('SoftLayer.FileStorageManager.order_file_volume')
250+
def test_volume_order_performance_manager_error(self, order_mock):
251+
order_mock.side_effect = ValueError('failure!')
252+
253+
result = self.run_command(['file', 'volume-order',
254+
'--storage-type=performance', '--size=20',
255+
'--iops=100', '--location=dal05'])
256+
257+
self.assertEqual(2, result.exit_code)
258+
self.assertEqual('Argument Error: failure!', result.exception.message)
259+
260+
@mock.patch('SoftLayer.FileStorageManager.order_file_volume')
261+
def test_volume_order_endurance_manager_error(self, order_mock):
262+
order_mock.side_effect = ValueError('failure!')
263+
264+
result = self.run_command(['file', 'volume-order',
265+
'--storage-type=endurance', '--size=20',
266+
'--tier=0.25', '--location=dal05'])
267+
268+
self.assertEqual(2, result.exit_code)
269+
self.assertEqual('Argument Error: failure!', result.exception.message)
270+
249271
def test_enable_snapshots(self):
250272
result = self.run_command(['file', 'snapshot-enable', '12345678',
251273
'--schedule-type=HOURLY', '--minute=10',

tests/managers/block_tests.py

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,25 @@ def test_delete_snapshot(self):
7676
'deleteObject',
7777
identifier=100)
7878

79+
def test_order_block_volume_invalid_location(self):
80+
mock = self.set_mock('SoftLayer_Location_Datacenter', 'getDatacenters')
81+
mock.return_value = []
82+
83+
exception = self.assertRaises(
84+
exceptions.SoftLayerError,
85+
self.block.order_block_volume,
86+
"performance_storage_iscsi",
87+
"dal05",
88+
100,
89+
"LINUX",
90+
iops=100,
91+
)
92+
93+
self.assertEqual(str(exception), "Invalid datacenter name "
94+
"specified. Please provide the "
95+
"lower case short name "
96+
"(e.g.: dal09)")
97+
7998
def test_order_block_volume_no_package(self):
8099
mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
81100
mock.return_value = []
@@ -138,6 +157,20 @@ def test_replicant_failback(self):
138157
identifier=1234,
139158
)
140159

160+
def test_order_block_volume_invalid_storage_type(self):
161+
mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
162+
mock.return_value = [{}]
163+
164+
self.assertRaises(
165+
exceptions.SoftLayerError,
166+
self.block.order_block_volume,
167+
"something_completely_different",
168+
"dal05",
169+
100,
170+
"LINUX",
171+
iops=100,
172+
)
173+
141174
def test_order_block_volume_performance(self):
142175
mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
143176
mock.return_value = [{
@@ -545,6 +578,78 @@ def test_order_snapshot_space(self):
545578
},
546579
)
547580

581+
def test_order_snapshot_space_invalid_category(self):
582+
mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
583+
mock.return_value = [{
584+
'id': 240,
585+
'name': 'Endurance',
586+
'items': [{
587+
'capacity': '0',
588+
}, {
589+
'capacity': '5',
590+
'prices': [{
591+
'locationGroupId': '530',
592+
}],
593+
}, {
594+
'capacity': '5',
595+
'prices': [{
596+
'locationGroupId': '',
597+
'categories': [{
598+
'categoryCode': 'storage_block',
599+
}],
600+
}],
601+
}, {
602+
'capacity': '5',
603+
'prices': [{
604+
'locationGroupId': '',
605+
'categories': [{
606+
'categoryCode': 'storage_snapshot_space',
607+
}],
608+
'capacityRestrictionMinimum': '300',
609+
}],
610+
}, {
611+
'capacity': '5',
612+
'prices': [{
613+
'locationGroupId': '',
614+
'categories': [{
615+
'categoryCode': 'storage_snapshot_space',
616+
}],
617+
'capacityRestrictionMinimum': '100',
618+
'capacityRestrictionMaximum': '100',
619+
}],
620+
}, {
621+
'capacity': '5',
622+
'prices': [{
623+
'id': 46130,
624+
'locationGroupId': '',
625+
'categories': [{
626+
'categoryCode': 'storage_snapshot_space',
627+
}],
628+
'capacityRestrictionMinimum': '200',
629+
'capacityRestrictionMaximum': '200',
630+
}],
631+
}],
632+
}]
633+
634+
billing_item_mock = self.set_mock('SoftLayer_Network_Storage',
635+
'getObject')
636+
billing_item_mock.return_value = {
637+
'billingItem': {
638+
'categoryCode': 'not_storage_service_enterprise'
639+
}
640+
}
641+
642+
exception = self.assertRaises(
643+
exceptions.SoftLayerError,
644+
self.block.order_snapshot_space,
645+
100,
646+
5,
647+
None,
648+
False
649+
)
650+
self.assertEqual(str(exception), "Block volume storage_type must be "
651+
"Endurance")
652+
548653
def test_order_block_replicant_invalid_location(self):
549654
self.assertRaises(
550655
exceptions.SoftLayerError,

tests/managers/file_tests.py

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,25 @@ def test_delete_snapshot(self):
177177
'deleteObject',
178178
identifier=100)
179179

180+
def test_order_file_volume_invalid_location(self):
181+
mock = self.set_mock('SoftLayer_Location_Datacenter', 'getDatacenters')
182+
mock.return_value = []
183+
184+
exception = self.assertRaises(
185+
exceptions.SoftLayerError,
186+
self.file.order_file_volume,
187+
"performance_storage_nfs",
188+
"dal05",
189+
100,
190+
None,
191+
iops=100,
192+
)
193+
194+
self.assertEqual(str(exception), "Invalid datacenter name "
195+
"specified. Please provide the "
196+
"lower case short name "
197+
"(e.g.: dal09)")
198+
180199
def test_order_file_volume_no_package(self):
181200
mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
182201
mock.return_value = []
@@ -205,6 +224,35 @@ def test_order_file_volume_too_many_packages(self):
205224
iops=100,
206225
)
207226

227+
def test_order_file_volume_invalid_storage_type(self):
228+
mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
229+
mock.return_value = [{}]
230+
231+
exception = self.assertRaises(
232+
exceptions.SoftLayerError,
233+
self.file.order_file_volume,
234+
"something_completely_different",
235+
"dal05",
236+
100,
237+
None,
238+
iops=100,
239+
)
240+
self.assertEqual(str(exception), "File volume storage_type must be "
241+
"either Performance or Endurance")
242+
243+
def test_order_file_volume_os_type_provided(self):
244+
exception = self.assertRaises(
245+
exceptions.SoftLayerError,
246+
self.file.order_file_volume,
247+
"performance_storage_nfs",
248+
"dal05",
249+
100,
250+
"LINUX",
251+
iops=100,
252+
)
253+
self.assertEqual(str(exception), "OS type is not used on file "
254+
"storage orders")
255+
208256
def test_order_file_volume_performance(self):
209257
mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
210258
mock.return_value = [{
@@ -467,6 +515,78 @@ def test_order_snapshot_space_too_many_packages(self):
467515
False,
468516
)
469517

518+
def test_order_snapshot_space_invalid_category(self):
519+
mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
520+
mock.return_value = [{
521+
'id': 240,
522+
'name': 'Endurance',
523+
'items': [{
524+
'capacity': '0',
525+
}, {
526+
'capacity': '5',
527+
'prices': [{
528+
'locationGroupId': '530',
529+
}],
530+
}, {
531+
'capacity': '5',
532+
'prices': [{
533+
'locationGroupId': '',
534+
'categories': [{
535+
'categoryCode': 'storage_file',
536+
}],
537+
}],
538+
}, {
539+
'capacity': '5',
540+
'prices': [{
541+
'locationGroupId': '',
542+
'categories': [{
543+
'categoryCode': 'storage_snapshot_space',
544+
}],
545+
'capacityRestrictionMinimum': '300',
546+
}],
547+
}, {
548+
'capacity': '5',
549+
'prices': [{
550+
'locationGroupId': '',
551+
'categories': [{
552+
'categoryCode': 'storage_snapshot_space',
553+
}],
554+
'capacityRestrictionMinimum': '100',
555+
'capacityRestrictionMaximum': '100',
556+
}],
557+
}, {
558+
'capacity': '5',
559+
'prices': [{
560+
'id': 46130,
561+
'locationGroupId': '',
562+
'categories': [{
563+
'categoryCode': 'storage_snapshot_space',
564+
}],
565+
'capacityRestrictionMinimum': '200',
566+
'capacityRestrictionMaximum': '200',
567+
}],
568+
}],
569+
}]
570+
571+
billing_item_mock = self.set_mock('SoftLayer_Network_Storage',
572+
'getObject')
573+
billing_item_mock.return_value = {
574+
'billingItem': {
575+
'categoryCode': 'not_storage_service_enterprise'
576+
}
577+
}
578+
579+
exception = self.assertRaises(
580+
exceptions.SoftLayerError,
581+
self.file.order_snapshot_space,
582+
100,
583+
5,
584+
None,
585+
False,
586+
)
587+
self.assertEqual(str(exception), "File volume storage_type must be "
588+
"Endurance")
589+
470590
def test_order_snapshot_space(self):
471591
mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
472592
mock.return_value = [{

0 commit comments

Comments
 (0)