]> git.llucax.com Git - software/sercom-old.git/blobdiff - src/sc_test
Modularización.
[software/sercom-old.git] / src / sc_test
index c06f4e9cd0c4ceffdab8c8734f8ca085935e6702..a7fe80745bcae7f7fe43566491815c8a823b68f6 100755 (executable)
@@ -4,36 +4,29 @@
 
 # Módulos estándar
 import os
-import sys
 import pwd
 import time
 import signal
-import locale
 import shutil
 import datetime
-import logging
-import logging.config
 import subprocess
-import ConfigParser
-# Módulos externos
-import sqlobject
 # Módulos locales
+import sercom
 from sercom.dbo import *
 
-class secure:
+class secure_process:
     def __init__(self, chroot, uid, gid, cpu):
         self.chroot = chroot
         self.uid = uid
         self.gid = gid
         self.cpu = cpu
     def __call__(self):
-        def x2(val):
-            return (val, val)
         from os import chroot, setuid, setgid
         import resource
         chroot(self.chroot)
         setgid(self.gid)
         setuid(self.uid)
+        x2 = lambda val: (val, val) # Devuelve una tupla con val 2 veces
         resource.setrlimit(resource.RLIMIT_AS, x2(20*1024*1024))
         resource.setrlimit(resource.RLIMIT_CORE, x2(0))
         resource.setrlimit(resource.RLIMIT_CPU, x2(self.cpu))
@@ -44,14 +37,6 @@ class secure:
         resource.setrlimit(resource.RLIMIT_NOFILE, x2(100))
         resource.setrlimit(resource.RLIMIT_NPROC, x2(0))
 
-def logger():
-    log = None
-    for log_conf in ('log.ini', os.path.expanduser('~/.sercom/log.ini'), '/etc/sercom/log.ini'):
-        if (os.access(log_conf, os.R_OK)):
-            logging.config.fileConfig(log_conf)
-            log = logging.getLogger('test')
-    return log
-
 def sigchld(signum, frame):
     """Signal handler para SIGCHILD."""
     #global hijo_muerto
@@ -64,15 +49,14 @@ def sigterm(signum, frame):
     continuar = False
     log.debug('Señal %d recibida', signum)
 
+# Conecto señales
+signal.signal(signal.SIGCHLD, sigchld)
+signal.signal(signal.SIGTERM, sigterm)
+signal.signal(signal.SIGINT, sigterm)
 
-# Seteo locale
-locale.setlocale(locale.LC_ALL, '')
-
-# Obtengo configuración
-conf = ConfigParser.SafeConfigParser()
-if not conf.read(('/etc/sercom/sercom.ini', os.path.expanduser('~/.sercom/sercom.ini'), 'sercom.ini')):
-    sys.stderr.write('No se pudo obtener configuración!\n')
-    sys.exit(1)
+# Inicializo
+conf, conn, log =  sercom.init('test')
+log.info('Iniciado')
 
 # Obtengo id de usuario con el cual ejecutar las pruebas
 (uid, gid) = pwd.getpwnam(conf.get('general', 'user'))[2:4]
@@ -80,24 +64,6 @@ if not conf.read(('/etc/sercom/sercom.ini', os.path.expanduser('~/.sercom/sercom
 # Cambio UID efectivo
 os.seteuid(uid)
 
-# Seteo umask para que el grupo pueda leer
-os.umask(00027)
-
-# Conecto señales
-signal.signal(signal.SIGCHLD, sigchld)
-signal.signal(signal.SIGTERM, sigterm)
-signal.signal(signal.SIGINT, sigterm)
-
-# Conexión a la DB
-conn = sqlobject.connectionForURI(conf.get('dbo', 'database'))
-
-# Cargo config del logger
-log = logger()
-if not log:
-    print >>sys.stderr, 'No se pudo cargar archivo de configuración de log.'
-    sys.exit(1)
-log.info('Iniciado')
-
 # Algunas variables de configuración útiles
 data_dir = conf.get('general', 'data_dir')
 intervalo = float(conf.get('general', 'intervalo'))
@@ -174,7 +140,7 @@ while continuar:
         # FIXME caso_de_prueba.parametros
         try:
             proc = subprocess.Popen('/tp', stdout=stdout, stderr=stderr, #stdin=stdin,
-                preexec_fn=secure(chroot_dir, uid, gid, tiempo_cpu))
+                preexec_fn=secure_process(chroot_dir, uid, gid, tiempo_cpu))
         except Exception, e: # FIXME poner en el manejo de exceptiones estandar
             try:
                 print e, e.child_traceback