~openstack-charmers-archive/charms/trusty/nova-compute/next

« back to all changes in this revision

Viewing changes to unit_tests/test_nova_compute_utils.py

  • Committer: james.page at ubuntu
  • Date: 2015-04-16 20:05:38 UTC
  • mfrom: (117.1.6 nova-compute)
  • Revision ID: james.page@ubuntu.com-20150416200538-j545uzgj4wg33xuu
[coreycb,r=james-page] Add deploy from source support.

Show diffs side-by-side

added added

removed removed

Lines of Context:
35
35
 
36
36
OVS_PKGS_FLAT = list(itertools.chain.from_iterable(OVS_PKGS))
37
37
 
 
38
openstack_origin_git = \
 
39
    """repositories:
 
40
         - {name: requirements,
 
41
            repository: 'git://git.openstack.org/openstack/requirements',
 
42
            branch: stable/juno}
 
43
         - {name: nova,
 
44
            repository: 'git://git.openstack.org/openstack/nova',
 
45
            branch: stable/juno}"""
 
46
 
38
47
 
39
48
class NovaComputeUtilsTests(CharmTestCase):
40
49
 
44
53
 
45
54
    @patch.object(utils, 'enable_nova_metadata')
46
55
    @patch.object(utils, 'network_manager')
47
 
    def test_determine_packages_nova_network(self, net_man, en_meta):
 
56
    @patch.object(utils, 'git_install_requested')
 
57
    def test_determine_packages_nova_network(self, git_requested, net_man,
 
58
                                             en_meta):
 
59
        git_requested.return_value = False
48
60
        en_meta.return_value = False
49
61
        net_man.return_value = 'flatdhcpmanager'
50
62
        self.relation_ids.return_value = []
59
71
    @patch.object(utils, 'enable_nova_metadata')
60
72
    @patch.object(utils, 'neutron_plugin')
61
73
    @patch.object(utils, 'network_manager')
62
 
    def test_determine_packages_quantum(self, net_man, n_plugin, en_meta):
 
74
    @patch.object(utils, 'git_install_requested')
 
75
    def test_determine_packages_quantum(self, git_requested, net_man, n_plugin,
 
76
                                        en_meta):
 
77
        git_requested.return_value = False
63
78
        en_meta.return_value = False
64
79
        self.neutron_plugin_attribute.return_value = OVS_PKGS
65
80
        net_man.return_value = 'quantum'
73
88
    @patch.object(utils, 'enable_nova_metadata')
74
89
    @patch.object(utils, 'neutron_plugin')
75
90
    @patch.object(utils, 'network_manager')
76
 
    def test_determine_packages_quantum_legacy_off(self, net_man, n_plugin,
 
91
    @patch.object(utils, 'git_install_requested')
 
92
    def test_determine_packages_quantum_legacy_off(self, git_requested,
 
93
                                                   net_man, n_plugin,
77
94
                                                   en_meta, leg_mode):
 
95
        git_requested.return_value = False
78
96
        en_meta.return_value = False
79
97
        leg_mode.return_value = False
80
98
        self.neutron_plugin_attribute.return_value = OVS_PKGS
89
107
    @patch.object(utils, 'enable_nova_metadata')
90
108
    @patch.object(utils, 'neutron_plugin')
91
109
    @patch.object(utils, 'network_manager')
92
 
    def test_determine_packages_quantum_ceph(self, net_man, n_plugin, en_meta,
93
 
                                             leg_mode):
 
110
    @patch.object(utils, 'git_install_requested')
 
111
    def test_determine_packages_quantum_ceph(self, git_requested, net_man,
 
112
                                             n_plugin, en_meta, leg_mode):
 
113
        git_requested.return_value = False
94
114
        en_meta.return_value = False
95
115
        leg_mode.return_value = True
96
116
        self.neutron_plugin_attribute.return_value = OVS_PKGS
105
125
    @patch.object(utils, 'enable_nova_metadata')
106
126
    @patch.object(utils, 'neutron_plugin')
107
127
    @patch.object(utils, 'network_manager')
108
 
    def test_determine_packages_metadata(self, net_man, n_plugin, en_meta):
 
128
    @patch.object(utils, 'git_install_requested')
 
129
    def test_determine_packages_metadata(self, git_requested, net_man,
 
130
                                         n_plugin, en_meta):
 
131
        git_requested.return_value = False
109
132
        en_meta.return_value = True
110
133
        self.neutron_plugin_attribute.return_value = OVS_PKGS
111
134
        net_man.return_value = 'bob'
475
498
        _neutron_plugin_legacy_mode.return_value = True
476
499
        _neutron_plugin.return_value = 'bobvs'
477
500
        self.assertFalse(utils.manage_ovs())
 
501
 
 
502
    @patch.object(utils, 'git_install_requested')
 
503
    @patch.object(utils, 'git_clone_and_install')
 
504
    @patch.object(utils, 'git_post_install')
 
505
    @patch.object(utils, 'git_pre_install')
 
506
    def test_git_install(self, git_pre, git_post, git_clone_and_install,
 
507
                         git_requested):
 
508
        projects_yaml = openstack_origin_git
 
509
        git_requested.return_value = True
 
510
        utils.git_install(projects_yaml)
 
511
        self.assertTrue(git_pre.called)
 
512
        git_clone_and_install.assert_called_with(openstack_origin_git,
 
513
                                                 core_project='nova')
 
514
        self.assertTrue(git_post.called)
 
515
 
 
516
    @patch.object(utils, 'mkdir')
 
517
    @patch.object(utils, 'write_file')
 
518
    @patch.object(utils, 'add_user_to_group')
 
519
    @patch.object(utils, 'add_group')
 
520
    @patch.object(utils, 'adduser')
 
521
    @patch.object(utils, 'check_call')
 
522
    def test_git_pre_install(self, check_call, adduser, add_group,
 
523
                             add_user_to_group, write_file, mkdir):
 
524
        utils.git_pre_install()
 
525
        adduser.assert_called_with('nova', shell='/bin/bash',
 
526
                                   system_user=True)
 
527
        check_call.assert_called_with(['usermod', '--home', '/var/lib/nova',
 
528
                                       'nova'])
 
529
        add_group.assert_called_with('nova', system_group=True)
 
530
        expected = [
 
531
            call('nova', 'nova'),
 
532
            call('nova', 'libvirtd'),
 
533
        ]
 
534
        self.assertEquals(add_user_to_group.call_args_list, expected)
 
535
        expected = [
 
536
            call('/var/lib/nova', owner='nova',
 
537
                 group='nova', perms=0755, force=False),
 
538
            call('/var/lib/nova/buckets', owner='nova',
 
539
                 group='nova', perms=0755, force=False),
 
540
            call('/var/lib/nova/CA', owner='nova',
 
541
                 group='nova', perms=0755, force=False),
 
542
            call('/var/lib/nova/CA/INTER', owner='nova',
 
543
                 group='nova', perms=0755, force=False),
 
544
            call('/var/lib/nova/CA/newcerts', owner='nova',
 
545
                 group='nova', perms=0755, force=False),
 
546
            call('/var/lib/nova/CA/private', owner='nova',
 
547
                 group='nova', perms=0755, force=False),
 
548
            call('/var/lib/nova/CA/reqs', owner='nova',
 
549
                 group='nova', perms=0755, force=False),
 
550
            call('/var/lib/nova/images', owner='nova',
 
551
                 group='nova', perms=0755, force=False),
 
552
            call('/var/lib/nova/instances', owner='nova',
 
553
                 group='nova', perms=0755, force=False),
 
554
            call('/var/lib/nova/keys', owner='nova',
 
555
                 group='nova', perms=0755, force=False),
 
556
            call('/var/lib/nova/networks', owner='nova',
 
557
                 group='nova', perms=0755, force=False),
 
558
            call('/var/lib/nova/tmp', owner='nova',
 
559
                 group='nova', perms=0755, force=False),
 
560
            call('/var/log/nova', owner='nova',
 
561
                 group='nova', perms=0755, force=False),
 
562
        ]
 
563
        self.assertEquals(mkdir.call_args_list, expected)
 
564
        expected = [
 
565
            call('/var/log/nova/nova-api.log', '', owner='nova',
 
566
                 group='nova', perms=0644),
 
567
            call('/var/log/nova/nova-compute.log', '', owner='nova',
 
568
                 group='nova', perms=0644),
 
569
            call('/var/log/nova/nova-manage.log', '', owner='nova',
 
570
                 group='nova', perms=0644),
 
571
            call('/var/log/nova/nova-network.log', '', owner='nova',
 
572
                 group='nova', perms=0644),
 
573
        ]
 
574
        self.assertEquals(write_file.call_args_list, expected)
 
575
 
 
576
    @patch.object(utils, 'git_src_dir')
 
577
    @patch.object(utils, 'service_restart')
 
578
    @patch.object(utils, 'render')
 
579
    @patch('os.path.join')
 
580
    @patch('os.path.exists')
 
581
    @patch('shutil.copytree')
 
582
    @patch('shutil.rmtree')
 
583
    @patch.object(utils, 'apt_install')
 
584
    @patch.object(utils, 'apt_update')
 
585
    def test_git_post_install(self, apt_update, apt_install, rmtree, copytree,
 
586
                              exists, join, render, service_restart,
 
587
                              git_src_dir):
 
588
        projects_yaml = openstack_origin_git
 
589
        join.return_value = 'joined-string'
 
590
        utils.git_post_install(projects_yaml)
 
591
        expected = [
 
592
            call('joined-string', '/etc/nova'),
 
593
        ]
 
594
        copytree.assert_has_calls(expected)
 
595
 
 
596
        service_name = 'nova-compute'
 
597
        nova_user = 'nova'
 
598
        start_dir = '/var/lib/nova'
 
599
        nova_conf = '/etc/nova/nova.conf'
 
600
        nova_api_metadata_context = {
 
601
            'service_description': 'Nova Metadata API server',
 
602
            'service_name': service_name,
 
603
            'user_name': nova_user,
 
604
            'start_dir': start_dir,
 
605
            'process_name': 'nova-api-metadata',
 
606
            'executable_name': '/usr/local/bin/nova-api-metadata',
 
607
            'config_files': [nova_conf],
 
608
        }
 
609
        nova_api_context = {
 
610
            'service_description': 'Nova API server',
 
611
            'service_name': service_name,
 
612
            'user_name': nova_user,
 
613
            'start_dir': start_dir,
 
614
            'process_name': 'nova-api',
 
615
            'executable_name': '/usr/local/bin/nova-api',
 
616
            'config_files': [nova_conf],
 
617
        }
 
618
        nova_compute_context = {
 
619
            'service_description': 'Nova compute worker',
 
620
            'service_name': service_name,
 
621
            'user_name': nova_user,
 
622
            'process_name': 'nova-compute',
 
623
            'executable_name': '/usr/local/bin/nova-compute',
 
624
            'config_files': [nova_conf, '/etc/nova/nova-compute.conf'],
 
625
        }
 
626
        nova_network_context = {
 
627
            'service_description': 'Nova network worker',
 
628
            'service_name': service_name,
 
629
            'user_name': nova_user,
 
630
            'start_dir': start_dir,
 
631
            'process_name': 'nova-network',
 
632
            'executable_name': '/usr/local/bin/nova-network',
 
633
            'config_files': [nova_conf],
 
634
        }
 
635
        expected = [
 
636
            call('git/nova-compute-kvm.conf', '/etc/nova/nova-compute.conf',
 
637
                 {}, perms=0o644),
 
638
            call('git/nova_sudoers', '/etc/sudoers.d/nova_sudoers',
 
639
                 {}, perms=0o440),
 
640
            call('git.upstart', '/etc/init/nova-api-metadata.conf',
 
641
                 nova_api_metadata_context, perms=0o644,
 
642
                 templates_dir='joined-string'),
 
643
            call('git.upstart', '/etc/init/nova-api.conf',
 
644
                 nova_api_context, perms=0o644,
 
645
                 templates_dir='joined-string'),
 
646
            call('git/upstart/nova-compute.upstart',
 
647
                 '/etc/init/nova-compute.conf',
 
648
                 nova_compute_context, perms=0o644),
 
649
            call('git.upstart', '/etc/init/nova-network.conf',
 
650
                 nova_network_context, perms=0o644,
 
651
                 templates_dir='joined-string'),
 
652
        ]
 
653
        self.assertEquals(render.call_args_list, expected)
 
654
        self.assertTrue(apt_update.called)
 
655
        apt_install.assert_called_with(
 
656
            ['bridge-utils', 'dnsmasq-base',
 
657
             'dnsmasq-utils', 'ebtables', 'genisoimage', 'iptables',
 
658
             'iputils-arping', 'kpartx', 'kvm', 'netcat', 'open-iscsi',
 
659
             'parted', 'python-libvirt', 'qemu', 'qemu-system',
 
660
             'qemu-utils', 'vlan', 'xen-system-amd64'], fatal=True)