2012-05-13 04:31:58 +00:00
|
|
|
'''
|
|
|
|
Tests for the file state
|
|
|
|
'''
|
|
|
|
import os
|
2012-08-05 18:23:12 +00:00
|
|
|
import shutil
|
2012-05-13 04:31:58 +00:00
|
|
|
import integration
|
|
|
|
|
2012-05-29 16:40:20 +00:00
|
|
|
|
2012-05-13 04:31:58 +00:00
|
|
|
class FileTest(integration.ModuleCase):
|
|
|
|
'''
|
|
|
|
Validate the file state
|
|
|
|
'''
|
2012-08-05 18:23:12 +00:00
|
|
|
|
2012-05-13 04:31:58 +00:00
|
|
|
def test_symlink(self):
|
|
|
|
'''
|
|
|
|
file.symlink
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'symlink')
|
|
|
|
tgt = os.path.join(integration.TMP, 'target')
|
|
|
|
ret = self.run_state('file.symlink', name=name, target=tgt)
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 04:31:58 +00:00
|
|
|
self.assertTrue(result)
|
2012-05-13 04:41:47 +00:00
|
|
|
|
|
|
|
def test_test_symlink(self):
|
|
|
|
'''
|
|
|
|
file.symlink test interface
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'symlink')
|
|
|
|
tgt = os.path.join(integration.TMP, 'target')
|
|
|
|
ret = self.run_state('file.symlink', test=True, name=name, target=tgt)
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 04:41:47 +00:00
|
|
|
self.assertIsNone(result)
|
|
|
|
|
2012-05-13 04:55:28 +00:00
|
|
|
def test_absent_file(self):
|
|
|
|
'''
|
|
|
|
file.absent
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'file_to_kill')
|
|
|
|
with open(name, 'w+') as fp_:
|
|
|
|
fp_.write('killme')
|
|
|
|
ret = self.run_state('file.absent', name=name)
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 04:55:28 +00:00
|
|
|
self.assertTrue(result)
|
|
|
|
self.assertFalse(os.path.isfile(name))
|
|
|
|
|
|
|
|
def test_absent_dir(self):
|
|
|
|
'''
|
|
|
|
file.absent
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'dir_to_kill')
|
|
|
|
os.makedirs(name)
|
|
|
|
ret = self.run_state('file.absent', name=name)
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 04:55:28 +00:00
|
|
|
self.assertTrue(result)
|
|
|
|
self.assertFalse(os.path.isdir(name))
|
2012-05-13 14:18:05 +00:00
|
|
|
|
2012-05-13 04:55:28 +00:00
|
|
|
def test_absent_link(self):
|
|
|
|
'''
|
|
|
|
file.absent
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'link_to_kill')
|
2012-08-05 18:29:56 +00:00
|
|
|
os.symlink(name, '{0}.tgt'.format(name))
|
2012-05-13 04:55:28 +00:00
|
|
|
ret = self.run_state('file.absent', name=name)
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 04:55:28 +00:00
|
|
|
self.assertTrue(result)
|
|
|
|
self.assertFalse(os.path.islink(name))
|
2012-05-13 04:58:26 +00:00
|
|
|
|
2012-05-13 05:19:39 +00:00
|
|
|
def test_test_absent(self):
|
2012-05-13 04:58:26 +00:00
|
|
|
'''
|
|
|
|
file.absent test interface
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'file_to_kill')
|
|
|
|
with open(name, 'w+') as fp_:
|
|
|
|
fp_.write('killme')
|
|
|
|
ret = self.run_state('file.absent', test=True, name=name)
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 04:58:26 +00:00
|
|
|
self.assertIsNone(result)
|
|
|
|
self.assertTrue(os.path.isfile(name))
|
2012-08-05 18:23:12 +00:00
|
|
|
os.remove(name)
|
2012-05-13 05:19:39 +00:00
|
|
|
|
|
|
|
def test_managed(self):
|
|
|
|
'''
|
|
|
|
file.managed
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'grail_scene33')
|
|
|
|
ret = self.run_state(
|
2012-08-05 18:23:12 +00:00
|
|
|
'file.managed', name=name, source='salt://grail/scene33'
|
|
|
|
)
|
2012-05-13 05:19:39 +00:00
|
|
|
src = os.path.join(
|
2012-08-05 18:23:12 +00:00
|
|
|
integration.FILES, 'file', 'base', 'grail', 'scene33'
|
|
|
|
)
|
2012-05-13 05:19:39 +00:00
|
|
|
with open(src, 'r') as fp_:
|
|
|
|
master_data = fp_.read()
|
|
|
|
with open(name, 'r') as fp_:
|
|
|
|
minion_data = fp_.read()
|
|
|
|
self.assertEqual(master_data, minion_data)
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 05:19:39 +00:00
|
|
|
self.assertTrue(result)
|
|
|
|
|
2012-05-13 05:27:00 +00:00
|
|
|
def test_test_managed(self):
|
|
|
|
'''
|
|
|
|
file.managed test interface
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'grail_not_scene33')
|
|
|
|
ret = self.run_state(
|
2012-08-05 18:23:12 +00:00
|
|
|
'file.managed', test=True, name=name, source='salt://grail/scene33'
|
|
|
|
)
|
2012-05-13 05:27:00 +00:00
|
|
|
self.assertFalse(os.path.isfile(name))
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 05:27:00 +00:00
|
|
|
self.assertIsNone(result)
|
2012-05-13 05:38:24 +00:00
|
|
|
|
|
|
|
def test_directory(self):
|
|
|
|
'''
|
|
|
|
file.directory
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'a_new_dir')
|
2012-08-05 18:23:12 +00:00
|
|
|
ret = self.run_state('file.directory', name=name)
|
2012-05-13 05:38:24 +00:00
|
|
|
self.assertTrue(os.path.isdir(name))
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 05:38:24 +00:00
|
|
|
self.assertTrue(result)
|
|
|
|
|
2012-05-13 06:27:00 +00:00
|
|
|
def test_test_directory(self):
|
|
|
|
'''
|
|
|
|
file.directory
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'a_not_dir')
|
2012-08-05 18:23:12 +00:00
|
|
|
ret = self.run_state('file.directory', test=True, name=name)
|
2012-05-13 06:27:00 +00:00
|
|
|
self.assertFalse(os.path.isdir(name))
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 06:27:00 +00:00
|
|
|
self.assertIsNone(result)
|
2012-05-13 06:54:28 +00:00
|
|
|
|
|
|
|
def test_recurse(self):
|
|
|
|
'''
|
|
|
|
file.recurse
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'recurse_dir')
|
2012-08-05 18:23:12 +00:00
|
|
|
ret = self.run_state('file.recurse', name=name, source='salt://grail')
|
2012-05-13 06:54:28 +00:00
|
|
|
self.assertTrue(os.path.isfile(os.path.join(name, '36', 'scene')))
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 06:54:28 +00:00
|
|
|
self.assertTrue(result)
|
2012-08-05 18:23:12 +00:00
|
|
|
shutil.rmtree(name, ignore_errors=True)
|
2012-05-13 06:54:28 +00:00
|
|
|
|
2012-05-13 07:02:05 +00:00
|
|
|
def test_test_recurse(self):
|
|
|
|
'''
|
|
|
|
file.recurse test interface
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'recurse_test_dir')
|
|
|
|
ret = self.run_state(
|
2012-08-05 18:23:12 +00:00
|
|
|
'file.recurse', test=True, name=name, source='salt://grail',
|
|
|
|
)
|
2012-05-13 07:02:05 +00:00
|
|
|
self.assertFalse(os.path.isfile(os.path.join(name, '36', 'scene')))
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 07:02:05 +00:00
|
|
|
self.assertIsNone(result)
|
2012-08-05 18:23:12 +00:00
|
|
|
os.removedirs(name)
|
2012-05-13 07:02:05 +00:00
|
|
|
|
2012-05-13 07:20:28 +00:00
|
|
|
def test_sed(self):
|
|
|
|
'''
|
|
|
|
file.sed
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'sed_test')
|
|
|
|
with open(name, 'w+') as fp_:
|
|
|
|
fp_.write('change_me')
|
|
|
|
ret = self.run_state(
|
2012-08-05 18:23:12 +00:00
|
|
|
'file.sed', name=name, before='change', after='salt'
|
|
|
|
)
|
2012-05-13 07:20:28 +00:00
|
|
|
with open(name, 'r') as fp_:
|
|
|
|
self.assertIn('salt', fp_.read())
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 07:20:28 +00:00
|
|
|
self.assertTrue(result)
|
2012-08-05 18:23:12 +00:00
|
|
|
os.remove(name)
|
2012-05-13 07:24:26 +00:00
|
|
|
|
|
|
|
def test_test_sed(self):
|
|
|
|
'''
|
|
|
|
file.sed test integration
|
|
|
|
'''
|
2012-05-13 07:35:01 +00:00
|
|
|
name = os.path.join(integration.TMP, 'sed_test_test')
|
2012-05-13 07:24:26 +00:00
|
|
|
with open(name, 'w+') as fp_:
|
|
|
|
fp_.write('change_me')
|
|
|
|
ret = self.run_state(
|
2012-08-05 18:23:12 +00:00
|
|
|
'file.sed', test=True, name=name, before='change', after='salt'
|
|
|
|
)
|
2012-05-13 07:24:26 +00:00
|
|
|
with open(name, 'r') as fp_:
|
|
|
|
self.assertIn('change', fp_.read())
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 07:24:26 +00:00
|
|
|
self.assertIsNone(result)
|
2012-08-05 18:23:12 +00:00
|
|
|
os.remove(name)
|
2012-05-13 07:35:01 +00:00
|
|
|
|
|
|
|
def test_comment(self):
|
|
|
|
'''
|
|
|
|
file.comment
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'comment_test')
|
2012-05-25 06:38:57 +00:00
|
|
|
# write a line to file
|
2012-05-13 07:35:01 +00:00
|
|
|
with open(name, 'w+') as fp_:
|
|
|
|
fp_.write('comment_me')
|
2012-05-25 06:38:57 +00:00
|
|
|
# comment once
|
|
|
|
_ret = self.run_state('file.comment', name=name, regex='^comment')
|
|
|
|
# line is commented
|
2012-05-13 07:35:01 +00:00
|
|
|
with open(name, 'r') as fp_:
|
2012-05-25 06:38:57 +00:00
|
|
|
self.assertTrue(fp_.read().startswith('#comment'))
|
|
|
|
# result is positive
|
2012-06-04 22:40:34 +00:00
|
|
|
ret = list(_ret.values())[0]
|
2012-05-25 06:38:57 +00:00
|
|
|
self.assertTrue(ret['result'], ret)
|
|
|
|
# comment twice
|
|
|
|
_ret = self.run_state('file.comment', name=name, regex='^comment')
|
|
|
|
# line is still commented
|
|
|
|
with open(name, 'r') as fp_:
|
|
|
|
self.assertTrue(fp_.read().startswith('#comment'))
|
|
|
|
# result is still positive
|
2012-06-04 22:40:34 +00:00
|
|
|
ret = list(_ret.values())[0]
|
2012-05-25 06:38:57 +00:00
|
|
|
self.assertTrue(ret['result'], ret)
|
2012-08-05 18:23:12 +00:00
|
|
|
os.remove(name)
|
2012-05-13 07:38:31 +00:00
|
|
|
|
|
|
|
def test_test_comment(self):
|
|
|
|
'''
|
|
|
|
file.comment test interface
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'comment_test_test')
|
|
|
|
with open(name, 'w+') as fp_:
|
|
|
|
fp_.write('comment_me')
|
|
|
|
ret = self.run_state(
|
2012-08-05 18:23:12 +00:00
|
|
|
'file.comment', test=True, name=name, regex='.*comment.*',
|
|
|
|
)
|
2012-05-13 07:38:31 +00:00
|
|
|
with open(name, 'r') as fp_:
|
|
|
|
self.assertNotIn('#comment', fp_.read())
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 07:38:31 +00:00
|
|
|
self.assertIsNone(result)
|
2012-08-05 18:23:12 +00:00
|
|
|
os.remove(name)
|
2012-05-13 07:54:20 +00:00
|
|
|
|
|
|
|
def test_uncomment(self):
|
|
|
|
'''
|
|
|
|
file.uncomment
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'uncomment_test')
|
|
|
|
with open(name, 'w+') as fp_:
|
|
|
|
fp_.write('#comment_me')
|
2012-05-25 06:38:57 +00:00
|
|
|
ret = self.run_state('file.uncomment', name=name, regex='^comment')
|
2012-05-13 07:54:20 +00:00
|
|
|
with open(name, 'r') as fp_:
|
|
|
|
self.assertNotIn('#comment', fp_.read())
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 07:54:20 +00:00
|
|
|
self.assertTrue(result)
|
2012-08-05 18:23:12 +00:00
|
|
|
os.remove(name)
|
2012-05-13 07:54:20 +00:00
|
|
|
|
|
|
|
def test_test_uncomment(self):
|
|
|
|
'''
|
|
|
|
file.comment test interface
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'uncomment_test_test')
|
|
|
|
with open(name, 'w+') as fp_:
|
|
|
|
fp_.write('#comment_me')
|
|
|
|
ret = self.run_state(
|
2012-08-05 18:23:12 +00:00
|
|
|
'file.uncomment', test=True, name=name, regex='^comment.*'
|
|
|
|
)
|
2012-05-13 07:54:20 +00:00
|
|
|
with open(name, 'r') as fp_:
|
|
|
|
self.assertIn('#comment', fp_.read())
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 07:54:20 +00:00
|
|
|
self.assertIsNone(result)
|
2012-08-05 18:23:12 +00:00
|
|
|
os.remove(name)
|
2012-05-13 08:00:01 +00:00
|
|
|
|
|
|
|
def test_append(self):
|
|
|
|
'''
|
|
|
|
file.append
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'append_test')
|
|
|
|
with open(name, 'w+') as fp_:
|
|
|
|
fp_.write('#salty!')
|
2012-08-05 18:23:12 +00:00
|
|
|
ret = self.run_state('file.append', name=name, text='cheese')
|
2012-05-13 08:00:01 +00:00
|
|
|
with open(name, 'r') as fp_:
|
|
|
|
self.assertIn('cheese', fp_.read())
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 08:00:01 +00:00
|
|
|
self.assertTrue(result)
|
2012-08-05 18:23:12 +00:00
|
|
|
os.remove(name)
|
2012-05-13 08:00:01 +00:00
|
|
|
|
2012-05-13 08:02:20 +00:00
|
|
|
def test_test_append(self):
|
|
|
|
'''
|
|
|
|
file.append test interface
|
|
|
|
'''
|
2012-05-13 08:06:46 +00:00
|
|
|
name = os.path.join(integration.TMP, 'append_test_test')
|
2012-05-13 08:02:20 +00:00
|
|
|
with open(name, 'w+') as fp_:
|
|
|
|
fp_.write('#salty!')
|
2012-08-05 18:23:12 +00:00
|
|
|
ret = self.run_state('file.append', test=True, name=name, text='cheese')
|
2012-05-13 08:02:20 +00:00
|
|
|
with open(name, 'r') as fp_:
|
|
|
|
self.assertNotIn('cheese', fp_.read())
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 08:02:20 +00:00
|
|
|
self.assertIsNone(result)
|
2012-08-05 18:23:12 +00:00
|
|
|
os.remove(name)
|
2012-05-13 08:06:46 +00:00
|
|
|
|
|
|
|
def test_touch(self):
|
|
|
|
'''
|
|
|
|
file.touch
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'touch_test')
|
2012-08-05 18:23:12 +00:00
|
|
|
ret = self.run_state('file.touch', name=name)
|
2012-05-13 08:06:46 +00:00
|
|
|
self.assertTrue(os.path.isfile(name))
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 08:06:46 +00:00
|
|
|
self.assertTrue(result)
|
2012-08-05 18:23:12 +00:00
|
|
|
os.remove(name)
|
2012-05-13 08:06:46 +00:00
|
|
|
|
2012-05-13 08:07:54 +00:00
|
|
|
def test_test_touch(self):
|
|
|
|
'''
|
|
|
|
file.touch test interface
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'touch_test')
|
2012-08-05 18:23:12 +00:00
|
|
|
ret = self.run_state('file.touch', test=True, name=name)
|
2012-05-13 08:07:54 +00:00
|
|
|
self.assertFalse(os.path.isfile(name))
|
2012-06-01 18:03:17 +00:00
|
|
|
result = ret[next(iter(ret))]['result']
|
2012-05-13 08:07:54 +00:00
|
|
|
self.assertIsNone(result)
|
2012-05-25 06:38:57 +00:00
|
|
|
|
2012-08-05 18:23:12 +00:00
|
|
|
def test_touch_directory(self):
|
|
|
|
'''
|
|
|
|
file.touch a directory
|
|
|
|
'''
|
|
|
|
name = os.path.join(integration.TMP, 'touch_test_dir')
|
|
|
|
try:
|
|
|
|
os.makedirs(name)
|
|
|
|
except OSError:
|
2012-08-05 18:31:13 +00:00
|
|
|
self.skipTest("Failed to create directory {0}".format(name))
|
2012-08-05 18:23:12 +00:00
|
|
|
|
|
|
|
self.assertTrue(os.path.isdir(name))
|
|
|
|
ret = self.run_state('file.touch', name=name)
|
|
|
|
result = ret[next(iter(ret))]['result']
|
|
|
|
self.assertTrue(result)
|
|
|
|
self.assertTrue(os.path.isdir(name))
|
|
|
|
os.removedirs(name)
|
|
|
|
|
2012-05-25 06:38:57 +00:00
|
|
|
|
2012-07-20 06:21:01 +00:00
|
|
|
if __name__ == '__main__':
|
|
|
|
from integration import run_tests
|
|
|
|
run_tests(FileTest)
|