2222from 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+
2557def 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+
47145def 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
79191def 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