diff options
Diffstat (limited to 'utils/test')
| -rw-r--r-- | utils/test/cli_installer_tests.py | 215 | 
1 files changed, 183 insertions, 32 deletions
diff --git a/utils/test/cli_installer_tests.py b/utils/test/cli_installer_tests.py index d58539b18..fc16d9ceb 100644 --- a/utils/test/cli_installer_tests.py +++ b/utils/test/cli_installer_tests.py @@ -46,20 +46,20 @@ SAMPLE_CONFIG = """  variant: %s  ansible_ssh_user: root  hosts: -  - connect_to: master-private.example.com +  - connect_to: 10.0.0.1      ip: 10.0.0.1      hostname: master-private.example.com      public_ip: 24.222.0.1      public_hostname: master.example.com      master: true      node: true -  - connect_to: node1-private.example.com +  - connect_to: 10.0.0.2      ip: 10.0.0.2      hostname: node1-private.example.com      public_ip: 24.222.0.2      public_hostname: node1.example.com      node: true -  - connect_to: node2-private.example.com +  - connect_to: 10.0.0.3      ip: 10.0.0.3      hostname: node2-private.example.com      public_ip: 24.222.0.3 @@ -98,6 +98,76 @@ class OOCliFixture(OOInstallFixture):          f.close()          return config +    def _verify_load_facts(self, load_facts_mock): +        """ Check that we ran load facts with expected inputs. """ +        load_facts_args = load_facts_mock.call_args[0] +        self.assertEquals(os.path.join(self.work_dir, ".ansible/hosts"), +            load_facts_args[0]) +        self.assertEquals(os.path.join(self.work_dir, +            "playbooks/byo/openshift_facts.yml"), load_facts_args[1]) +        env_vars = load_facts_args[2] +        self.assertEquals(os.path.join(self.work_dir, +            '.ansible/callback_facts.yaml'), +            env_vars['OO_INSTALL_CALLBACK_FACTS_YAML']) +        self.assertEqual('/tmp/ansible.log', env_vars['ANSIBLE_LOG_PATH']) + +    def _verify_run_playbook(self, run_playbook_mock, exp_hosts_len, exp_hosts_to_run_on_len): +        """ Check that we ran playbook with expected inputs. """ +        hosts = run_playbook_mock.call_args[0][0] +        hosts_to_run_on = run_playbook_mock.call_args[0][1] +        self.assertEquals(exp_hosts_len, len(hosts)) +        self.assertEquals(exp_hosts_to_run_on_len, len(hosts_to_run_on)) + +    def _verify_config_hosts(self, written_config, host_count): +        print written_config['hosts'] +        self.assertEquals(host_count, len(written_config['hosts'])) +        for h in written_config['hosts']: +            self.assertTrue(h['node']) +            self.assertTrue('ip' in h) +            self.assertTrue('hostname' in h) +            self.assertTrue('public_ip' in h) +            self.assertTrue('public_hostname' in h) + +    #pylint: disable=too-many-arguments +    def _verify_get_hosts_to_run_on(self, mock_facts, load_facts_mock, +                                    run_playbook_mock, cli_input, +                                    exp_hosts_len=None, exp_hosts_to_run_on_len=None, +                                    force=None): +        """ +        Tests cli_installer.py:get_hosts_to_run_on.  That method has quite a +        few subtle branches in the logic.  The goal with this method is simply +        to handle all the messy stuff here and allow the main test cases to be +        easily read.  The basic idea is to modify mock_facts to return a +        version indicating OpenShift is already installed on particular hosts. +        """ +        load_facts_mock.return_value = (mock_facts, 0) +        run_playbook_mock.return_value = 0 + +        if cli_input: +            self.cli_args.append("install") +            result = self.runner.invoke(cli.cli, +                                        self.cli_args, +                                        input=cli_input) +        else: +            config_file = self.write_config(os.path.join(self.work_dir, +                'ooinstall.conf'), SAMPLE_CONFIG % 'openshift-enterprise') + +            self.cli_args.extend(["-c", config_file, "install"]) +            if force: +                self.cli_args.append("--force") +            result = self.runner.invoke(cli.cli, self.cli_args) +            written_config = self._read_yaml(config_file) +            self._verify_config_hosts(written_config, exp_hosts_len) + +        self.assert_result(result, 0) +        self._verify_load_facts(load_facts_mock) +        self._verify_run_playbook(run_playbook_mock, exp_hosts_len, exp_hosts_to_run_on_len) + +        # Make sure we ran on the expected masters and nodes: +        hosts = run_playbook_mock.call_args[0][0] +        hosts_to_run_on = run_playbook_mock.call_args[0][1] +        self.assertEquals(exp_hosts_len, len(hosts)) +        self.assertEquals(exp_hosts_to_run_on_len, len(hosts_to_run_on))  class UnattendedCliTests(OOCliFixture): @@ -105,6 +175,92 @@ class UnattendedCliTests(OOCliFixture):          OOCliFixture.setUp(self)          self.cli_args.append("-u") +    # unattended with config file and all installed hosts (without --force) +    @patch('ooinstall.openshift_ansible.run_main_playbook') +    @patch('ooinstall.openshift_ansible.load_system_facts') +    def test_get_hosts_to_run_on1(self, load_facts_mock, run_playbook_mock): +        mock_facts = copy.deepcopy(MOCK_FACTS) +        mock_facts['10.0.0.1']['common']['version'] = "3.0.0" +        mock_facts['10.0.0.2']['common']['version'] = "3.0.0" +        mock_facts['10.0.0.3']['common']['version'] = "3.0.0" + +        load_facts_mock.return_value = (mock_facts, 0) +        run_playbook_mock.return_value = 0 + +        config_file = self.write_config(os.path.join(self.work_dir, +            'ooinstall.conf'), SAMPLE_CONFIG % 'openshift-enterprise') + +        self.cli_args.extend(["-c", config_file, "install"]) +        result = self.runner.invoke(cli.cli, self.cli_args) + +        if result.exception is None or result.exit_code != 1: +            print "Exit code: %s" % result.exit_code +            self.fail("Unexpected CLI return") + +    # unattended with config file and all installed hosts (with --force) +    @patch('ooinstall.openshift_ansible.run_main_playbook') +    @patch('ooinstall.openshift_ansible.load_system_facts') +    def test_get_hosts_to_run_on2(self, load_facts_mock, run_playbook_mock): +        mock_facts = copy.deepcopy(MOCK_FACTS) +        mock_facts['10.0.0.1']['common']['version'] = "3.0.0" +        mock_facts['10.0.0.2']['common']['version'] = "3.0.0" +        mock_facts['10.0.0.3']['common']['version'] = "3.0.0" +        self._verify_get_hosts_to_run_on(mock_facts, load_facts_mock, run_playbook_mock, +                                         cli_input=None, +                                         exp_hosts_len=3, +                                         exp_hosts_to_run_on_len=3, +                                         force=True) + +    # unattended with config file and no installed hosts (without --force) +    @patch('ooinstall.openshift_ansible.run_main_playbook') +    @patch('ooinstall.openshift_ansible.load_system_facts') +    def test_get_hosts_to_run_on3(self, load_facts_mock, run_playbook_mock): +        load_facts_mock.return_value = (MOCK_FACTS, 0) +        run_playbook_mock.return_value = 0 +        self._verify_get_hosts_to_run_on(MOCK_FACTS, load_facts_mock, run_playbook_mock, +                                         cli_input=None, +                                         exp_hosts_len=3, +                                         exp_hosts_to_run_on_len=3, +                                         force=False) + +    # unattended with config file and no installed hosts (with --force) +    @patch('ooinstall.openshift_ansible.run_main_playbook') +    @patch('ooinstall.openshift_ansible.load_system_facts') +    def test_get_hosts_to_run_on4(self, load_facts_mock, run_playbook_mock): +        load_facts_mock.return_value = (MOCK_FACTS, 0) +        run_playbook_mock.return_value = 0 +        self._verify_get_hosts_to_run_on(MOCK_FACTS, load_facts_mock, run_playbook_mock, +                                         cli_input=None, +                                         exp_hosts_len=3, +                                         exp_hosts_to_run_on_len=3, +                                         force=True) + +    # unattended with config file and some installed some uninstalled hosts (without --force) +    @patch('ooinstall.openshift_ansible.run_main_playbook') +    @patch('ooinstall.openshift_ansible.load_system_facts') +    def test_get_hosts_to_run_on5(self, load_facts_mock, run_playbook_mock): +        mock_facts = copy.deepcopy(MOCK_FACTS) +        mock_facts['10.0.0.1']['common']['version'] = "3.0.0" +        mock_facts['10.0.0.2']['common']['version'] = "3.0.0" +        self._verify_get_hosts_to_run_on(mock_facts, load_facts_mock, run_playbook_mock, +                                         cli_input=None, +                                         exp_hosts_len=3, +                                         exp_hosts_to_run_on_len=2, +                                         force=False) + +    # unattended with config file and some installed some uninstalled hosts (with --force) +    @patch('ooinstall.openshift_ansible.run_main_playbook') +    @patch('ooinstall.openshift_ansible.load_system_facts') +    def test_get_hosts_to_run_on6(self, load_facts_mock, run_playbook_mock): +        mock_facts = copy.deepcopy(MOCK_FACTS) +        mock_facts['10.0.0.1']['common']['version'] = "3.0.0" +        mock_facts['10.0.0.2']['common']['version'] = "3.0.0" +        self._verify_get_hosts_to_run_on(mock_facts, load_facts_mock, run_playbook_mock, +                                         cli_input=None, +                                         exp_hosts_len=3, +                                         exp_hosts_to_run_on_len=3, +                                         force=True) +      @patch('ooinstall.openshift_ansible.run_main_playbook')      @patch('ooinstall.openshift_ansible.load_system_facts')      def test_cfg_full_run(self, load_facts_mock, run_playbook_mock): @@ -363,35 +519,6 @@ class AttendedCliTests(OOCliFixture):          return '\n'.join(inputs) -    def _verify_load_facts(self, load_facts_mock): -        """ Check that we ran load facts with expected inputs. """ -        load_facts_args = load_facts_mock.call_args[0] -        self.assertEquals(os.path.join(self.work_dir, ".ansible/hosts"), -            load_facts_args[0]) -        self.assertEquals(os.path.join(self.work_dir, -            "playbooks/byo/openshift_facts.yml"), load_facts_args[1]) -        env_vars = load_facts_args[2] -        self.assertEquals(os.path.join(self.work_dir, -            '.ansible/callback_facts.yaml'), -            env_vars['OO_INSTALL_CALLBACK_FACTS_YAML']) -        self.assertEqual('/tmp/ansible.log', env_vars['ANSIBLE_LOG_PATH']) - -    def _verify_run_playbook(self, run_playbook_mock, exp_hosts_len, exp_hosts_to_run_on_len): -        """ Check that we ran playbook with expected inputs. """ -        hosts = run_playbook_mock.call_args[0][0] -        hosts_to_run_on = run_playbook_mock.call_args[0][1] -        self.assertEquals(exp_hosts_len, len(hosts)) -        self.assertEquals(exp_hosts_to_run_on_len, len(hosts_to_run_on)) - -    def _verify_config_hosts(self, written_config, host_count): -        self.assertEquals(host_count, len(written_config['hosts'])) -        for h in written_config['hosts']: -            self.assertTrue(h['node']) -            self.assertTrue('ip' in h) -            self.assertTrue('hostname' in h) -            self.assertTrue('public_ip' in h) -            self.assertTrue('public_hostname' in h) -      @patch('ooinstall.openshift_ansible.run_main_playbook')      @patch('ooinstall.openshift_ansible.load_system_facts')      def test_full_run(self, load_facts_mock, run_playbook_mock): @@ -416,6 +543,7 @@ class AttendedCliTests(OOCliFixture):          written_config = self._read_yaml(self.config_file)          self._verify_config_hosts(written_config, 3) +    # interactive with config file and some installed some uninstalled hosts      @patch('ooinstall.openshift_ansible.run_main_playbook')      @patch('ooinstall.openshift_ansible.load_system_facts')      def test_add_nodes(self, load_facts_mock, run_playbook_mock): @@ -472,6 +600,29 @@ class AttendedCliTests(OOCliFixture):          written_config = self._read_yaml(config_file)          self._verify_config_hosts(written_config, 3) +    #interactive with config file and all installed hosts +    @patch('ooinstall.openshift_ansible.run_main_playbook') +    @patch('ooinstall.openshift_ansible.load_system_facts') +    def test_get_hosts_to_run_on(self, load_facts_mock, run_playbook_mock): +        mock_facts = copy.deepcopy(MOCK_FACTS) +        mock_facts['10.0.0.1']['common']['version'] = "3.0.0" +        mock_facts['10.0.0.2']['common']['version'] = "3.0.0" + +        cli_input = self._build_input(hosts=[ +            ('10.0.0.1', True), +            ], +                                      add_nodes=[('10.0.0.2', False)], +                                      ssh_user='root', +                                      variant_num=1, +                                      confirm_facts='y') + +        self._verify_get_hosts_to_run_on(mock_facts, load_facts_mock, +                                         run_playbook_mock, +                                         cli_input, +                                         exp_hosts_len=2, +                                         exp_hosts_to_run_on_len=2, +                                         force=False) +  # TODO: test with config file, attended add node  # TODO: test with config file, attended new node already in config file  # TODO: test with config file, attended new node already in config file, plus manually added nodes  | 
