@@ -29,6 +29,7 @@ class TestUtils(test.NoDBTestCase):
29
29
def setUp (self ):
30
30
super (TestUtils , self ).setUp ()
31
31
self .context = nova_context .get_admin_context ()
32
+ self .mock_host_manager = mock .Mock ()
32
33
33
34
def assertResourceRequestsEqual (self , expected , observed ):
34
35
self .assertEqual (expected ._limit , observed ._limit )
@@ -54,7 +55,8 @@ def _get_image_with_traits():
54
55
def _test_resources_from_request_spec (self , expected , flavor ,
55
56
image = objects .ImageMeta ()):
56
57
fake_spec = objects .RequestSpec (flavor = flavor , image = image )
57
- resources = utils .resources_from_request_spec (fake_spec )
58
+ resources = utils .resources_from_request_spec (
59
+ self .context , fake_spec , self .mock_host_manager )
58
60
self .assertResourceRequestsEqual (expected , resources )
59
61
return resources
60
62
@@ -232,7 +234,8 @@ def test_get_resources_from_request_spec_bad_std_resource_class(self):
232
234
"resources:DOESNT_EXIST" : 0 })
233
235
fake_spec = objects .RequestSpec (flavor = flavor )
234
236
with mock .patch ("nova.scheduler.utils.LOG.warning" ) as mock_log :
235
- utils .resources_from_request_spec (fake_spec )
237
+ utils .resources_from_request_spec (
238
+ self .context , fake_spec , self .mock_host_manager )
236
239
mock_log .assert_called_once ()
237
240
args = mock_log .call_args [0 ]
238
241
self .assertEqual (args [0 ], "Received an invalid ResourceClass "
@@ -321,12 +324,14 @@ def test_resources_from_request_spec_aggregates(self):
321
324
requested_destination = destination )
322
325
323
326
destination .require_aggregates (['foo' , 'bar' ])
324
- req = utils .resources_from_request_spec (reqspec )
327
+ req = utils .resources_from_request_spec (
328
+ self .context , reqspec , self .mock_host_manager )
325
329
self .assertEqual ([['foo' , 'bar' ]],
326
330
req .get_request_group (None ).aggregates )
327
331
328
332
destination .require_aggregates (['baz' ])
329
- req = utils .resources_from_request_spec (reqspec )
333
+ req = utils .resources_from_request_spec (
334
+ self .context , reqspec , self .mock_host_manager )
330
335
self .assertEqual ([['foo' , 'bar' ], ['baz' ]],
331
336
req .get_request_group (None ).aggregates )
332
337
@@ -336,19 +341,23 @@ def test_resources_from_request_spec_no_aggregates(self):
336
341
swap = 0 )
337
342
reqspec = objects .RequestSpec (flavor = flavor )
338
343
339
- req = utils .resources_from_request_spec (reqspec )
344
+ req = utils .resources_from_request_spec (
345
+ self .context , reqspec , self .mock_host_manager )
340
346
self .assertEqual ([], req .get_request_group (None ).aggregates )
341
347
342
348
reqspec .requested_destination = None
343
- req = utils .resources_from_request_spec (reqspec )
349
+ req = utils .resources_from_request_spec (
350
+ self .context , reqspec , self .mock_host_manager )
344
351
self .assertEqual ([], req .get_request_group (None ).aggregates )
345
352
346
353
reqspec .requested_destination = objects .Destination ()
347
- req = utils .resources_from_request_spec (reqspec )
354
+ req = utils .resources_from_request_spec (
355
+ self .context , reqspec , self .mock_host_manager )
348
356
self .assertEqual ([], req .get_request_group (None ).aggregates )
349
357
350
358
reqspec .requested_destination .aggregates = None
351
- req = utils .resources_from_request_spec (reqspec )
359
+ req = utils .resources_from_request_spec (
360
+ self .context , reqspec , self .mock_host_manager )
352
361
self .assertEqual ([], req .get_request_group (None ).aggregates )
353
362
354
363
@mock .patch ("nova.scheduler.utils.ResourceRequest.from_extra_specs" )
@@ -360,7 +369,8 @@ def test_process_extra_specs_granular_called(self, mock_proc):
360
369
swap = 0 ,
361
370
extra_specs = {"resources:CUSTOM_TEST_CLASS" : 1 })
362
371
fake_spec = objects .RequestSpec (flavor = flavor )
363
- utils .resources_from_request_spec (fake_spec )
372
+ utils .resources_from_request_spec (
373
+ self .context , fake_spec , self .mock_host_manager )
364
374
mock_proc .assert_called_once ()
365
375
366
376
@mock .patch ("nova.scheduler.utils.ResourceRequest.from_extra_specs" )
@@ -371,7 +381,8 @@ def test_process_extra_specs_granular_not_called(self, mock_proc):
371
381
ephemeral_gb = 5 ,
372
382
swap = 0 )
373
383
fake_spec = objects .RequestSpec (flavor = flavor )
374
- utils .resources_from_request_spec (fake_spec )
384
+ utils .resources_from_request_spec (
385
+ self .context , fake_spec , self .mock_host_manager )
375
386
mock_proc .assert_not_called ()
376
387
377
388
def test_process_missing_extra_specs_value (self ):
@@ -383,7 +394,8 @@ def test_process_missing_extra_specs_value(self):
383
394
swap = 0 ,
384
395
extra_specs = {"resources:CUSTOM_TEST_CLASS" : "" })
385
396
fake_spec = objects .RequestSpec (flavor = flavor )
386
- utils .resources_from_request_spec (fake_spec )
397
+ utils .resources_from_request_spec (
398
+ self .context , fake_spec , self .mock_host_manager )
387
399
388
400
def test_process_no_force_hosts_or_force_nodes (self ):
389
401
flavor = objects .Flavor (vcpus = 1 ,
@@ -408,6 +420,11 @@ def test_process_no_force_hosts_or_force_nodes(self):
408
420
self .assertEqual (expected_querystring , rr .to_querystring ())
409
421
410
422
def test_process_use_force_nodes (self ):
423
+ fake_nodes = objects .ComputeNodeList (objects = [
424
+ objects .ComputeNode (host = 'fake-host' ,
425
+ uuid = '12345678-1234-1234-1234-123456789012' )])
426
+ self .mock_host_manager .get_compute_nodes_by_host_or_node .\
427
+ return_value = fake_nodes
411
428
flavor = objects .Flavor (vcpus = 1 ,
412
429
memory_mb = 1024 ,
413
430
root_gb = 15 ,
@@ -422,16 +439,24 @@ def test_process_use_force_nodes(self):
422
439
'MEMORY_MB' : 1024 ,
423
440
'DISK_GB' : 15 ,
424
441
},
442
+ in_tree = '12345678-1234-1234-1234-123456789012' ,
425
443
)
426
- expected . _limit = None
427
- resources = utils . resources_from_request_spec ( fake_spec )
444
+ resources = utils . resources_from_request_spec (
445
+ self . context , fake_spec , self . mock_host_manager )
428
446
self .assertResourceRequestsEqual (expected , resources )
429
447
expected_querystring = (
430
- 'resources=DISK_GB%3A15%2CMEMORY_MB%3A1024%2CVCPU%3A1'
431
- )
448
+ 'limit=1000&resources=DISK_GB%3A15%2CMEMORY_MB%3A1024%2CVCPU%3A1' )
432
449
self .assertEqual (expected_querystring , resources .to_querystring ())
450
+ self .mock_host_manager .get_compute_nodes_by_host_or_node .\
451
+ assert_called_once_with (self .context , None , 'test' , cell = None )
433
452
434
453
def test_process_use_force_hosts (self ):
454
+ fake_nodes = objects .ComputeNodeList (objects = [
455
+ objects .ComputeNode (host = 'fake-host' ,
456
+ uuid = '12345678-1234-1234-1234-123456789012' )
457
+ ])
458
+ self .mock_host_manager .get_compute_nodes_by_host_or_node .\
459
+ return_value = fake_nodes
435
460
flavor = objects .Flavor (vcpus = 1 ,
436
461
memory_mb = 1024 ,
437
462
root_gb = 15 ,
@@ -446,14 +471,90 @@ def test_process_use_force_hosts(self):
446
471
'MEMORY_MB' : 1024 ,
447
472
'DISK_GB' : 15 ,
448
473
},
474
+ in_tree = '12345678-1234-1234-1234-123456789012' ,
449
475
)
476
+ resources = utils .resources_from_request_spec (
477
+ self .context , fake_spec , self .mock_host_manager )
478
+ self .assertResourceRequestsEqual (expected , resources )
479
+ expected_querystring = (
480
+ 'limit=1000&resources=DISK_GB%3A15%2CMEMORY_MB%3A1024%2CVCPU%3A1' )
481
+ self .assertEqual (expected_querystring , resources .to_querystring ())
482
+ self .mock_host_manager .get_compute_nodes_by_host_or_node .\
483
+ assert_called_once_with (self .context , 'test' , None , cell = None )
484
+
485
+ def test_process_use_force_hosts_multinodes_found (self ):
486
+ fake_nodes = objects .ComputeNodeList (objects = [
487
+ objects .ComputeNode (host = 'fake-host' ,
488
+ uuid = '12345678-1234-1234-1234-123456789012' ),
489
+ objects .ComputeNode (host = 'fake-host' ,
490
+ uuid = '87654321-4321-4321-4321-210987654321' ),
491
+ ])
492
+ self .mock_host_manager .get_compute_nodes_by_host_or_node .\
493
+ return_value = fake_nodes
494
+ flavor = objects .Flavor (vcpus = 1 ,
495
+ memory_mb = 1024 ,
496
+ root_gb = 15 ,
497
+ ephemeral_gb = 0 ,
498
+ swap = 0 )
499
+ fake_spec = objects .RequestSpec (flavor = flavor , force_hosts = ['test' ])
500
+ expected = utils .ResourceRequest ()
501
+ expected ._rg_by_id [None ] = objects .RequestGroup (
502
+ use_same_provider = False ,
503
+ resources = {
504
+ 'VCPU' : 1 ,
505
+ 'MEMORY_MB' : 1024 ,
506
+ 'DISK_GB' : 15 ,
507
+ },
508
+ )
509
+ # Validate that the limit is unset
450
510
expected ._limit = None
451
- resources = utils .resources_from_request_spec (fake_spec )
511
+
512
+ resources = utils .resources_from_request_spec (
513
+ self .context , fake_spec , self .mock_host_manager )
452
514
self .assertResourceRequestsEqual (expected , resources )
515
+ # Validate that the limit is unset
453
516
expected_querystring = (
454
- 'resources=DISK_GB%3A15%2CMEMORY_MB%3A1024%2CVCPU%3A1'
517
+ 'resources=DISK_GB%3A15%2CMEMORY_MB%3A1024%2CVCPU%3A1' )
518
+ self .assertEqual (expected_querystring , resources .to_querystring ())
519
+ self .mock_host_manager .get_compute_nodes_by_host_or_node .\
520
+ assert_called_once_with (self .context , 'test' , None , cell = None )
521
+
522
+ def test_process_use_requested_destination (self ):
523
+ fake_cell = objects .CellMapping (uuid = uuids .cell1 , name = 'foo' )
524
+ destination = objects .Destination (
525
+ host = 'fake-host' , node = 'fake-node' , cell = fake_cell )
526
+ fake_nodes = objects .ComputeNodeList (objects = [
527
+ objects .ComputeNode (host = 'fake-host' ,
528
+ uuid = '12345678-1234-1234-1234-123456789012' )
529
+ ])
530
+ self .mock_host_manager .get_compute_nodes_by_host_or_node .\
531
+ return_value = fake_nodes
532
+ flavor = objects .Flavor (vcpus = 1 ,
533
+ memory_mb = 1024 ,
534
+ root_gb = 15 ,
535
+ ephemeral_gb = 0 ,
536
+ swap = 0 )
537
+ fake_spec = objects .RequestSpec (
538
+ flavor = flavor , requested_destination = destination )
539
+ expected = utils .ResourceRequest ()
540
+ expected ._rg_by_id [None ] = objects .RequestGroup (
541
+ use_same_provider = False ,
542
+ resources = {
543
+ 'VCPU' : 1 ,
544
+ 'MEMORY_MB' : 1024 ,
545
+ 'DISK_GB' : 15 ,
546
+ },
547
+ in_tree = '12345678-1234-1234-1234-123456789012' ,
455
548
)
549
+ resources = utils .resources_from_request_spec (
550
+ self .context , fake_spec , self .mock_host_manager )
551
+ self .assertResourceRequestsEqual (expected , resources )
552
+ expected_querystring = (
553
+ 'limit=1000&resources=DISK_GB%3A15%2CMEMORY_MB%3A1024%2CVCPU%3A1' )
456
554
self .assertEqual (expected_querystring , resources .to_querystring ())
555
+ self .mock_host_manager .get_compute_nodes_by_host_or_node .\
556
+ assert_called_once_with (
557
+ self .context , 'fake-host' , 'fake-node' , cell = fake_cell )
457
558
458
559
def test_resources_from_request_spec_having_requested_resources (self ):
459
560
flavor = objects .Flavor (
@@ -466,7 +567,8 @@ def test_resources_from_request_spec_having_requested_resources(self):
466
567
rg2 = objects .RequestGroup ()
467
568
reqspec = objects .RequestSpec (flavor = flavor ,
468
569
requested_resources = [rg1 , rg2 ])
469
- req = utils .resources_from_request_spec (reqspec )
570
+ req = utils .resources_from_request_spec (
571
+ self .context , reqspec , self .mock_host_manager )
470
572
self .assertEqual ({'MEMORY_MB' : 1024 , 'DISK_GB' : 15 , 'VCPU' : 1 },
471
573
req .get_request_group (None ).resources )
472
574
self .assertIs (rg1 , req .get_request_group (1 ))
@@ -480,13 +582,15 @@ def test_resources_from_request_spec_requested_resources_unfilled(self):
480
582
ephemeral_gb = 5 ,
481
583
swap = 0 )
482
584
reqspec = objects .RequestSpec (flavor = flavor )
483
- req = utils .resources_from_request_spec (reqspec )
585
+ req = utils .resources_from_request_spec (
586
+ self .context , reqspec , self .mock_host_manager )
484
587
self .assertEqual ({'MEMORY_MB' : 1024 , 'DISK_GB' : 15 , 'VCPU' : 1 },
485
588
req .get_request_group (None ).resources )
486
589
self .assertEqual (1 , len (list (req .resource_groups ())))
487
590
488
591
reqspec = objects .RequestSpec (flavor = flavor , requested_resources = [])
489
- req = utils .resources_from_request_spec (reqspec )
592
+ req = utils .resources_from_request_spec (
593
+ self .context , reqspec , self .mock_host_manager )
490
594
self .assertEqual ({'MEMORY_MB' : 1024 , 'DISK_GB' : 15 , 'VCPU' : 1 },
491
595
req .get_request_group (None ).resources )
492
596
self .assertEqual (1 , len (list (req .resource_groups ())))
0 commit comments