class MysqlhotcopyRdiffTestCase(unittest.TestCase):

  def setUp(self):
    config = {
      'type': 'mysqlhotcopy_rdiff',
      'host': 'test1',
      'database': 'database',
      'user': '******',
      'password': '******'}
    self.MysqlhotcopyRdiff = MysqlhotcopyRdiff(config)
    self.MysqlhotcopyRdiff.backup_dir = '/home/backup/data'
    self.MysqlhotcopyRdiff.tmp_dir = '/home/backup/tmp'

  def tearDown(self):
    self.MysqlhotcopyRdiff = None

  def test_initialize(self):
    self.assertRaises(ImproperlyConfigured, lambda: MysqlhotcopyRdiff({'type': 'mysqlhotcopy_rdiff'}))

  def test_call_execute_method_when_command_is_successfull(self):
    # create mock object.
    called_cmds = []
    def getstatusoutput(cmd):
      called_cmds.append(cmd)
      return 0, 'Successful command %s.' % cmd
    commands.getstatusoutput = getstatusoutput

    self.MysqlhotcopyRdiff.execute()

    expected = [
      "/usr/bin/ssh -p 22 test1 'sudo /usr/bin/find /tmp -maxdepth 1 -type d -name 'database' -exec rm -rf {} \\;'",
      "/usr/bin/ssh -p 22 test1 'sudo /usr/bin/mysqlhotcopy -u backup -p password database /tmp'",
      "/usr/bin/ssh -p 22 test1 'sudo /bin/tar cvfP /tmp/database.tar /tmp/database --remove-files'",
      "/usr/bin/rsync -e 'ssh -p 22' -z test1:/tmp/database.tar /home/backup/tmp/database.tar",
      "/usr/bin/rdiff-backup /home/backup/tmp /home/backup/data"]
    self.assertEqual(expected, called_cmds)

  def test_call_execute_method_when_command_is_failed(self):
    # create mock object.
    called_cmds = []
    def getstatusoutput(cmd):
      called_cmds.append(cmd)
      return 1, 'Failed command %s.' % cmd
    commands.getstatusoutput = getstatusoutput

    self.assertRaises(ExecutionError, self.MysqlhotcopyRdiff.execute)
 def setUp(self):
   config = {
     'type': 'mysqlhotcopy_rdiff',
     'host': 'test1',
     'database': 'database',
     'user': '******',
     'password': '******'}
   self.MysqlhotcopyRdiff = MysqlhotcopyRdiff(config)
   self.MysqlhotcopyRdiff.backup_dir = '/home/backup/data'
   self.MysqlhotcopyRdiff.tmp_dir = '/home/backup/tmp'