Guest User

Untitled

a guest
Dec 15th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.60 KB | None | 0 0
  1. diff --git a/test/functional/test_versioned_writes.py b/test/functional/test_versioned_writes.py
  2. index 9cd7b3b..4dc325f 100644
  3. --- a/test/functional/test_versioned_writes.py
  4. +++ b/test/functional/test_versioned_writes.py
  5. @@ -794,3 +794,87 @@ class TestSloWithVersioning(unittest2.TestCase):
  6. # expect the original manifest file to be restored
  7. self._assert_is_manifest(file_item, 'a')
  8. self._assert_is_object(file_item, 'a')
  9. +
  10. +
  11. +class TestSymlinkWithVersioning(unittest2.TestCase):
  12. +
  13. + def setUp(self):
  14. + if 'symlink' not in cluster_info:
  15. + raise SkipTest("Symlinks not enabled")
  16. + if tf.in_process:
  17. + tf.skip_if_no_xattrs()
  18. + self.conn = Connection(tf.config)
  19. + self.conn.authenticate()
  20. + self.account = Account(
  21. + self.conn, tf.config.get('account', tf.config['username']))
  22. + self.account.delete_containers()
  23. + self.versions_container = self.account.container(Utils.create_name())
  24. + self.container = self.account.container(Utils.create_name())
  25. + if not self.container.create(
  26. + hdrs={'X-Versions-Location': self.versions_container.name}):
  27. + raise ResponseError(self.conn.response)
  28. + if 'versions' not in self.container.info():
  29. + raise SkipTest("Object versioning not enabled")
  30. + if not self.versions_container.create():
  31. + raise ResponseError(self.conn.response)
  32. +
  33. + self.target = self.container.file('target-object')
  34. + self.target.write('target object data')
  35. + self.symlink = self.container.file('symlink')
  36. + self.symlink.write('', hdrs={
  37. + 'Content-Type': 'application/symlink',
  38. + 'x-symlink-target': '%s/%s' % (
  39. + self.container.name, self.target.name)})
  40. +
  41. + def test_copy_destination_restore_symlink(self):
  42. + self.symlink.write('this is not a symlink')
  43. + # the symlink is versioned
  44. + version_container_files = self.versions_container.files(
  45. + parms={'format': 'json'})
  46. + self.assertEqual(1, len(version_container_files))
  47. + versioned_obj_info = version_container_files[0]
  48. + self.assertEqual('application/symlink',
  49. + versioned_obj_info['content_type'])
  50. + versioned_obj = self.versions_container.file(
  51. + versioned_obj_info['name'])
  52. + # the symlink is still a symlink
  53. + self.assertEqual('target object data', versioned_obj.read())
  54. + self.assertEqual(self.target.info(), versioned_obj.info())
  55. + self.assertEqual('application/symlink',
  56. + versioned_obj.info(parms={
  57. + 'symlink': 'get'})['content_type'])
  58. + # test manual restore (this creates a new backup of the overwrite)
  59. + versioned_obj.copy(self.container.name, self.symlink.name,
  60. + parms={'symlink': 'get'})
  61. + self.assertEqual('target object data', self.symlink.read())
  62. + self.assertEqual(self.target.info(), self.symlink.info())
  63. + self.assertEqual('application/symlink',
  64. + self.symlink.info(parms={
  65. + 'symlink': 'get'})['content_type'])
  66. + # and versioned writes restore
  67. + self.symlink.delete()
  68. + self.assertEqual(1, self.versions_container.info()['object_count'])
  69. + self.assertEqual('this is not a symlink', self.symlink.read())
  70. + self.symlink.delete()
  71. + self.assertEqual(0, self.versions_container.info()['object_count'])
  72. + self.assertEqual('target object data', self.symlink.read())
  73. + self.assertEqual(self.target.info(), self.symlink.info())
  74. + self.assertEqual('application/symlink',
  75. + self.symlink.info(parms={
  76. + 'symlink': 'get'})['content_type'])
  77. +
  78. + def test_put_x_copy_from_restore_symlink(self):
  79. + self.symlink.write('this is not a symlink')
  80. + version_container_files = self.versions_container.files()
  81. + self.assertEqual(1, len(version_container_files))
  82. + versioned_obj = self.versions_container.file(
  83. + version_container_files[0])
  84. + self.symlink.write(parms={'symlink': 'get'}, cfg={
  85. + 'no_content_type': True}, hdrs={
  86. + 'x-copy-from': '%s/%s' % (
  87. + self.versions_container, versioned_obj.name)})
  88. + self.assertEqual('target object data', self.symlink.read())
  89. + self.assertEqual(self.target.info(), self.symlink.info())
  90. + self.assertEqual('application/symlink',
  91. + self.symlink.info(parms={
  92. + 'symlink': 'get'})['content_type'])
Add Comment
Please, Sign In to add comment