test_cp.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. # -*- coding: utf-8 -*-
  2. """
  3. :codeauthor: Pedro Algarvio (pedro@algarvio.me)
  4. tests.integration.shell.cp
  5. ~~~~~~~~~~~~~~~~~~~~~~~~~~
  6. """
  7. from __future__ import absolute_import
  8. import logging
  9. import os
  10. import pipes
  11. import pytest
  12. import salt.utils.files
  13. import salt.utils.platform
  14. import salt.utils.yaml
  15. from salt.ext import six
  16. from tests.support.case import ShellCase
  17. from tests.support.mixins import ShellCaseCommonTestsMixin
  18. from tests.support.runtests import RUNTIME_VARS
  19. from tests.support.unit import skipIf
  20. log = logging.getLogger(__name__)
  21. @pytest.mark.windows_whitelisted
  22. class CopyTest(ShellCase, ShellCaseCommonTestsMixin):
  23. _call_binary_ = "salt-cp"
  24. @skipIf(True, "SLOWTEST skip")
  25. def test_cp_testfile(self):
  26. """
  27. test salt-cp
  28. """
  29. minions = []
  30. for line in self.run_salt('--out yaml "*" test.ping'):
  31. if not line:
  32. continue
  33. data = salt.utils.yaml.safe_load(line)
  34. minions.extend(data.keys())
  35. self.assertNotEqual(minions, [])
  36. testfile = os.path.abspath(
  37. os.path.join(
  38. os.path.dirname(os.path.dirname(__file__)),
  39. "files",
  40. "file",
  41. "base",
  42. "testfile",
  43. )
  44. )
  45. with salt.utils.files.fopen(testfile, "r") as fh_:
  46. testfile_contents = fh_.read()
  47. def quote(arg):
  48. if salt.utils.platform.is_windows():
  49. return arg
  50. return pipes.quote(arg)
  51. for idx, minion in enumerate(minions):
  52. if "localhost" in minion:
  53. continue
  54. ret = self.run_salt(
  55. "--out yaml {0} file.directory_exists {1}".format(
  56. quote(minion), RUNTIME_VARS.TMP
  57. )
  58. )
  59. data = salt.utils.yaml.safe_load("\n".join(ret))
  60. if data[minion] is False:
  61. ret = self.run_salt(
  62. "--out yaml {0} file.makedirs {1}".format(
  63. quote(minion), RUNTIME_VARS.TMP
  64. )
  65. )
  66. data = salt.utils.yaml.safe_load("\n".join(ret))
  67. self.assertTrue(data[minion])
  68. minion_testfile = os.path.join(
  69. RUNTIME_VARS.TMP, "cp_{0}_testfile".format(idx)
  70. )
  71. ret = self.run_cp(
  72. "--out pprint {0} {1} {2}".format(
  73. quote(minion), quote(testfile), quote(minion_testfile),
  74. )
  75. )
  76. data = eval("\n".join(ret), {}, {}) # pylint: disable=eval-used
  77. for part in six.itervalues(data):
  78. key = minion_testfile
  79. self.assertTrue(part[key])
  80. ret = self.run_salt(
  81. "--out yaml {0} file.file_exists {1}".format(
  82. quote(minion), quote(minion_testfile)
  83. )
  84. )
  85. data = salt.utils.yaml.safe_load("\n".join(ret))
  86. self.assertTrue(data[minion])
  87. ret = self.run_salt(
  88. "--out yaml {0} file.contains {1} {2}".format(
  89. quote(minion), quote(minion_testfile), quote(testfile_contents)
  90. )
  91. )
  92. data = salt.utils.yaml.safe_load("\n".join(ret))
  93. self.assertTrue(data[minion])
  94. ret = self.run_salt(
  95. "--out yaml {0} file.remove {1}".format(
  96. quote(minion), quote(minion_testfile)
  97. )
  98. )
  99. data = salt.utils.yaml.safe_load("\n".join(ret))
  100. self.assertTrue(data[minion])