+++ /dev/null
-#!/usr/bin/env python
-
-"""
-Build a fake directory tree for testing rsync management code.
-"""
-
-import os
-import random
-
-def make_random_string(length=8):
- """Make a random string, length characters long
- """
- symbols = "abcdefhijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
- name = []
- for i in xrange(length):
- name.append(random.choice(symbols))
- return "".join(name)
-
-def make_file(pathname):
- """Make a file with some random stuff in it
- """
- stream = open(pathname,'w')
- stream.write(make_random_string(16))
- stream.close()
-
-def make_tree(root, depth=3, directories=5, files=10):
- """
- Make a tree of random directories and files
-
- depth is how many levels of subdirectories
- directories is how many directories each subdirectory should have
- files is how many files to create in each directory
- """
- if not os.path.exists(root):
- os.mkdir(root)
-
- paths = []
- # make files
- for i in range(files):
- name = make_random_string()
- paths.append(name)
- pathname = os.path.join(root, name)
- make_file(pathname)
-
- # make subdirectories if we still have some depth to go
- if depth > 0:
- for i in range(directories):
- name = make_random_string()
- # paths.append(name)
- pathname = os.path.join(root, name)
- subpaths = make_tree(pathname, depth-1, directories, files)
- paths.extend([ os.path.join(name, x) for x in subpaths ])
-
- return paths
-
-def generate_paths(root):
- """Make a list of relative paths like generated by make_tree
- """
- paths = []
- for curdir, subdirs, files in os.walk(root):
- paths.extend([ os.path.join(curdir, f) for f in files ])
-
- # an inefficient way of getting the correct common prefix
- # (e.g. root might not have a trailing /)
- common_root = os.path.commonprefix(paths)
- common_len = len(common_root)
- return [ p[common_len:] for p in paths ]
-
-def compare_tree(root, paths, verbose=False):
- """Make sure the tree matches our relative list of paths
- """
- # what we find when we look
- experimental_set = set(generate_paths(root))
- # what we expect
- theoretical_set = set(paths)
- # true if the difference of the two sets is the empty set
- difference = experimental_set - theoretical_set
- issame = (len(difference) == 0)
- if verbose and not issame:
- print difference
- return issame