Skip to content

Commit c60d7fa

Browse files
committed
Add testing for agent scheduler
Problem: Add some more testing around agent selection and lb rebinding when the current agent is dead or down. Analysis: Added tests.
1 parent ae69fca commit c60d7fa

1 file changed

Lines changed: 122 additions & 10 deletions

File tree

f5lbaasdriver/v2/bigip/test/test_agent_scheduler.py

Lines changed: 122 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,38 @@
2222
from f5lbaasdriver.v2.bigip import agent_scheduler
2323

2424

25+
@pytest.fixture
26+
def agents_in_env():
27+
agents_in_env = [
28+
{'id': 'test_agent_1_id',
29+
'alive': True,
30+
'admin_state_up': True,
31+
'configurations': {
32+
'environment_prefix': 'test',
33+
'environment_group_number': 2}},
34+
{'id': 'test_agent_2_id',
35+
'alive': True,
36+
'admin_state_up': True,
37+
'configurations': {
38+
'environment_prefix': 'test',
39+
'environment_group_number': 2}},
40+
{'id': 'test_agent_3_id',
41+
'alive': False,
42+
'admin_state_up': True,
43+
'configurations': {
44+
'environment_prefix': 'test',
45+
'environment_group_number': 2}},
46+
{'id': 'test_agent_4_id',
47+
'alive': True,
48+
'admin_state_up': False,
49+
'configurations': {
50+
'environment_prefix': 'test',
51+
'environment_group_number': 2}},
52+
]
53+
54+
return agents_in_env
55+
56+
2557
def test_get_capacity():
2658

2759
sched = agent_scheduler.TenantScheduler()
@@ -44,6 +76,72 @@ def test_get_lbaas_agent_hosting_loadbalancer():
4476
assert agent
4577

4678

79+
def test_get_lbaas_agent_hosting_loadbalancer_agent_up(agents_in_env):
80+
81+
context = mock.MagicMock()
82+
loadbalancer_id = 'uuid_1234'
83+
84+
sched = agent_scheduler.TenantScheduler()
85+
sched.get_agents_in_env = mock.MagicMock(name='get_agents_in_env')
86+
sched.get_agents_in_env.return_value = agents_in_env
87+
88+
sched.rebind_loadbalancers = mock.MagicMock(name='rebind_loadbalancers')
89+
90+
mock_plugin = mock.MagicMock(name='plugin')
91+
mock_plugin.db.get_agent_hosting_loadbalancer.return_value = {
92+
'agent': agents_in_env[0]}
93+
94+
agent_dict = sched.get_lbaas_agent_hosting_loadbalancer(
95+
mock_plugin, context, loadbalancer_id, 'test')
96+
97+
assert agent_dict['agent'] == agents_in_env[0]
98+
assert not sched.rebind_loadbalancers.called
99+
100+
101+
def test_get_lbaas_agent_hosting_loadbalancer_agent_down(agents_in_env):
102+
103+
context = mock.MagicMock()
104+
loadbalancer_id = 'uuid_1234'
105+
106+
sched = agent_scheduler.TenantScheduler()
107+
sched.get_agents_in_env = mock.MagicMock(name='get_agents_in_env')
108+
sched.get_agents_in_env.return_value = agents_in_env
109+
110+
sched.rebind_loadbalancers = mock.MagicMock(name='rebind_loadbalancers')
111+
sched.rebind_loadbalancers.return_value = agents_in_env[0]
112+
113+
mock_plugin = mock.MagicMock(name='plugin')
114+
mock_plugin.db.get_agent_hosting_loadbalancer.return_value = {
115+
'agent': agents_in_env[3]}
116+
117+
agent_dict = sched.get_lbaas_agent_hosting_loadbalancer(
118+
mock_plugin, context, loadbalancer_id, 'test')
119+
120+
assert agent_dict['agent'] == agents_in_env[0]
121+
122+
123+
def test_get_lbaas_agent_hosting_loadbalancer_agent_dead(agents_in_env):
124+
125+
context = mock.MagicMock()
126+
loadbalancer_id = 'uuid_1234'
127+
128+
sched = agent_scheduler.TenantScheduler()
129+
sched.get_agents_in_env = mock.MagicMock(name='get_agents_in_env')
130+
sched.get_agents_in_env.return_value = agents_in_env
131+
132+
sched.rebind_loadbalancers = mock.MagicMock(name='rebind_loadbalancers')
133+
sched.rebind_loadbalancers.return_value = agents_in_env[0]
134+
135+
mock_plugin = mock.MagicMock(name='plugin')
136+
mock_plugin.db.get_agent_hosting_loadbalancer.return_value = {
137+
'agent': agents_in_env[2]}
138+
139+
agent_dict = sched.get_lbaas_agent_hosting_loadbalancer(
140+
mock_plugin, context, loadbalancer_id, 'test')
141+
142+
assert agent_dict['agent'] == agents_in_env[0]
143+
144+
47145
def test_schedule():
48146

49147
plugin = mock.MagicMock()
@@ -55,25 +153,39 @@ def test_schedule():
55153
assert agent
56154

57155

58-
def test_rebind_loadbalancers():
156+
def test_rebind_loadbalancers_no_agents(agents_in_env):
157+
158+
plugin = mock.MagicMock()
159+
context = mock.MagicMock()
160+
sched = agent_scheduler.TenantScheduler()
161+
sched.get_agents_in_env = mock.MagicMock(name='get_agents_in_env')
162+
sched.get_agents_in_env.return_value = []
163+
return_all = [type('test', (), {})()]
164+
context.session.query.all = mock.MagicMock(name='all',
165+
return_value=return_all)
166+
context.session.add = mock.MagicMock(name='add', return_value=None)
167+
result = sched.rebind_loadbalancers(context, plugin, 'prod',
168+
2, agents_in_env[0])
169+
assert result is None
170+
171+
172+
def test_rebind_loadbalancers(agents_in_env):
59173

60174
plugin = mock.MagicMock()
61175
context = mock.MagicMock()
62176
sched = agent_scheduler.TenantScheduler()
63177
sched.get_agents_in_env = mock.MagicMock(name='get_agents_in_env')
64-
agents_in_env = [{'id': 'test_agent_2_id',
65-
'alive': True,
66-
'admin_state_up': True,
67-
'configurations': {
68-
'environment_prefix': 'prod',
69-
'environment_group_number': 2}}]
70178
sched.get_agents_in_env.return_value = agents_in_env
179+
71180
return_all = [type('test', (), {})()]
72181
context.session.query.all = mock.MagicMock(name='all',
73182
return_value=return_all)
74183
context.session.add = mock.MagicMock(name='add', return_value=None)
75-
sched.rebind_loadbalancers(context, plugin, 'prod',
76-
2, agents_in_env[0])
184+
185+
result = sched.rebind_loadbalancers(context, plugin, 'prod',
186+
2, agents_in_env[0])
187+
188+
assert result == agents_in_env[0]
77189

78190

79191
def test_get_lbaas_agent_hosting_loadbalancer_none():
@@ -133,7 +245,7 @@ def test_schedule_get_active_agent():
133245
assert agent['id'] == 'test_agent_id'
134246

135247

136-
def test_get_lbaas_agent_hosting_loadbalancer_agent_dead():
248+
def test_get_lbaas_agent_hosting_loadbalancer_agent_dead_2():
137249
mock_plugin = mock.MagicMock(name='plugin')
138250
fake_agent = {
139251
'agent': {

0 commit comments

Comments
 (0)