mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-08-25 10:45:41 +00:00
New file with a little torture test. It does a bunch of file operations on
2006-10-19 Federico Mena Quintero <federico@novell.com> * test/file-torture.py: New file with a little torture test. It does a bunch of file operations on a directory. Nautilus sometimes crashes when viewing that directory, so this should help us find bugs.
This commit is contained in:
parent
479b32f554
commit
452167e8fa
|
@ -1,3 +1,10 @@
|
||||||
|
2006-10-19 Federico Mena Quintero <federico@novell.com>
|
||||||
|
|
||||||
|
* test/file-torture.py: New file with a little torture test. It
|
||||||
|
does a bunch of file operations on a directory. Nautilus
|
||||||
|
sometimes crashes when viewing that directory, so this should help
|
||||||
|
us find bugs.
|
||||||
|
|
||||||
2006-10-19 Christian Neumair <chris@gnome-de.org>
|
2006-10-19 Christian Neumair <chris@gnome-de.org>
|
||||||
|
|
||||||
* libnautilus-private/nautilus-file.c:
|
* libnautilus-private/nautilus-file.c:
|
||||||
|
|
267
test/file-torture.py
Normal file
267
test/file-torture.py
Normal file
|
@ -0,0 +1,267 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
#
|
||||||
|
# file-torture.py - Simple torture test for file notificatins in Nautilus
|
||||||
|
# Copyright (C) 2006 Federico Mena-Quintero
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along
|
||||||
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
#
|
||||||
|
# Author: Federico Mena-Quintero <federico@novell.com>
|
||||||
|
|
||||||
|
import random
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import optparse
|
||||||
|
import time
|
||||||
|
|
||||||
|
output_dir = ""
|
||||||
|
random_gen = None
|
||||||
|
verbose = False
|
||||||
|
|
||||||
|
extensions = (".doc", ".gif", ".jpg", ".png", ".xls", ".odt", ".odp", ".ods", ".txt", ".zip", ".gz")
|
||||||
|
|
||||||
|
files = []
|
||||||
|
directories = []
|
||||||
|
|
||||||
|
def get_random_file_index ():
|
||||||
|
n = len (files)
|
||||||
|
if n == 0:
|
||||||
|
return -1
|
||||||
|
else:
|
||||||
|
return random_gen.randrange (n)
|
||||||
|
|
||||||
|
def get_random_directory_index ():
|
||||||
|
n = len (directories)
|
||||||
|
if n == 0:
|
||||||
|
return -1
|
||||||
|
else:
|
||||||
|
return random_gen.randrange (n)
|
||||||
|
|
||||||
|
def get_random_filename ():
|
||||||
|
chars = []
|
||||||
|
for i in range (20):
|
||||||
|
chars.append ("abcdefghijklmnopqrstuvwxyz"[random_gen.randrange (26)])
|
||||||
|
|
||||||
|
extension = extensions[random_gen.randrange (len (extensions))]
|
||||||
|
filename = "".join (chars) + extension
|
||||||
|
return filename
|
||||||
|
|
||||||
|
def get_random_path ():
|
||||||
|
return os.path.join (output_dir, get_random_filename ())
|
||||||
|
|
||||||
|
def op_create_file ():
|
||||||
|
filename = get_random_path ()
|
||||||
|
files.append (filename)
|
||||||
|
f = open (filename, "w")
|
||||||
|
f.close ()
|
||||||
|
|
||||||
|
if verbose:
|
||||||
|
print 'create file %s' % filename
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def op_move_file ():
|
||||||
|
idx = get_random_file_index ()
|
||||||
|
if idx == -1:
|
||||||
|
return False
|
||||||
|
|
||||||
|
new_name = get_random_path ()
|
||||||
|
old_name = files[idx]
|
||||||
|
os.rename (old_name, new_name)
|
||||||
|
files[idx] = new_name
|
||||||
|
|
||||||
|
if verbose:
|
||||||
|
print 'rename file %s to %s' % (old_name, new_name)
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def op_delete_file ():
|
||||||
|
idx = get_random_file_index ()
|
||||||
|
if idx == -1:
|
||||||
|
return False
|
||||||
|
|
||||||
|
filename = files[idx]
|
||||||
|
|
||||||
|
os.unlink (filename)
|
||||||
|
files.pop (idx)
|
||||||
|
|
||||||
|
if verbose:
|
||||||
|
print 'delete file %s' % filename
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def op_write_file ():
|
||||||
|
idx = get_random_file_index ()
|
||||||
|
if idx == -1:
|
||||||
|
return False
|
||||||
|
|
||||||
|
name = files[idx]
|
||||||
|
f = open (name, "a")
|
||||||
|
f.write ("blah blah blah blah blah blah blah\n")
|
||||||
|
f.close ()
|
||||||
|
|
||||||
|
if verbose:
|
||||||
|
print 'write to file %s' % name
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def op_create_dir ():
|
||||||
|
name = get_random_path ()
|
||||||
|
os.mkdir (name)
|
||||||
|
directories.append (name)
|
||||||
|
|
||||||
|
if verbose:
|
||||||
|
print 'create directory %s' % name
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def op_move_dir ():
|
||||||
|
idx = get_random_directory_index ()
|
||||||
|
if idx == -1:
|
||||||
|
return False
|
||||||
|
|
||||||
|
new_name = get_random_path ()
|
||||||
|
old_name = directories[idx]
|
||||||
|
os.rename (old_name, new_name)
|
||||||
|
directories[idx] = new_name
|
||||||
|
|
||||||
|
if verbose:
|
||||||
|
print 'move directory %s to %s' % (old_name, new_name)
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def op_delete_dir ():
|
||||||
|
idx = get_random_directory_index ()
|
||||||
|
if idx == -1:
|
||||||
|
return False
|
||||||
|
|
||||||
|
name = directories[idx]
|
||||||
|
os.rmdir (name)
|
||||||
|
directories.pop (idx)
|
||||||
|
|
||||||
|
if verbose:
|
||||||
|
print 'delete directory %s' % name
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def op_file_to_dir ():
|
||||||
|
idx = get_random_file_index ()
|
||||||
|
if idx == -1:
|
||||||
|
return False
|
||||||
|
|
||||||
|
name = files[idx]
|
||||||
|
os.unlink (name)
|
||||||
|
files.pop (idx)
|
||||||
|
os.mkdir (name)
|
||||||
|
directories.append (name)
|
||||||
|
|
||||||
|
if verbose:
|
||||||
|
print 'file to dir %s' % name
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def op_dir_to_file ():
|
||||||
|
idx = get_random_directory_index ()
|
||||||
|
if idx == -1:
|
||||||
|
return False
|
||||||
|
|
||||||
|
name = directories[idx]
|
||||||
|
os.rmdir (name)
|
||||||
|
directories.pop (idx)
|
||||||
|
f = open (name, "w")
|
||||||
|
f.close ()
|
||||||
|
files.append (name)
|
||||||
|
|
||||||
|
if verbose:
|
||||||
|
print 'dir to file %s' % name
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
operations = (
|
||||||
|
op_create_file,
|
||||||
|
op_move_file,
|
||||||
|
op_delete_file,
|
||||||
|
op_write_file,
|
||||||
|
op_create_dir,
|
||||||
|
op_move_dir,
|
||||||
|
op_delete_dir,
|
||||||
|
op_file_to_dir,
|
||||||
|
op_dir_to_file,
|
||||||
|
)
|
||||||
|
|
||||||
|
def main ():
|
||||||
|
option_parser = optparse.OptionParser (usage="usage: %prog -o <dirname>")
|
||||||
|
option_parser.add_option ("-o",
|
||||||
|
"--output", dest="output",
|
||||||
|
metavar="FILE",
|
||||||
|
help="Name of output directory")
|
||||||
|
option_parser.add_option ("-s",
|
||||||
|
"--seed", dest="seed",
|
||||||
|
metavar="NUMBER",
|
||||||
|
help="Random number seed")
|
||||||
|
option_parser.add_option ("",
|
||||||
|
"--no-sleep", dest="sleep_enabled", action="store_false", default=True,
|
||||||
|
help="Disable short sleeps between operations. Will use a lot of CPU!")
|
||||||
|
option_parser.add_option ("-v",
|
||||||
|
"--verbose", dest="verbose", action="store_true", default=False,
|
||||||
|
help="Enable verbose output")
|
||||||
|
|
||||||
|
(options, args) = option_parser.parse_args ()
|
||||||
|
|
||||||
|
if not options.output:
|
||||||
|
print 'Please specify an output directory with "-o outputdir"'
|
||||||
|
return 1
|
||||||
|
|
||||||
|
sleep_enabled = options.sleep_enabled
|
||||||
|
|
||||||
|
if len (args) != 0:
|
||||||
|
print 'No extra arguments are supported'
|
||||||
|
return 1
|
||||||
|
|
||||||
|
global output_dir
|
||||||
|
global random_gen
|
||||||
|
global verbose
|
||||||
|
|
||||||
|
verbose = options.verbose
|
||||||
|
|
||||||
|
random_gen = random.Random ()
|
||||||
|
if options.seed:
|
||||||
|
seed = int (options.seed)
|
||||||
|
else:
|
||||||
|
seed = int (time.time ())
|
||||||
|
|
||||||
|
print 'Use "--seed=%s" to reproduce this run' % seed
|
||||||
|
random_gen.seed (seed)
|
||||||
|
|
||||||
|
if sleep_enabled:
|
||||||
|
print 'Using short sleeps between operations (use --no-sleep to disable)'
|
||||||
|
else:
|
||||||
|
print 'Disabling short sleeps between operations'
|
||||||
|
|
||||||
|
output_dir = options.output
|
||||||
|
try:
|
||||||
|
os.mkdir (output_dir)
|
||||||
|
except:
|
||||||
|
1 # nothing
|
||||||
|
|
||||||
|
while True:
|
||||||
|
op = operations [random_gen.randrange (len (operations))]
|
||||||
|
op ()
|
||||||
|
if sleep_enabled:
|
||||||
|
time.sleep (random_gen.random () / 10)
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit (main ())
|
Loading…
Reference in a new issue