def test_update_extension_no_updates(self):
     add_extension(source=MY_EXT_SOURCE)
     ext = show_extension(MY_EXT_NAME)
     self.assertEqual(ext[OUT_KEY_VERSION], '0.0.3+dev')
     with mock.patch('azure.cli.command_modules.extension.custom.resolve_from_index', side_effect=NoExtensionCandidatesError()):
         with self.assertRaises(CLIError) as err:
             update_extension(MY_EXT_NAME)
         self.assertTrue("No updates available for '{}'.".format(MY_EXT_NAME) in str(err.exception))
 def test_update_extension_no_updates(self):
     add_extension(source=MY_EXT_SOURCE)
     ext = show_extension(MY_EXT_NAME)
     self.assertEqual(ext[OUT_KEY_VERSION], '0.0.3+dev')
     with mock.patch('azure.cli.command_modules.extension.custom.resolve_from_index', side_effect=NoExtensionCandidatesError()):
         with self.assertRaises(CLIError) as err:
             update_extension(MY_EXT_NAME)
         self.assertTrue("No updates available for '{}'.".format(MY_EXT_NAME) in str(err.exception))
 def test_update_extension(self):
     add_extension(source=MY_EXT_SOURCE)
     ext = show_extension(MY_EXT_NAME)
     self.assertEqual(ext[OUT_KEY_VERSION], '0.0.3+dev')
     newer_extension = _get_test_data_file('myfirstcliextension-0.0.4+dev-py2.py3-none-any.whl')
     computed_extension_sha256 = _compute_file_hash(newer_extension)
     with mock.patch('azure.cli.command_modules.extension.custom.resolve_from_index', return_value=(newer_extension, computed_extension_sha256)):
         update_extension(MY_EXT_NAME)
     ext = show_extension(MY_EXT_NAME)
     self.assertEqual(ext[OUT_KEY_VERSION], '0.0.4+dev')
 def test_update_extension(self):
     add_extension(source=MY_EXT_SOURCE)
     ext = show_extension(MY_EXT_NAME)
     self.assertEqual(ext[OUT_KEY_VERSION], '0.0.3+dev')
     newer_extension = _get_test_data_file('myfirstcliextension-0.0.4+dev-py2.py3-none-any.whl')
     computed_extension_sha256 = _compute_file_hash(newer_extension)
     with mock.patch('azure.cli.command_modules.extension.custom.resolve_from_index', return_value=(newer_extension, computed_extension_sha256)):
         update_extension(MY_EXT_NAME)
     ext = show_extension(MY_EXT_NAME)
     self.assertEqual(ext[OUT_KEY_VERSION], '0.0.4+dev')
 def test_update_extension_exception_in_update_and_rolled_back(self):
     add_extension(source=MY_EXT_SOURCE)
     ext = show_extension(MY_EXT_NAME)
     self.assertEqual(ext[OUT_KEY_VERSION], '0.0.3+dev')
     newer_extension = _get_test_data_file('myfirstcliextension-0.0.4+dev-py2.py3-none-any.whl')
     bad_sha256 = 'thishashisclearlywrong'
     with mock.patch('azure.cli.command_modules.extension.custom.resolve_from_index', return_value=(newer_extension, bad_sha256)):
         with self.assertRaises(CLIError) as err:
             update_extension(MY_EXT_NAME)
         self.assertTrue('Failed to update. Rolled {} back to {}.'.format(ext['name'], ext[OUT_KEY_VERSION]) in str(err.exception))
     ext = show_extension(MY_EXT_NAME)
     self.assertEqual(ext[OUT_KEY_VERSION], '0.0.3+dev')
 def test_update_extension_exception_in_update_and_rolled_back(self):
     add_extension(source=MY_EXT_SOURCE)
     ext = show_extension(MY_EXT_NAME)
     self.assertEqual(ext[OUT_KEY_VERSION], '0.0.3+dev')
     newer_extension = _get_test_data_file('myfirstcliextension-0.0.4+dev-py2.py3-none-any.whl')
     bad_sha256 = 'thishashisclearlywrong'
     with mock.patch('azure.cli.command_modules.extension.custom.resolve_from_index', return_value=(newer_extension, bad_sha256)):
         with self.assertRaises(CLIError) as err:
             update_extension(MY_EXT_NAME)
         self.assertTrue('Failed to update. Rolled {} back to {}.'.format(ext['name'], ext[OUT_KEY_VERSION]) in str(err.exception))
     ext = show_extension(MY_EXT_NAME)
     self.assertEqual(ext[OUT_KEY_VERSION], '0.0.3+dev')
    def test_update_extension_extra_index_url(self):
        """
        Tests extension update while specifying --extra-index-url parameter.
        :return:
        """
        extra_index_urls = ['https://testpypi.python.org/simple', 'https://pypi.python.org/simple']

        add_extension(source=MY_EXT_SOURCE, pip_extra_index_urls=extra_index_urls)
        ext = show_extension(MY_EXT_NAME)
        self.assertEqual(ext[OUT_KEY_VERSION], '0.0.3+dev')
        newer_extension = _get_test_data_file('myfirstcliextension-0.0.4+dev-py2.py3-none-any.whl')
        computed_extension_sha256 = _compute_file_hash(newer_extension)
        with mock.patch('azure.cli.command_modules.extension.custom.resolve_from_index', return_value=(newer_extension, computed_extension_sha256)):
            update_extension(MY_EXT_NAME, pip_extra_index_urls=extra_index_urls)
        ext = show_extension(MY_EXT_NAME)
        self.assertEqual(ext[OUT_KEY_VERSION], '0.0.4+dev')
    def test_update_extension_extra_index_url(self):
        """
        Tests extension update while specifying --extra-index-url parameter.
        :return:
        """
        extra_index_urls = ['https://testpypi.python.org/simple', 'https://pypi.python.org/simple']

        add_extension(source=MY_EXT_SOURCE, pip_extra_index_urls=extra_index_urls)
        ext = show_extension(MY_EXT_NAME)
        self.assertEqual(ext[OUT_KEY_VERSION], '0.0.3+dev')
        newer_extension = _get_test_data_file('myfirstcliextension-0.0.4+dev-py2.py3-none-any.whl')
        computed_extension_sha256 = _compute_file_hash(newer_extension)
        with mock.patch('azure.cli.command_modules.extension.custom.resolve_from_index', return_value=(newer_extension, computed_extension_sha256)):
            update_extension(MY_EXT_NAME, pip_extra_index_urls=extra_index_urls)
        ext = show_extension(MY_EXT_NAME)
        self.assertEqual(ext[OUT_KEY_VERSION], '0.0.4+dev')
    def test_update_extension_verify_no_pip_proxy(self):
        add_extension(source=MY_EXT_SOURCE)
        ext = show_extension(MY_EXT_NAME)
        self.assertEqual(ext[OUT_KEY_VERSION], '0.0.3+dev')
        newer_extension = _get_test_data_file('myfirstcliextension-0.0.4+dev-py2.py3-none-any.whl')
        computed_extension_sha256 = _compute_file_hash(newer_extension)

        with mock.patch('azure.cli.command_modules.extension.custom.resolve_from_index', return_value=(MY_EXT_SOURCE, computed_extension_sha256)), \
                mock.patch('azure.cli.command_modules.extension.custom.shutil'), \
                mock.patch('azure.cli.command_modules.extension.custom.is_valid_sha256sum', return_value=(True, computed_extension_sha256)), \
                mock.patch('azure.cli.command_modules.extension.custom.extension_exists', return_value=None), \
                mock.patch('azure.cli.command_modules.extension.custom.check_output') as check_output:

            update_extension(MY_EXT_NAME)
            args = check_output.call_args
            pip_cmd = args[0][0]
            if '--proxy' in pip_cmd:
                raise AssertionError("proxy parameter in check_output args although no proxy specified")
    def test_update_extension_verify_no_pip_proxy(self):
        add_extension(source=MY_EXT_SOURCE)
        ext = show_extension(MY_EXT_NAME)
        self.assertEqual(ext[OUT_KEY_VERSION], '0.0.3+dev')
        newer_extension = _get_test_data_file('myfirstcliextension-0.0.4+dev-py2.py3-none-any.whl')
        computed_extension_sha256 = _compute_file_hash(newer_extension)

        with mock.patch('azure.cli.command_modules.extension.custom.resolve_from_index', return_value=(MY_EXT_SOURCE, computed_extension_sha256)), \
                mock.patch('azure.cli.command_modules.extension.custom.shutil'), \
                mock.patch('azure.cli.command_modules.extension.custom.is_valid_sha256sum', return_value=(True, computed_extension_sha256)), \
                mock.patch('azure.cli.command_modules.extension.custom.extension_exists', return_value=None), \
                mock.patch('azure.cli.command_modules.extension.custom.check_output') as check_output:

            update_extension(MY_EXT_NAME)
            args = check_output.call_args
            pip_cmd = args[0][0]
            if '--proxy' in pip_cmd:
                raise AssertionError("proxy parameter in check_output args although no proxy specified")
    def test_update_extension_with_pip_proxy(self):
        add_extension(source=MY_EXT_SOURCE)
        ext = show_extension(MY_EXT_NAME)
        self.assertEqual(ext[OUT_KEY_VERSION], '0.0.3+dev')
        newer_extension = _get_test_data_file('myfirstcliextension-0.0.4+dev-py2.py3-none-any.whl')
        computed_extension_sha256 = _compute_file_hash(newer_extension)

        proxy_param = '--proxy'
        proxy_endpoint = "https://*****:*****@proxy.microsoft.com"
        with mock.patch('azure.cli.command_modules.extension.custom.resolve_from_index', return_value=(MY_EXT_SOURCE, computed_extension_sha256)), \
                mock.patch('azure.cli.command_modules.extension.custom.shutil'), \
                mock.patch('azure.cli.command_modules.extension.custom.is_valid_sha256sum', return_value=(True, computed_extension_sha256)), \
                mock.patch('azure.cli.command_modules.extension.custom.extension_exists', return_value=None), \
                mock.patch('azure.cli.command_modules.extension.custom.check_output') as check_output:

            update_extension(MY_EXT_NAME, pip_proxy=proxy_endpoint)
            args = check_output.call_args
            pip_cmd = args[0][0]
            proxy_index = pip_cmd.index(proxy_param)
            assert pip_cmd[proxy_index + 1] == proxy_endpoint
    def test_update_extension_with_pip_proxy(self):
        add_extension(source=MY_EXT_SOURCE)
        ext = show_extension(MY_EXT_NAME)
        self.assertEqual(ext[OUT_KEY_VERSION], '0.0.3+dev')
        newer_extension = _get_test_data_file('myfirstcliextension-0.0.4+dev-py2.py3-none-any.whl')
        computed_extension_sha256 = _compute_file_hash(newer_extension)

        proxy_param = '--proxy'
        proxy_endpoint = "https://*****:*****@proxy.microsoft.com"
        with mock.patch('azure.cli.command_modules.extension.custom.resolve_from_index', return_value=(MY_EXT_SOURCE, computed_extension_sha256)), \
                mock.patch('azure.cli.command_modules.extension.custom.shutil'), \
                mock.patch('azure.cli.command_modules.extension.custom.is_valid_sha256sum', return_value=(True, computed_extension_sha256)), \
                mock.patch('azure.cli.command_modules.extension.custom.extension_exists', return_value=None), \
                mock.patch('azure.cli.command_modules.extension.custom.check_output') as check_output:

            update_extension(MY_EXT_NAME, pip_proxy=proxy_endpoint)
            args = check_output.call_args
            pip_cmd = args[0][0]
            proxy_index = pip_cmd.index(proxy_param)
            assert pip_cmd[proxy_index + 1] == proxy_endpoint
 def test_update_extension_not_found(self):
     with self.assertRaises(CLIError) as err:
         update_extension(MY_EXT_NAME)
     self.assertEqual(str(err.exception), 'The extension {} is not installed.'.format(MY_EXT_NAME))
 def test_update_extension_not_found(self):
     with self.assertRaises(CLIError) as err:
         update_extension(MY_EXT_NAME)
     self.assertEqual(
         str(err.exception),
         'The extension {} is not installed.'.format(MY_EXT_NAME))