Coverage for manila/tests/scheduler/fakes.py: 96%
63 statements
« prev ^ index » next coverage.py v7.11.0, created at 2026-02-18 22:19 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2026-02-18 22:19 +0000
1# Copyright 2011 OpenStack LLC.
2# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15"""
16Fakes For Scheduler tests.
17"""
19from oslo_utils import timeutils
21from manila.scheduler.drivers import filter
22from manila.scheduler import host_manager
23from manila.scheduler.weighers import base_host as base_host_weigher
26FAKE_AZ_1 = {'name': 'zone1', 'id': '24433438-c9b5-4cb5-a472-f78462aa5f31'}
27FAKE_AZ_2 = {'name': 'zone2', 'id': 'ebef050c-d20d-4c44-b272-1a0adce11cb5'}
28FAKE_AZ_3 = {'name': 'zone3', 'id': '18e7e6e2-39d6-466b-a706-2717bd1086e1'}
29FAKE_AZ_4 = {'name': 'zone4', 'id': '9ca40ee4-3c2a-4635-9a18-233cf6e0ad0b'}
30FAKE_AZ_5 = {'name': 'zone4', 'id': 'd76d921d-d6fa-41b4-a180-fb68952784bd'}
31FAKE_AZ_6 = {'name': 'zone4', 'id': 'bc09c3d6-671c-4d55-9f43-f00757aabc50'}
33SHARE_SERVICES_NO_POOLS = [
34 dict(id=1, host='host1', topic='share', disabled=False,
35 updated_at=timeutils.utcnow(), availability_zone_id=FAKE_AZ_1['id'],
36 availability_zone=FAKE_AZ_1),
37 dict(id=2, host='host2@back1', topic='share', disabled=False,
38 updated_at=timeutils.utcnow(), availability_zone_id=FAKE_AZ_2['id'],
39 availability_zone=FAKE_AZ_2),
40 dict(id=3, host='host2@back2', topic='share', disabled=False,
41 updated_at=timeutils.utcnow(), availability_zone_id=FAKE_AZ_3['id'],
42 availability_zone=FAKE_AZ_3),
43]
45SERVICE_STATES_NO_POOLS = {
46 'host1': dict(share_backend_name='AAA',
47 total_capacity_gb=512, free_capacity_gb=200,
48 timestamp=None, reserved_percentage=0,
49 reserved_snapshot_percentage=0,
50 reserved_share_extend_percentage=0,
51 provisioned_capacity_gb=312,
52 max_over_subscription_ratio=1.0,
53 thin_provisioning=False,
54 snapshot_support=False,
55 create_share_from_snapshot_support=False,
56 revert_to_snapshot_support=True,
57 mount_snapshot_support=True,
58 driver_handles_share_servers=False,
59 mount_point_name_support=False),
60 'host2@back1': dict(share_backend_name='BBB',
61 total_capacity_gb=256, free_capacity_gb=100,
62 timestamp=None, reserved_percentage=0,
63 reserved_snapshot_percentage=0,
64 reserved_share_extend_percentage=0,
65 provisioned_capacity_gb=400,
66 max_over_subscription_ratio=2.0,
67 thin_provisioning=True,
68 snapshot_support=True,
69 create_share_from_snapshot_support=True,
70 revert_to_snapshot_support=False,
71 mount_snapshot_support=False,
72 driver_handles_share_servers=False,
73 mount_point_name_support=False),
74 'host2@back2': dict(share_backend_name='CCC',
75 total_capacity_gb=10000, free_capacity_gb=700,
76 timestamp=None, reserved_percentage=0,
77 reserved_snapshot_percentage=0,
78 reserved_share_extend_percentage=0,
79 provisioned_capacity_gb=50000,
80 max_over_subscription_ratio=20.0,
81 thin_provisioning=True,
82 snapshot_support=True,
83 create_share_from_snapshot_support=True,
84 revert_to_snapshot_support=False,
85 mount_snapshot_support=False,
86 driver_handles_share_servers=False,
87 mount_point_name_support=False),
88}
90SHARE_SERVICES_WITH_POOLS = [
91 dict(id=1, host='host1@AAA', topic='share', disabled=False,
92 updated_at=timeutils.utcnow(), availability_zone_id=FAKE_AZ_1['id'],
93 availability_zone=FAKE_AZ_1),
94 dict(id=2, host='host2@BBB', topic='share', disabled=False,
95 updated_at=timeutils.utcnow(), availability_zone_id=FAKE_AZ_2['id'],
96 availability_zone=FAKE_AZ_2),
97 dict(id=3, host='host3@CCC', topic='share', disabled=False,
98 updated_at=timeutils.utcnow(), availability_zone_id=FAKE_AZ_3['id'],
99 availability_zone=FAKE_AZ_3),
100 dict(id=4, host='host4@DDD', topic='share', disabled=False,
101 updated_at=timeutils.utcnow(), availability_zone_id=FAKE_AZ_4['id'],
102 availability_zone=FAKE_AZ_4),
103 # service on host5 is disabled
104 dict(id=5, host='host5@EEE', topic='share', disabled=True,
105 updated_at=timeutils.utcnow(), availability_zone_id=FAKE_AZ_5['id'],
106 availability_zone=FAKE_AZ_5),
107 dict(id=6, host='host6@FFF', topic='share', disabled=True,
108 updated_at=timeutils.utcnow(), availability_zone_id=FAKE_AZ_6['id'],
109 availability_zone=FAKE_AZ_6),
110]
112SHARE_SERVICE_STATES_WITH_POOLS = {
113 'host1@AAA': dict(share_backend_name='AAA',
114 timestamp=None, reserved_percentage=0,
115 reserved_snapshot_percentage=0,
116 reserved_share_extend_percentage=0,
117 driver_handles_share_servers=False,
118 snapshot_support=True,
119 create_share_from_snapshot_support=True,
120 revert_to_snapshot_support=True,
121 replication_type=None,
122 pools=[dict(pool_name='pool1',
123 total_capacity_gb=51,
124 free_capacity_gb=41,
125 reserved_percentage=0,
126 reserved_snapshot_percentage=0,
127 reserved_share_extend_percentage=0,
128 provisioned_capacity_gb=10,
129 max_over_subscription_ratio=1.0,
130 thin_provisioning=False,
131 mount_point_name_support=False,
132 )]),
133 'host2@BBB': dict(share_backend_name='BBB',
134 timestamp=None, reserved_percentage=0,
135 reserved_snapshot_percentage=0,
136 reserved_share_extend_percentage=0,
137 driver_handles_share_servers=False,
138 snapshot_support=True,
139 create_share_from_snapshot_support=True,
140 revert_to_snapshot_support=False,
141 replication_type=None,
142 pools=[dict(pool_name='pool2',
143 total_capacity_gb=52,
144 free_capacity_gb=42,
145 reserved_percentage=0,
146 reserved_snapshot_percentage=0,
147 reserved_share_extend_percentage=0,
148 provisioned_capacity_gb=60,
149 max_over_subscription_ratio=2.0,
150 thin_provisioning=True,
151 mount_point_name_support=False,
152 )]),
153 'host3@CCC': dict(share_backend_name='CCC',
154 timestamp=None, reserved_percentage=0,
155 reserved_snapshot_percentage=0,
156 reserved_share_extend_percentage=0,
157 driver_handles_share_servers=False,
158 snapshot_support=True,
159 create_share_from_snapshot_support=True,
160 revert_to_snapshot_support=False,
161 replication_type=None,
162 pools=[dict(pool_name='pool3',
163 total_capacity_gb=53,
164 free_capacity_gb=43,
165 reserved_percentage=0,
166 reserved_snapshot_percentage=0,
167 reserved_share_extend_percentage=0,
168 provisioned_capacity_gb=100,
169 max_over_subscription_ratio=20.0,
170 thin_provisioning=True,
171 mount_point_name_support=False,
172 )]),
173 'host4@DDD': dict(share_backend_name='DDD',
174 timestamp=None, reserved_percentage=0,
175 reserved_snapshot_percentage=0,
176 reserved_share_extend_percentage=0,
177 driver_handles_share_servers=False,
178 snapshot_support=True,
179 create_share_from_snapshot_support=True,
180 revert_to_snapshot_support=False,
181 replication_type=None,
182 pools=[dict(pool_name='pool4a',
183 total_capacity_gb=541,
184 free_capacity_gb=441,
185 reserved_percentage=0,
186 reserved_snapshot_percentage=0,
187 reserved_share_extend_percentage=0,
188 provisioned_capacity_gb=800,
189 max_over_subscription_ratio=2.0,
190 thin_provisioning=True,
191 mount_point_name_support=False,
192 ),
193 dict(pool_name='pool4b',
194 total_capacity_gb=542,
195 free_capacity_gb=442,
196 reserved_percentage=0,
197 reserved_snapshot_percentage=0,
198 reserved_share_extend_percentage=0,
199 provisioned_capacity_gb=2000,
200 max_over_subscription_ratio=10.0,
201 thin_provisioning=True,
202 mount_point_name_support=False,
203 )]),
204 'host5@EEE': dict(share_backend_name='EEE',
205 timestamp=None, reserved_percentage=0,
206 reserved_snapshot_percentage=0,
207 reserved_share_extend_percentage=0,
208 driver_handles_share_servers=False,
209 snapshot_support=True,
210 create_share_from_snapshot_support=True,
211 revert_to_snapshot_support=False,
212 replication_type=None,
213 pools=[dict(pool_name='pool5a',
214 total_capacity_gb=551,
215 free_capacity_gb=451,
216 reserved_percentage=0,
217 reserved_snapshot_percentage=0,
218 reserved_share_extend_percentage=0,
219 provisioned_capacity_gb=100,
220 max_over_subscription_ratio=1.0,
221 thin_provisioning=False,
222 mount_point_name_support=False,
223 ),
224 dict(pool_name='pool5b',
225 total_capacity_gb=552,
226 free_capacity_gb=452,
227 reserved_percentage=0,
228 reserved_snapshot_percentage=0,
229 reserved_share_extend_percentage=0,
230 provisioned_capacity_gb=100,
231 max_over_subscription_ratio=1.0,
232 thin_provisioning=False,
233 mount_point_name_support=False,
234 )]),
235 'host6@FFF': dict(share_backend_name='FFF',
236 timestamp=None, reserved_percentage=0,
237 reserved_snapshot_percentage=0,
238 reserved_share_extend_percentage=0,
239 driver_handles_share_servers=False,
240 snapshot_support=True,
241 create_share_from_snapshot_support=True,
242 revert_to_snapshot_support=False,
243 replication_type=None,
244 pools=[dict(pool_name='pool6a',
245 total_capacity_gb='unknown',
246 free_capacity_gb='unknown',
247 reserved_percentage=0,
248 reserved_snapshot_percentage=0,
249 reserved_share_extend_percentage=0,
250 provisioned_capacity_gb=100,
251 max_over_subscription_ratio=1.0,
252 thin_provisioning=False,
253 mount_point_name_support=False,
254 ),
255 dict(pool_name='pool6b',
256 total_capacity_gb='unknown',
257 free_capacity_gb='unknown',
258 reserved_percentage=0,
259 reserved_snapshot_percentage=0,
260 reserved_share_extend_percentage=0,
261 provisioned_capacity_gb=100,
262 max_over_subscription_ratio=1.0,
263 thin_provisioning=False,
264 mount_point_name_support=False,
265 )]),
266}
268FAKE_ACTIVE_IQ_WEIGHER_LIST = [
269 "fake_aggregate_1:fake_cluster_name1",
270 "fake_aggregate_2:fake_cluster_name2",
271 "fake_aggregate_3:fake_cluster_name3"
272]
274FAKE_ACTIVE_IQ_WEIGHER_AGGREGATES_RESPONSE = {
275 "records": [
276 {
277 "name": "fake_aggregate_1",
278 "key": "fake_key_1",
279 "cluster": {
280 "name": "fake_cluster_name1"
281 }
282 },
283 {
284 "name": "fake_aggregate_2",
285 "key": "fake_key_2",
286 "cluster": {
287 "name": "fake_cluster_name2"
288 }
289 },
290 {
291 "name": "fake_aggregate_3",
292 "key": "fake_key_3",
293 "cluster": {
294 "name": "fake_cluster_name3"
295 }
296 }
297 ]
298}
300FAKE_ACTIVE_IQ_WEIGHER_BALANCE_RESPONSE = [
301 {
302 "key": "fake_key_1",
303 "scores": {
304 "total_weighted_score": 10.0
305 }
306 },
307 {
308 "key": "fake_key_2",
309 "scores": {
310 "total_weighted_score": 20.0
311 }
312 }
313]
316class FakeHostManagerNetAppOnly(host_manager.HostManager):
317 def __init__(self):
318 super(FakeHostManagerNetAppOnly, self).__init__()
320 self.service_states = {
321 'host1': {
322 'total_capacity_gb': 1024,
323 'free_capacity_gb': 1024,
324 'allocated_capacity_gb': 0,
325 'thin_provisioning': False,
326 'reserved_percentage': 10,
327 'reserved_snapshot_percentage': 5,
328 'reserved_share_extend_percentage': 15,
329 'timestamp': None,
330 'snapshot_support': True,
331 'create_share_from_snapshot_support': True,
332 'replication_type': 'writable',
333 'replication_domain': 'endor',
334 'storage_protocol': 'NFS_CIFS',
335 'vendor_name': 'NetApp',
336 'netapp_cluster_name': 'cluster1',
337 },
338 'host2': {
339 'total_capacity_gb': 2048,
340 'free_capacity_gb': 300,
341 'allocated_capacity_gb': 1748,
342 'provisioned_capacity_gb': 1748,
343 'max_over_subscription_ratio': 2.0,
344 'thin_provisioning': True,
345 'reserved_percentage': 10,
346 'reserved_snapshot_percentage': 5,
347 'reserved_share_extend_percentage': 15,
348 'timestamp': None,
349 'snapshot_support': True,
350 'create_share_from_snapshot_support': True,
351 'replication_type': 'readable',
352 'replication_domain': 'kashyyyk',
353 'storage_protocol': 'NFS_CIFS',
354 'vendor_name': 'NetApp',
355 'netapp_cluster_name': 'cluster2',
356 },
357 'host3': {
358 'total_capacity_gb': 512,
359 'free_capacity_gb': 256,
360 'allocated_capacity_gb': 256,
361 'provisioned_capacity_gb': 256,
362 'max_over_subscription_ratio': 2.0,
363 'thin_provisioning': [False],
364 'reserved_percentage': 0,
365 'reserved_snapshot_percentage': 0,
366 'reserved_share_extend_percentage': 0,
367 'snapshot_support': True,
368 'create_share_from_snapshot_support': True,
369 'timestamp': None,
370 'storage_protocol': 'NFS_CIFS',
371 'vendor_name': 'NetApp',
372 'netapp_cluster_name': 'cluster3',
373 },
374 'host4': {
375 'total_capacity_gb': 2048,
376 'free_capacity_gb': 200,
377 'allocated_capacity_gb': 1848,
378 'provisioned_capacity_gb': 1848,
379 'max_over_subscription_ratio': 1.0,
380 'thin_provisioning': [True],
381 'reserved_percentage': 5,
382 'reserved_snapshot_percentage': 2,
383 'reserved_share_extend_percentage': 5,
384 'timestamp': None,
385 'snapshot_support': True,
386 'create_share_from_snapshot_support': True,
387 'replication_type': 'dr',
388 'replication_domain': 'naboo',
389 'storage_protocol': 'NFS_CIFS',
390 'vendor_name': 'NetApp',
391 'netapp_cluster_name': 'cluster4',
392 },
393 'host5': {
394 'total_capacity_gb': 2048,
395 'free_capacity_gb': 500,
396 'allocated_capacity_gb': 1548,
397 'provisioned_capacity_gb': 1548,
398 'max_over_subscription_ratio': 1.5,
399 'thin_provisioning': [True, False],
400 'reserved_percentage': 5,
401 'reserved_snapshot_percentage': 2,
402 'reserved_share_extend_percentage': 5,
403 'timestamp': None,
404 'snapshot_support': True,
405 'create_share_from_snapshot_support': True,
406 'replication_type': None,
407 'storage_protocol': 'NFS_CIFS',
408 'vendor_name': 'NetApp',
409 'netapp_cluster_name': 'cluster5',
410 },
411 'host6': {
412 'total_capacity_gb': 'unknown',
413 'free_capacity_gb': 'unknown',
414 'allocated_capacity_gb': 1548,
415 'thin_provisioning': False,
416 'reserved_percentage': 5,
417 'reserved_snapshot_percentage': 2,
418 'reserved_share_extend_percentage': 5,
419 'snapshot_support': True,
420 'create_share_from_snapshot_support': True,
421 'timestamp': None,
422 'storage_protocol': 'GLUSTERFS',
423 'vendor_name': 'NetApp',
424 'netapp_cluster_name': 'cluster6',
425 },
426 }
429class FakeFilterScheduler(filter.FilterScheduler):
430 def __init__(self, *args, **kwargs):
431 super(FakeFilterScheduler, self).__init__(*args, **kwargs)
432 self.host_manager = host_manager.HostManager()
435class FakeHostManager(host_manager.HostManager):
436 def __init__(self):
437 super(FakeHostManager, self).__init__()
439 self.service_states = {
440 'host1': {'total_capacity_gb': 1024,
441 'free_capacity_gb': 1024,
442 'allocated_capacity_gb': 0,
443 'thin_provisioning': False,
444 'reserved_percentage': 10,
445 'reserved_snapshot_percentage': 5,
446 'reserved_share_extend_percentage': 15,
447 'timestamp': None,
448 'snapshot_support': True,
449 'create_share_from_snapshot_support': True,
450 'replication_type': 'writable',
451 'replication_domain': 'endor',
452 'storage_protocol': 'NFS_CIFS',
453 'vendor_name': 'Dummy',
454 },
455 'host2': {'total_capacity_gb': 2048,
456 'free_capacity_gb': 300,
457 'allocated_capacity_gb': 1748,
458 'provisioned_capacity_gb': 1748,
459 'max_over_subscription_ratio': 2.0,
460 'thin_provisioning': True,
461 'reserved_percentage': 10,
462 'reserved_snapshot_percentage': 5,
463 'reserved_share_extend_percentage': 15,
464 'timestamp': None,
465 'snapshot_support': True,
466 'create_share_from_snapshot_support': True,
467 'replication_type': 'readable',
468 'replication_domain': 'kashyyyk',
469 'storage_protocol': 'NFS_CIFS',
470 'vendor_name': 'Dummy',
471 },
472 'host3': {'total_capacity_gb': 512,
473 'free_capacity_gb': 256,
474 'allocated_capacity_gb': 256,
475 'provisioned_capacity_gb': 256,
476 'max_over_subscription_ratio': 2.0,
477 'thin_provisioning': [False],
478 'reserved_percentage': 0,
479 'reserved_snapshot_percentage': 0,
480 'reserved_share_extend_percentage': 0,
481 'snapshot_support': True,
482 'create_share_from_snapshot_support': True,
483 'timestamp': None,
484 'storage_protocol': 'NFS_CIFS',
485 'vendor_name': 'Dummy',
486 },
487 'host4': {'total_capacity_gb': 2048,
488 'free_capacity_gb': 200,
489 'allocated_capacity_gb': 1848,
490 'provisioned_capacity_gb': 1848,
491 'max_over_subscription_ratio': 1.0,
492 'thin_provisioning': [True],
493 'reserved_percentage': 5,
494 'reserved_snapshot_percentage': 2,
495 'reserved_share_extend_percentage': 5,
496 'timestamp': None,
497 'snapshot_support': True,
498 'create_share_from_snapshot_support': True,
499 'replication_type': 'dr',
500 'replication_domain': 'naboo',
501 'storage_protocol': 'NFS_CIFS',
502 'vendor_name': 'Dummy',
503 },
504 'host5': {'total_capacity_gb': 2048,
505 'free_capacity_gb': 500,
506 'allocated_capacity_gb': 1548,
507 'provisioned_capacity_gb': 1548,
508 'max_over_subscription_ratio': 1.5,
509 'thin_provisioning': [True, False],
510 'reserved_percentage': 5,
511 'reserved_snapshot_percentage': 2,
512 'reserved_share_extend_percentage': 5,
513 'timestamp': None,
514 'snapshot_support': True,
515 'create_share_from_snapshot_support': True,
516 'replication_type': None,
517 'storage_protocol': 'NFS_CIFS',
518 'vendor_name': 'Dummy',
519 },
520 'host6': {'total_capacity_gb': 'unknown',
521 'free_capacity_gb': 'unknown',
522 'allocated_capacity_gb': 1548,
523 'thin_provisioning': False,
524 'reserved_percentage': 5,
525 'reserved_snapshot_percentage': 2,
526 'reserved_share_extend_percentage': 5,
527 'snapshot_support': True,
528 'create_share_from_snapshot_support': True,
529 'timestamp': None,
530 'storage_protocol': 'GLUSTERFS',
531 'vendor_name': 'Dummy',
532 },
533 'host7': {'total_capacity_gb': 'unknown',
534 'free_capacity_gb': 'unknown',
535 'allocated_capacity_gb': 1548,
536 'thin_provisioning': False,
537 'reserved_percentage': 5,
538 'reserved_snapshot_percentage': 2,
539 'reserved_share_extend_percentage': 5,
540 'snapshot_support': True,
541 'create_share_from_snapshot_support': True,
542 'timestamp': None,
543 'storage_protocol': 'NFS_CIFS',
544 'vendor_name': 'Dummy',
545 },
546 }
549class FakeHostState(host_manager.HostState):
550 def __init__(self, host, attribute_dict):
551 super(FakeHostState, self).__init__(host)
552 for (key, val) in attribute_dict.items():
553 setattr(self, key, val)
556FAKE_HOST_STRING_1 = 'openstack@BackendA#PoolX'
557FAKE_HOST_STRING_2 = 'openstack@BackendB#PoolY'
558FAKE_HOST_STRING_3 = 'openstack@BackendC#PoolZ'
561def mock_host_manager_db_calls(mock_obj, disabled=None):
562 services = [
563 dict(id=1, host='host1', topic='share', disabled=False,
564 availability_zone=FAKE_AZ_1, availability_zone_id=FAKE_AZ_1['id'],
565 updated_at=timeutils.utcnow()),
566 dict(id=2, host='host2', topic='share', disabled=False,
567 availability_zone=FAKE_AZ_1, availability_zone_id=FAKE_AZ_1['id'],
568 updated_at=timeutils.utcnow()),
569 dict(id=3, host='host3', topic='share', disabled=False,
570 availability_zone=FAKE_AZ_2, availability_zone_id=FAKE_AZ_2['id'],
571 updated_at=timeutils.utcnow()),
572 dict(id=4, host='host4', topic='share', disabled=False,
573 availability_zone=FAKE_AZ_3, availability_zone_id=FAKE_AZ_3['id'],
574 updated_at=timeutils.utcnow()),
575 dict(id=5, host='host5', topic='share', disabled=False,
576 availability_zone=FAKE_AZ_3, availability_zone_id=FAKE_AZ_3['id'],
577 updated_at=timeutils.utcnow()),
578 dict(id=6, host='host6', topic='share', disabled=False,
579 availability_zone=FAKE_AZ_4, availability_zone_id=FAKE_AZ_4['id'],
580 updated_at=timeutils.utcnow()),
581 dict(id=7, host='host7', topic='share', disabled=True,
582 availability_zone=FAKE_AZ_4, availability_zone_id=FAKE_AZ_4['id'],
583 updated_at=timeutils.utcnow()),
584 ]
585 if disabled is None:
586 mock_obj.return_value = services
587 else:
588 mock_obj.return_value = [service for service in services
589 if service['disabled'] == disabled]
592class FakeWeigher1(base_host_weigher.BaseHostWeigher):
593 def __init__(self):
594 pass
597class FakeWeigher2(base_host_weigher.BaseHostWeigher):
598 def __init__(self):
599 pass
602class FakeClass(object):
603 def __init__(self):
604 pass
607def fake_replica_request_spec(**kwargs):
608 request_spec = {
609 'share_properties': {
610 'id': 'f0e4bb5e-65f0-11e5-9d70-feff819cdc9f',
611 'name': 'fakename',
612 'size': 1,
613 'share_network_id': '4ccd5318-65f1-11e5-9d70-feff819cdc9f',
614 'availability_zone': 'fake_az',
615 'replication_type': 'dr',
616 },
617 'share_instance_properties': {
618 'id': '8d5566df-1e83-4373-84b8-6f8153a0ac41',
619 'share_id': 'f0e4bb5e-65f0-11e5-9d70-feff819cdc9f',
620 'host': 'openstack@BackendZ#PoolA',
621 'status': 'available',
622 'availability_zone_id': 'f6e146d0-65f0-11e5-9d70-feff819cdc9f',
623 'share_network_id': '4ccd5318-65f1-11e5-9d70-feff819cdc9f',
624 'share_server_id': '53099868-65f1-11e5-9d70-feff819cdc9f',
625 },
626 'share_proto': 'nfs',
627 'share_id': 'f0e4bb5e-65f0-11e5-9d70-feff819cdc9f',
628 'snapshot_id': None,
629 'share_type': 'fake_share_type',
630 'share_group': None,
631 }
632 request_spec.update(kwargs)
633 return request_spec
636def get_fake_host(host_name=None):
638 class FakeHost(object):
639 def __init__(self, host_name=None):
640 self.host = host_name or 'openstack@BackendZ#PoolA'
642 class FakeWeightedHost(object):
643 def __init__(self, host_name=None):
644 self.obj = FakeHost(host_name=host_name)
646 return FakeWeightedHost(host_name=host_name)