Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions SoftLayer/managers/firewall.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

:license: MIT, see LICENSE for more details.
"""
from SoftLayer import exceptions
from SoftLayer import utils

RULE_MASK = ('mask[orderValue,action,destinationIpAddress,'
Expand Down Expand Up @@ -87,9 +88,8 @@ def cancel_firewall(self, firewall_id, dedicated=False):
"""

fwl_billing = self._get_fwl_billing_item(firewall_id, dedicated)
billing_id = fwl_billing['billingItem']['id']
billing_item = self.client['Billing_Item']
return billing_item.cancelService(id=billing_id)
billing_item_service = self.client['Billing_Item']
return billing_item_service.cancelService(id=fwl_billing['id'])

def add_standard_firewall(self, server_id, is_virt=True):
"""Creates a firewall for the specified virtual/hardware server.
Expand Down Expand Up @@ -150,12 +150,20 @@ def _get_fwl_billing_item(self, firewall_id, dedicated=False):
:returns: A dictionary of the firewall billing item.
"""

mask = ('mask[id,billingItem[id]]')
mask = 'mask[id,billingItem[id]]'
if dedicated:
fwl_svc = self.client['Network_Vlan_Firewall']
firewall_service = self.client['Network_Vlan_Firewall']
else:
fwl_svc = self.client['Network_Component_Firewall']
return fwl_svc.getObject(id=firewall_id, mask=mask)
firewall_service = self.client['Network_Component_Firewall']
firewall = firewall_service.getObject(id=firewall_id, mask=mask)
if firewall is None:
raise exceptions.SoftLayerError(
"Unable to find firewall %d" % firewall_id)
if firewall.get('billingItem') is None:
raise exceptions.SoftLayerError(
"Unable to find billing item for firewall %d" % firewall_id)

return firewall['billingItem']

def _get_fwl_port_speed(self, server_id, is_virt=True):
"""Determines the appropriate speed for a firewall.
Expand Down
34 changes: 34 additions & 0 deletions tests/managers/firewall_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"""

import SoftLayer
from SoftLayer import exceptions
from SoftLayer import fixtures
from SoftLayer import testing

Expand Down Expand Up @@ -137,6 +138,23 @@ def test_cancel_firewall(self):
self.assert_called_with('SoftLayer_Billing_Item', 'cancelService',
identifier=21370814)

def test_cancel_firewall_no_firewall(self):
mock = self.set_mock('SoftLayer_Network_Component_Firewall', 'getObject')
mock.return_value = None

self.assertRaises(exceptions.SoftLayerError,
self.firewall.cancel_firewall, 6327, dedicated=False)

def test_cancel_firewall_no_billing(self):
mock = self.set_mock('SoftLayer_Network_Component_Firewall', 'getObject')
mock.return_value = {
'id': 6327,
'billingItem': None
}

self.assertRaises(exceptions.SoftLayerError,
self.firewall.cancel_firewall, 6327, dedicated=False)

def test_cancel_dedicated_firewall(self):
# test dedicated firewalls
result = self.firewall.cancel_firewall(6327, dedicated=True)
Expand All @@ -149,6 +167,22 @@ def test_cancel_dedicated_firewall(self):
self.assert_called_with('SoftLayer_Billing_Item', 'cancelService',
identifier=21370815)

def test_cancel_dedicated_firewall_no_firewall(self):
mock = self.set_mock('SoftLayer_Network_Vlan_Firewall', 'getObject')
mock.return_value = None

self.assertRaises(exceptions.SoftLayerError,
self.firewall.cancel_firewall, 6327, dedicated=True)

def test_cancel_dedicated_firewall_no_billing(self):
mock = self.set_mock('SoftLayer_Network_Vlan_Firewall', 'getObject')
mock.return_value = {
'id': 6327,
'billingItem': None
}
self.assertRaises(exceptions.SoftLayerError,
self.firewall.cancel_firewall, 6327, dedicated=True)

def test_add_standard_firewall_virtual_server(self):
# test standard firewalls for virtual servers
self.firewall.add_standard_firewall(6327, is_virt=True)
Expand Down