text: # -*- coding: utf-8 -*-
  
  # Import python libs
  from __future__ import absolute_import
  import os
  from os.path import join
  from shutil import rmtree
  from tempfile import mkdtemp
  
  # Import Salt Testing libs
  from salttesting import TestCase
  from salttesting.helpers import ensure_in_syspath
  ensure_in_syspath('../../')
  
  # Import salt libs
  import integration
  import salt.utils
  import salt.utils.find
  
  
  class TestUtils(TestCase):
  
      def test_safe_walk_symlink_recursion(self):
          tmp = mkdtemp(dir=integration.SYS_TMP_DIR)
          try:
              if os.stat(tmp).st_ino == 0:
                  self.skipTest('inodes not supported in {0}'.format(tmp))
              os.mkdir(join(tmp, 'fax'))
              os.makedirs(join(tmp, 'foo/bar'))
              os.symlink('../..', join(tmp, 'foo/bar/baz'))
              os.symlink('foo', join(tmp, 'root'))
              expected = [
                  (join(tmp, 'root'), ['bar'], []),
                  (join(tmp, 'root/bar'), ['baz'], []),
                  (join(tmp, 'root/bar/baz'), ['fax', 'foo', 'root'], []),
                  (join(tmp, 'root/bar/baz/fax'), [], []),
              ]
              paths = []
              for root, dirs, names in salt.utils.safe_walk(join(tmp, 'root')):
                  paths.append((root, sorted(dirs), names))
              if paths != expected:
                  raise AssertionError(
                      '\n'.join(
                          ['got:'] + [repr(p) for p in paths] +
                          ['', 'expected:'] + [repr(p) for p in expected]
                      )
                  )
          finally:
              rmtree(tmp)
  
  
  if __name__ == '__main__':
      from integration import run_tests
      run_tests(TestUtils, needs_daemon=False)
  