[Erp5-report] r44589 mario.amaral - /erp5/trunk/utils/cloudooo/cloudooo/handler/ooo/tests/
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Mar 24 20:04:47 CET 2011
Author: mario.amaral
Date: Thu Mar 24 20:04:47 2011
New Revision: 44589
URL: http://svn.erp5.org?rev=44589&view=rev
Log:
A high test to granulate files, like HighTestLoad.
Added:
erp5/trunk/utils/cloudooo/cloudooo/handler/ooo/tests/HighTestLoadGranulate.py
Added: erp5/trunk/utils/cloudooo/cloudooo/handler/ooo/tests/HighTestLoadGranulate.py
URL: http://svn.erp5.org/erp5/trunk/utils/cloudooo/cloudooo/handler/ooo/tests/HighTestLoadGranulate.py?rev=44589&view=auto
==============================================================================
--- erp5/trunk/utils/cloudooo/cloudooo/handler/ooo/tests/HighTestLoadGranulate.py (added)
+++ erp5/trunk/utils/cloudooo/cloudooo/handler/ooo/tests/HighTestLoadGranulate.py [utf8] Thu Mar 24 20:04:47 2011
@@ -0,0 +1,165 @@
+##############################################################################
+#
+# Copyright (c) 2009-2010 Nexedi SA and Contributors. All Rights Reserved.
+# Gabriel M. Monnerat <gabriel at tiolive.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsibility of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# guarantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+import sys
+from multiprocessing import Process
+from os import listdir
+from xmlrpclib import ServerProxy
+from os.path import join
+from getopt import getopt, GetoptError
+from time import ctime, time
+from base64 import encodestring
+
+"""
+ XXX - This file is duplicated and should be refactored to be used for all
+ handlers.
+ The next step is refactor HighTestLoad.py and HighTestLoadGranulate.py to
+ remove all duplicated code.
+"""
+
+__doc__ = """
+# XXX - Use argparse to display the help and options.
+usage: python HighTestLoadGranulate.py [options]
+
+Options:
+ -h, --help this help screen
+
+ -f folder Full url of folder with documents
+ -c concurrency Number of clients
+ -n requests Number of requests
+ -s server Server Address e.g http://ip:port/
+ -l filter log Folder to store logs
+"""
+
+
+class Log(object):
+ """Object to manipulate the log file"""
+
+ def __init__(self, log_path, mode='a'):
+ """Open the log file in filesystem"""
+ self._log = open(log_path, mode)
+
+ def msg(self, message):
+ """Write the message in file"""
+ self._log.write(message)
+
+ def close(self):
+ """Close the file"""
+ self._log.close()
+
+ def flush(self):
+ """Flush the internal I/O buffer."""
+ self._log.flush()
+
+
+class Client(Process):
+ """Represents a client that sends requests to the server. The log file by
+ default is created in current path, but can be created in another path.
+
+ In log are stored:
+ - Date and time that the client initiated the test;
+ - Duration of each request;
+ - Total time of all requets;
+ - Data and time that the client finished the test;
+ """
+
+ def __init__(self, address, number_request, folder, **kw):
+ """Client constructor
+
+ address -- Complete address as string
+ e.g http://localhost:8008
+ number_request -- number of request that client will send to the server
+ folder -- Full path to folder.
+ e.g '/home/user/documents'
+ """
+ Process.__init__(self)
+ self.address = address
+ self.number_of_request = number_request
+ self.folder = folder
+ log_filename = kw['log_filename'] or "%s.log" % self.name
+ log_folder_path = kw.get("log_folder_url", '')
+ log_path = join(log_folder_path, log_filename)
+ self.log = Log(log_path, 'w')
+
+ def run(self):
+ """ """
+ proxy = ServerProxy(self.address)
+ while self.number_of_request:
+ folder_list = listdir(self.folder)[:self.number_of_request]
+ for filename in folder_list:
+ file_path = join(self.folder, filename)
+ data = encodestring(open(file_path).read())
+ try:
+ proxy.getTableItemList(data, 'odt')
+ proxy.getChapterItemList(data, 'odt')
+ proxy.getImageItemList(data, 'odt')
+ self.log.msg("Success\n")
+ except Exception, err:
+ self.log.msg("Error - %s\n"%str(err))
+ self.number_of_request -= 1
+ self.log.close()
+
+
+def main():
+
+ help_msg = "\nUse --help or -h"
+ try:
+ opt_list, arg_list = getopt(sys.argv[1:], "hc:n:f:s:l:", ["help"])
+ except GetoptError, msg:
+ msg = msg.msg + help_msg
+ print >> sys.stderr, msg
+ sys.exit(2)
+
+ kw = {}
+ for opt, arg in opt_list:
+ if opt in ('-h', '--help'):
+ print >> sys.stdout, __doc__
+ sys.exit(2)
+ elif opt == '-c':
+ number_client = int(arg)
+ elif opt == '-n':
+ number_request = int(arg)
+ elif opt == '-f':
+ document_folder = arg
+ elif opt == '-s':
+ server_address = arg
+ elif opt == '-l':
+ kw['log_folder_url'] = arg
+
+ client_list = []
+ for num in range(number_client):
+ kw['log_filename'] = "client%s.log" % num
+ client = Client(server_address, number_request, document_folder, **kw)
+ client_list.append(client)
+ client.start()
+
+ for client in client_list:
+ client.join()
+
+if __name__ == "__main__":
+ main()
More information about the Erp5-report
mailing list