text: from testtools import TestCase
  from mock import patch
  
  import charmhelpers.contrib.openstack.alternatives as alternatives
  
  
  NAME = 'test'
  SOURCE = '/var/lib/charm/test/test.conf'
  TARGET = '/etc/test/test,conf'
  
  
  class AlternativesTestCase(TestCase):
  
      @patch('subprocess.os.path')
      @patch('subprocess.check_call')
      def test_new_alternative(self, _check, _path):
          _path.exists.return_value = False
          alternatives.install_alternative(NAME,
                                           TARGET,
                                           SOURCE)
          _check.assert_called_with(
              ['update-alternatives', '--force', '--install',
               TARGET, NAME, SOURCE, '50']
          )
  
      @patch('subprocess.os.path')
      @patch('subprocess.check_call')
      def test_priority(self, _check, _path):
          _path.exists.return_value = False
          alternatives.install_alternative(NAME,
                                           TARGET,
                                           SOURCE, 100)
          _check.assert_called_with(
              ['update-alternatives', '--force', '--install',
               TARGET, NAME, SOURCE, '100']
          )
  
      @patch('shutil.move')
      @patch('subprocess.os.path')
      @patch('subprocess.check_call')
      def test_new_alternative_existing_file(self, _check,
                                             _path, _move):
          _path.exists.return_value = True
          _path.islink.return_value = False
          alternatives.install_alternative(NAME,
                                           TARGET,
                                           SOURCE)
          _check.assert_called_with(
              ['update-alternatives', '--force', '--install',
               TARGET, NAME, SOURCE, '50']
          )
          _move.assert_called_with(TARGET, '{}.bak'.format(TARGET))
  
      @patch('shutil.move')
      @patch('subprocess.os.path')
      @patch('subprocess.check_call')
      def test_new_alternative_existing_link(self, _check,
                                             _path, _move):
          _path.exists.return_value = True
          _path.islink.return_value = True
          alternatives.install_alternative(NAME,
                                           TARGET,
                                           SOURCE)
          _check.assert_called_with(
              ['update-alternatives', '--force', '--install',
               TARGET, NAME, SOURCE, '50']
          )
          _move.assert_not_called()
  
      @patch('subprocess.check_call')
      def test_remove_alternative(self, _check):
          alternatives.remove_alternative(NAME, SOURCE)
          _check.assert_called_with(
              ['update-alternatives', '--remove',
               NAME, SOURCE]
          )
  