Revision 6d6d5141 kamaki/clients/compute/test.py

b/kamaki/clients/compute/test.py
478 478
        FR.status_code = 200
479 479
        FR.json = vm_recv
480 480

  
481
    @patch(
482
        '%s.get_image_details' % compute_pkg,
483
        return_value=img_recv['image'])
484
    def test_create_server(self, GID):
481
    def test_create_server(self):
485 482
        with patch.object(
486 483
                compute.ComputeClient, 'servers_post',
487 484
                side_effect=ClientError(
......
492 489
                self.client.create_server,
493 490
                vm_name, fid, img_ref)
494 491

  
495
        with patch.object(
496
                compute.ComputeClient, 'servers_post',
497
                return_value=FR()) as post:
498
            r = self.client.create_server(vm_name, fid, img_ref)
499
            self.assertEqual(r, FR.json['server'])
500
            self.assertEqual(GID.mock_calls[-1], call(img_ref))
501
            self.assertEqual(post.mock_calls[-1], call(json_data=vm_send))
502
            prsn = 'Personality string (does not work with real servers)'
503
            self.client.create_server(vm_name, fid, img_ref, prsn)
504
            expected = dict(server=dict(vm_send['server']))
505
            expected['server']['personality'] = prsn
506
            self.assertEqual(post.mock_calls[-1], call(json_data=expected))
492
        for params in product(
493
                ('security_group', None),
494
                ('user_data', None),
495
                ('availability_zone', None),
496
                (None, {'os': 'debian', 'users': 'root'})):
497
            kwargs = dict()
498
            for i, k in enumerate((
499
                    'security_group', 'user_data', 'availability_zone')):
500
                if params[i]:
501
                    kwargs[k] = params[i]
502
            with patch.object(
503
                    compute.ComputeClient, 'servers_post',
504
                    return_value=FR()) as post:
505
                r = self.client.create_server(vm_name, fid, img_ref, **kwargs)
506
                self.assertEqual(r, FR.json['server'])
507
                exp_json = dict(server=dict(
508
                    flavorRef=fid, name=vm_name, imageRef=img_ref))
509
                for k in set([
510
                        'security_group',
511
                        'user_data',
512
                        'availability_zone']).difference(kwargs):
513
                    kwargs[k] = None
514
                self.assertEqual(
515
                    post.mock_calls[-1], call(json_data=exp_json, **kwargs))
516
                prsn = 'Personality string (does not work with real servers)'
517
                self.client.create_server(
518
                    vm_name, fid, img_ref, personality=prsn, **kwargs)
519
                exp_json['server']['personality'] = prsn
520
                self.assertEqual(
521
                    post.mock_calls[-1], call(json_data=exp_json, **kwargs))
522
                kwargs.pop('personality', None)
523
                exp_json['server'].pop('personality', None)
524
                mtdt = 'Metadata dict here'
525
                self.client.create_server(
526
                    vm_name, fid, img_ref, metadata=mtdt, **kwargs)
527
                exp_json['server']['metadata'] = mtdt
528
                self.assertEqual(
529
                    post.mock_calls[-1], call(json_data=exp_json, **kwargs))
507 530

  
508 531
    @patch('%s.servers_get' % compute_pkg, return_value=FR())
509 532
    def test_list_servers(self, SG):
510 533
        FR.json = vm_list
511
        for detail in (False, True):
512
            r = self.client.list_servers(detail)
513
            self.assertEqual(SG.mock_calls[-1], call(
514
                command='detail' if detail else ''))
534
        for args in product(
535
                (False, True),
536
                ({}, dict(status='status')),
537
                ({}, dict(name='name')),
538
                ({}, dict(image='image')),
539
                ({}, dict(flavor='flavor')),
540
                ({}, dict(host='host')),
541
                ({}, dict(limit='limit')),
542
                ({}, dict(marker='marker')),
543
                ({}, dict(changes_since='changes_since'))):
544
            detail = args[0]
545
            kwargs = dict()
546
            for param in args[1:]:
547
                kwargs.update(param)
548
            r = self.client.list_servers(detail, **kwargs)
549
            for k in set([
550
                    'status', 'name',
551
                    'image', 'flavor',
552
                    'host', 'limit',
553
                    'marker', 'changes_since']).difference(kwargs):
554
                kwargs[k] = None
555
            self.assertEqual(SG.mock_calls[-1], call(detail=detail, **kwargs))
515 556
            for i, vm in enumerate(vm_list['servers']):
516 557
                self.assert_dicts_are_equal(r[i], vm)
517 558
            self.assertEqual(i + 1, len(r))
......
519 560
    @patch('%s.servers_get' % compute_pkg, return_value=FR())
520 561
    def test_get_server_details(self, SG):
521 562
        vm_id = vm_recv['server']['id']
522
        r = self.client.get_server_details(vm_id)
523
        SG.assert_called_once_with(vm_id)
524
        self.assert_dicts_are_equal(r, vm_recv['server'])
563
        for args in product(
564
                ({}, dict(status='status')),
565
                ({}, dict(name='name')),
566
                ({}, dict(image='image')),
567
                ({}, dict(flavor='flavor')),
568
                ({}, dict(host='host')),
569
                ({}, dict(limit='limit')),
570
                ({}, dict(marker='marker')),
571
                ({}, dict(changes_since='changes_since'))):
572
            kwargs = dict()
573
            for param in args:
574
                kwargs.update(param)
575
            r = self.client.get_server_details(vm_id, **kwargs)
576
            for k in set([
577
                    'status', 'name',
578
                    'image', 'flavor',
579
                    'host', 'limit',
580
                    'marker', 'changes_since']).difference(kwargs):
581
                kwargs[k] = None
582
            self.assertEqual(SG.mock_calls[-1], call(vm_id, **kwargs))
583
            self.assert_dicts_are_equal(r, vm_recv['server'])
525 584

  
526 585
    @patch('%s.servers_put' % compute_pkg, return_value=FR())
527 586
    def test_update_server_name(self, SP):
......
531 590
        SP.assert_called_once_with(vm_id, json_data=dict(
532 591
            server=dict(name=new_name)))
533 592

  
534
    @patch('%s.servers_post' % compute_pkg, return_value=FR())
593
    @patch('%s.servers_action_post' % compute_pkg, return_value=FR())
535 594
    def test_reboot_server(self, SP):
536 595
        vm_id = vm_recv['server']['id']
537 596
        for hard in (None, True):
538 597
            self.client.reboot_server(vm_id, hard=hard)
539
            self.assertEqual(SP.mock_calls[-1], call(
540
                vm_id, 'action',
541
                json_data=dict(reboot=dict(type='HARD' if hard else 'SOFT'))))
598
            self.assertEqual(SP.mock_calls[-1], call(vm_id, json_data=dict(
599
                reboot=dict(type='HARD' if hard else 'SOFT'))))
542 600

  
543
    @patch('%s.servers_post' % compute_pkg, return_value=FR())
601
    @patch('%s.servers_action_post' % compute_pkg, return_value=FR())
544 602
    def test_resize_server(self, SP):
545 603
        vm_id, flavor = vm_recv['server']['id'], flavor_list['flavors'][1]
546 604
        self.client.resize_server(vm_id, flavor['id'])
547 605
        exp = dict(resize=dict(flavorRef=flavor['id']))
548
        SP.assert_called_once_with(vm_id, 'action', json_data=exp)
606
        SP.assert_called_once_with(vm_id, json_data=exp)
549 607

  
550
    @patch('%s.servers_put' % compute_pkg, return_value=FR())
608
    @patch('%s.servers_metadata_put' % compute_pkg, return_value=FR())
551 609
    def test_create_server_metadata(self, SP):
552 610
        vm_id = vm_recv['server']['id']
553 611
        metadata = dict(m1='v1', m2='v2', m3='v3')
......
556 614
            r = self.client.create_server_metadata(vm_id, k, v)
557 615
            self.assert_dicts_are_equal(r, vm_recv['server'])
558 616
            self.assertEqual(SP.mock_calls[-1], call(
559
                vm_id, 'metadata/%s' % k,
617
                vm_id, '%s' % k,
560 618
                json_data=dict(meta={k: v}), success=201))
561 619

  
562
    @patch('%s.servers_get' % compute_pkg, return_value=FR())
620
    @patch('%s.servers_metadata_get' % compute_pkg, return_value=FR())
563 621
    def test_get_server_metadata(self, SG):
564 622
        vm_id = vm_recv['server']['id']
565 623
        metadata = dict(m1='v1', m2='v2', m3='v3')
566 624
        FR.json = dict(metadata=metadata)
567 625
        r = self.client.get_server_metadata(vm_id)
568 626
        FR.json = dict(meta=metadata)
569
        SG.assert_called_once_with(vm_id, '/metadata')
627
        SG.assert_called_once_with(vm_id, '')
570 628
        self.assert_dicts_are_equal(r, metadata)
571 629

  
572 630
        for k, v in metadata.items():
......
574 632
            r = self.client.get_server_metadata(vm_id, k)
575 633
            self.assert_dicts_are_equal(r, {k: v})
576 634
            self.assertEqual(
577
                SG.mock_calls[-1], call(vm_id, '/metadata/%s' % k))
635
                SG.mock_calls[-1], call(vm_id, '%s' % k))
578 636

  
579
    @patch('%s.servers_post' % compute_pkg, return_value=FR())
637
    @patch('%s.servers_metadata_post' % compute_pkg, return_value=FR())
580 638
    def test_update_server_metadata(self, SP):
581 639
        vm_id = vm_recv['server']['id']
582 640
        metadata = dict(m1='v1', m2='v2', m3='v3')
......
584 642
        r = self.client.update_server_metadata(vm_id, **metadata)
585 643
        self.assert_dicts_are_equal(r, metadata)
586 644
        SP.assert_called_once_with(
587
            vm_id, 'metadata',
588
            json_data=dict(metadata=metadata), success=201)
645
            vm_id, json_data=dict(metadata=metadata), success=201)
589 646

  
590
    @patch('%s.servers_delete' % compute_pkg, return_value=FR())
647
    @patch('%s.servers_metadata_delete' % compute_pkg, return_value=FR())
591 648
    def test_delete_server_metadata(self, SD):
592 649
        vm_id = vm_recv['server']['id']
593 650
        key = 'metakey'
594 651
        self.client.delete_server_metadata(vm_id, key)
595
        SD.assert_called_once_with(vm_id, 'metadata/' + key)
652
        SD.assert_called_once_with(vm_id, key)
596 653

  
597 654
    @patch('%s.flavors_get' % compute_pkg, return_value=FR())
598 655
    def test_list_flavors(self, FG):
599 656
        FR.json = flavor_list
600
        for cmd in ('', 'detail'):
601
            r = self.client.list_flavors(detail=(cmd == 'detail'))
602
            self.assertEqual(FG.mock_calls[-1], call(command=cmd))
657
        for detail in ('', 'detail'):
658
            r = self.client.list_flavors(detail=bool(detail))
659
            self.assertEqual(FG.mock_calls[-1], call(detail=bool(detail)))
603 660
            self.assertEqual(r, flavor_list['flavors'])
604 661

  
605 662
    @patch('%s.flavors_get' % compute_pkg, return_value=FR())
......
612 669
    @patch('%s.images_get' % compute_pkg, return_value=FR())
613 670
    def test_list_images(self, IG):
614 671
        FR.json = img_list
615
        for cmd in ('', 'detail'):
616
            r = self.client.list_images(detail=(cmd == 'detail'))
617
            self.assertEqual(IG.mock_calls[-1], call(command=cmd))
672
        for detail in ('', 'detail'):
673
            r = self.client.list_images(detail=detail)
674
            self.assertEqual(IG.mock_calls[-1], call(detail=bool(detail)))
618 675
            expected = img_list['images']
619 676
            for i in range(len(r)):
620 677
                self.assert_dicts_are_equal(expected[i], r[i])
......
626 683
        IG.assert_called_once_with(img_ref)
627 684
        self.assert_dicts_are_equal(r, img_recv['image'])
628 685

  
629
    @patch('%s.images_get' % compute_pkg, return_value=FR())
686
    @patch('%s.images_metadata_get' % compute_pkg, return_value=FR())
630 687
    def test_get_image_metadata(self, IG):
631 688
        for key in ('', '50m3k3y'):
632 689
            FR.json = dict(meta=img_recv['image']) if (
633 690
                key) else dict(metadata=img_recv['image'])
634 691
            r = self.client.get_image_metadata(img_ref, key)
635
            self.assertEqual(IG.mock_calls[-1], call(
636
                '%s' % img_ref,
637
                '/metadata%s' % (('/%s' % key) if key else '')))
692
            self.assertEqual(IG.mock_calls[-1], call(img_ref, key or ''))
638 693
            self.assert_dicts_are_equal(img_recv['image'], r)
639 694

  
640 695
    @patch('%s.servers_delete' % compute_pkg, return_value=FR())
......
648 703
        self.client.delete_image(img_ref)
649 704
        ID.assert_called_once_with(img_ref)
650 705

  
651
    @patch('%s.images_put' % compute_pkg, return_value=FR())
706
    @patch('%s.images_metadata_put' % compute_pkg, return_value=FR())
652 707
    def test_create_image_metadata(self, IP):
653 708
        (key, val) = ('k1', 'v1')
654 709
        FR.json = dict(meta=img_recv['image'])
655 710
        r = self.client.create_image_metadata(img_ref, key, val)
656 711
        IP.assert_called_once_with(
657
            img_ref, 'metadata/%s' % key,
712
            img_ref, '%s' % key,
658 713
            json_data=dict(meta={key: val}))
659 714
        self.assert_dicts_are_equal(r, img_recv['image'])
660 715

  
661
    @patch('%s.images_post' % compute_pkg, return_value=FR())
716
    @patch('%s.images_metadata_post' % compute_pkg, return_value=FR())
662 717
    def test_update_image_metadata(self, IP):
663 718
        metadata = dict(m1='v1', m2='v2', m3='v3')
664 719
        FR.json = dict(metadata=metadata)
665 720
        r = self.client.update_image_metadata(img_ref, **metadata)
666 721
        IP.assert_called_once_with(
667
            img_ref, 'metadata',
668
            json_data=dict(metadata=metadata))
722
            img_ref, json_data=dict(metadata=metadata))
669 723
        self.assert_dicts_are_equal(r, metadata)
670 724

  
671
    @patch('%s.images_delete' % compute_pkg, return_value=FR())
725
    @patch('%s.images_metadata_delete' % compute_pkg, return_value=FR())
672 726
    def test_delete_image_metadata(self, ID):
673 727
        key = 'metakey'
674 728
        self.client.delete_image_metadata(img_ref, key)
675
        ID.assert_called_once_with(img_ref, '/metadata/%s' % key)
729
        ID.assert_called_once_with(img_ref, '%s' % key)
676 730

  
677 731
    @patch('%s.floating_ip_pools_get' % compute_pkg, return_value=FR())
678 732
    def test_get_floating_ip_pools(self, get):

Also available in: Unified diff