Skip to content

Commit 6a134dc

Browse files
committed
Fixing exclusive attributes bug in the Virtual Server resource
- For Virtual enabled/disabled state - For Virtual vlansEnabled/vlansDisabled state Unit Tests Updated Two Functional Tests Added
1 parent e7eb9b5 commit 6a134dc

3 files changed

Lines changed: 46 additions & 5 deletions

File tree

f5/bigip/test/unit/test_resource.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -291,16 +291,15 @@ def test_reduce_boolean_removes_nothing(self, fake_vs):
291291
assert 'disabled' not in kwargs['json']
292292

293293
def test_reduce_boolean_same_value(self, fake_vs):
294-
with pytest.raises(BooleansToReduceHaveSameValue) as ex:
294+
with pytest.raises(ExclusiveAttributesPresent) as ex:
295295
fake_vs.create(
296296
partition='Common',
297297
name='test_create',
298298
enabled=True,
299299
disabled=True
300300
)
301-
msg = 'Boolean pair, enabled and disabled, have same value: True. ' \
302-
'If both are given to this method, they cannot be the same, as ' \
303-
'this method cannot decide which one should be True.'
301+
msg = 'Mutually exclusive arguments submitted. The following ' \
302+
'arguments cannot be set together: "disabled, enabled".'
304303
assert msg == str(ex.value)
305304

306305

f5/bigip/tm/ltm/test/functional/test_virtual.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@ def basic_rule(mgmt_root):
3434
rule1.delete()
3535

3636

37+
@pytest.fixture
38+
def basic_vlan(mgmt_root):
39+
vlan1 = mgmt_root.tm.net.vlans.vlan.create(
40+
name='testvlan',
41+
partition='Common'
42+
)
43+
yield vlan1
44+
vlan1.delete()
45+
46+
3747
@pytest.fixture
3848
def virtual_setup(mgmt_root):
3949
vs_kwargs = {'name': 'vs', 'partition': 'Common'}
@@ -117,6 +127,35 @@ def test_virtual_modify(self, request, mgmt_root):
117127
def test_virtual_no_rules(self, virtual_setup, basic_rule):
118128
assert len(virtual_setup.rules) == 0
119129

130+
def test_virtual_state_toggle(self, virtual_setup):
131+
virtual_setup.disabled = True
132+
virtual_setup.update()
133+
assert hasattr(virtual_setup, 'disabled')
134+
assert not hasattr(virtual_setup, 'enabled')
135+
136+
virtual_setup.enabled = True
137+
virtual_setup.update()
138+
assert hasattr(virtual_setup, 'enabled')
139+
assert not hasattr(virtual_setup, 'disabled')
140+
141+
def test_virtual_vlan_toggle(self, virtual_setup, basic_vlan):
142+
virtual_setup.vlansEnabled = True
143+
virtual_setup.update()
144+
assert hasattr(virtual_setup, 'vlansEnabled')
145+
assert not hasattr(virtual_setup, 'vlansDisabled')
146+
assert not hasattr(virtual_setup, 'vlans')
147+
148+
virtual_setup.vlans = ['/Common/testvlan']
149+
virtual_setup.update()
150+
assert hasattr(virtual_setup, 'vlans')
151+
152+
virtual_setup.vlansDisabled = True
153+
virtual_setup.vlans = []
154+
virtual_setup.update()
155+
assert hasattr(virtual_setup, 'vlansDisabled')
156+
assert not hasattr(virtual_setup, 'vlansEnabled')
157+
assert not hasattr(virtual_setup, 'vlans')
158+
120159
def test_virtual_modify2(self, virtual_setup, basic_rule):
121160
virtual_setup.modify(rules=[basic_rule.name])
122161
virtual_setup.refresh()

f5/bigip/tm/ltm/virtual.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from distutils.version import LooseVersion
3131

3232
from f5.bigip.mixins import CheckExistenceMixin
33+
from f5.bigip.mixins import ExclusiveAttributesMixin
3334
from f5.bigip.resource import Collection
3435
from f5.bigip.resource import Resource
3536
from f5.sdk_exception import NonExtantVirtualPolicy
@@ -48,7 +49,7 @@ def __init__(self, ltm):
4849
{'tm:ltm:virtual:virtualstate': Virtual}
4950

5051

51-
class Virtual(Resource):
52+
class Virtual(Resource, ExclusiveAttributesMixin):
5253
"""BIG-IP® LTM virtual resource"""
5354
def __init__(self, virtual_s):
5455
super(Virtual, self).__init__(virtual_s)
@@ -57,6 +58,8 @@ def __init__(self, virtual_s):
5758
self._meta_data['attribute_registry'] =\
5859
{'tm:ltm:virtual:profiles:profilescollectionstate': Profiles_s,
5960
'tm:ltm:virtual:policies:policiescollectionstate': Policies_s}
61+
self._meta_data['exclusive_attributes'].append(('enabled', 'disabled'))
62+
self._meta_data['exclusive_attributes'].append(('vlansEnabled', 'vlansDisabled'))
6063

6164
def load(self, **kwargs):
6265
result = self._load(**kwargs)

0 commit comments

Comments
 (0)