test_mysql.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import sys
  2. from flexmock import flexmock
  3. from borgmatic.hooks import mysql as module
  4. def test_dump_databases_runs_mysqldump_for_each_database():
  5. databases = [{'name': 'foo'}, {'name': 'bar'}]
  6. output_file = flexmock()
  7. flexmock(module.dump).should_receive('make_database_dump_filename').and_return(
  8. 'databases/localhost/foo'
  9. ).and_return('databases/localhost/bar')
  10. flexmock(module.os).should_receive('makedirs')
  11. flexmock(sys.modules['builtins']).should_receive('open').and_return(output_file)
  12. for name in ('foo', 'bar'):
  13. flexmock(module).should_receive('execute_command').with_args(
  14. ('mysqldump', '--add-drop-database', '--databases', name),
  15. output_file=output_file,
  16. extra_environment=None,
  17. ).once()
  18. module.dump_databases(databases, 'test.yaml', dry_run=False)
  19. def test_dump_databases_with_dry_run_skips_mysqldump():
  20. databases = [{'name': 'foo'}, {'name': 'bar'}]
  21. flexmock(module.dump).should_receive('make_database_dump_filename').and_return(
  22. 'databases/localhost/foo'
  23. ).and_return('databases/localhost/bar')
  24. flexmock(module.os).should_receive('makedirs').never()
  25. flexmock(module).should_receive('execute_command').never()
  26. module.dump_databases(databases, 'test.yaml', dry_run=True)
  27. def test_dump_databases_runs_mysqldump_with_hostname_and_port():
  28. databases = [{'name': 'foo', 'hostname': 'database.example.org', 'port': 5433}]
  29. output_file = flexmock()
  30. flexmock(module.dump).should_receive('make_database_dump_filename').and_return(
  31. 'databases/database.example.org/foo'
  32. )
  33. flexmock(module.os).should_receive('makedirs')
  34. flexmock(sys.modules['builtins']).should_receive('open').and_return(output_file)
  35. flexmock(module).should_receive('execute_command').with_args(
  36. (
  37. 'mysqldump',
  38. '--add-drop-database',
  39. '--host',
  40. 'database.example.org',
  41. '--port',
  42. '5433',
  43. '--protocol',
  44. 'tcp',
  45. '--databases',
  46. 'foo',
  47. ),
  48. output_file=output_file,
  49. extra_environment=None,
  50. ).once()
  51. module.dump_databases(databases, 'test.yaml', dry_run=False)
  52. def test_dump_databases_runs_mysqldump_with_username_and_password():
  53. databases = [{'name': 'foo', 'username': 'root', 'password': 'trustsome1'}]
  54. output_file = flexmock()
  55. flexmock(module.dump).should_receive('make_database_dump_filename').and_return(
  56. 'databases/localhost/foo'
  57. )
  58. flexmock(module.os).should_receive('makedirs')
  59. flexmock(sys.modules['builtins']).should_receive('open').and_return(output_file)
  60. flexmock(module).should_receive('execute_command').with_args(
  61. ('mysqldump', '--add-drop-database', '--user', 'root', '--databases', 'foo'),
  62. output_file=output_file,
  63. extra_environment={'MYSQL_PWD': 'trustsome1'},
  64. ).once()
  65. module.dump_databases(databases, 'test.yaml', dry_run=False)
  66. def test_dump_databases_runs_mysqldump_with_options():
  67. databases = [{'name': 'foo', 'options': '--stuff=such'}]
  68. output_file = flexmock()
  69. flexmock(module.dump).should_receive('make_database_dump_filename').and_return(
  70. 'databases/localhost/foo'
  71. )
  72. flexmock(module.os).should_receive('makedirs')
  73. flexmock(sys.modules['builtins']).should_receive('open').and_return(output_file)
  74. flexmock(module).should_receive('execute_command').with_args(
  75. ('mysqldump', '--add-drop-database', '--stuff=such', '--databases', 'foo'),
  76. output_file=output_file,
  77. extra_environment=None,
  78. ).once()
  79. module.dump_databases(databases, 'test.yaml', dry_run=False)
  80. def test_dump_databases_runs_mysqldump_for_all_databases():
  81. databases = [{'name': 'all'}]
  82. output_file = flexmock()
  83. flexmock(module.dump).should_receive('make_database_dump_filename').and_return(
  84. 'databases/localhost/all'
  85. )
  86. flexmock(module.os).should_receive('makedirs')
  87. flexmock(sys.modules['builtins']).should_receive('open').and_return(output_file)
  88. flexmock(module).should_receive('execute_command').with_args(
  89. ('mysqldump', '--add-drop-database', '--all-databases'),
  90. output_file=output_file,
  91. extra_environment=None,
  92. ).once()
  93. module.dump_databases(databases, 'test.yaml', dry_run=False)