]> git.llucax.com Git - software/sercom.git/blobdiff - sercom/tester.py
Bugfix: El comando a ejecutar es distinto para ComandoPrueba (hay que concatenar...
[software/sercom.git] / sercom / tester.py
index 225e13d961a6bb81f5dd5f49ff9e5b4355448c9a..add178b8d87181ca8baa7c01af64fc2c7c62144e 100644 (file)
@@ -208,8 +208,7 @@ class Tester(object): #{{{
                 self.ejecutar_tareas_prueba(entrega)
                 self.clean_chroot(entrega)
             except ExecutionFailure, e:
-                entrega.exito = False
-                log.info(_(u'Entrega incorrecta: %s'), entrega)
+                pass
             except Exception, e:
                 if isinstance(e, SystemExit): raise
                 entrega.observaciones += error_interno
@@ -217,11 +216,14 @@ class Tester(object): #{{{
             except:
                 entrega.observaciones += error_interno
                 log.exception(_('Hubo una excepcion inesperada desconocida')) # FIXME encoding
-            else:
-                entrega.exito = True
-                log.debug(_(u'Entrega correcta: %s'), entrega)
         finally:
             entrega.fin = datetime.now()
+            if entrega.exito is None:
+                entrega.exito = True
+            if entrega.exito:
+                log.info(_(u'Entrega correcta: %s'), entrega)
+            else:
+                log.info(_(u'Entrega incorrecta: %s'), entrega)
     #}}}
 
     def setup_chroot(self, entrega): #{{{ y clean_chroot()
@@ -274,15 +276,15 @@ def ejecutar_caso_de_prueba(self, path, entrega): #{{{
             for tarea in tareas:
                 tarea.ejecutar(path, prueba)
         except ExecutionFailure, e:
-            prueba.exito = False
-            if self.rechazar_si_falla:
-                entrega.exito = False
-            if self.terminar_si_falla:
-                raise ExecutionFailure(e.comando, e.tarea, self)
-        else:
-            prueba.exito = True
+            pass
     finally:
         prueba.fin = datetime.now()
+        if prueba.exito is None:
+            prueba.exito = True
+    if not prueba.exito and self.rechazar_si_falla:
+        entrega.exito = False
+    if not prueba.exito and self.terminar_si_falla:
+        raise ExecutionFailure(prueba)
 CasoDePrueba.ejecutar = ejecutar_caso_de_prueba
 #}}}
 
@@ -336,12 +338,13 @@ def ejecutar_comando_fuente(self, path, entrega): #{{{
                 comando_ejecutado.id), 'w')
         else:
             options['preexec_fn'].close_stderr = True
-    log.debug(_(u'Ejecutando como root: %s'), self.comando)
+    comando = self.comando # FIXME Acá tiene que diferenciarse de ComandoPrueba
+    log.debug(_(u'Ejecutando como root: %s'), comando)
     os.seteuid(0) # Dios! (para chroot)
     os.setegid(0)
     try:
         try:
-            proc = sp.Popen(self.comando, **options)
+            proc = sp.Popen(comando, **options)
         finally:
             os.setegid(user_info.gid) # Mortal de nuevo
             os.seteuid(user_info.uid)
@@ -353,8 +356,9 @@ def ejecutar_comando_fuente(self, path, entrega): #{{{
         raise
     proc.wait() #TODO un sleep grande nos caga todo, ver sercom viejo
     comando_ejecutado.fin = datetime.now() # TODO debería rodear solo la ejecución del comando
-    if self.retorno != self.RET_ANY:
-        if self.retorno == self.RET_FAIL:
+    retorno = self.retorno
+    if retorno != self.RET_ANY:
+        if retorno == self.RET_FAIL:
             if proc.returncode == 0:
                 if self.rechazar_si_falla:
                     entrega.exito = False
@@ -366,24 +370,23 @@ def ejecutar_comando_fuente(self, path, entrega): #{{{
                 log.debug(_(u'Se esperaba que el programa termine '
                     u'con un error (código de retorno distinto de 0) pero '
                     u'terminó bien (código de retorno 0).\n'))
-        elif self.retorno != proc.returncode:
+        elif retorno != proc.returncode:
             if self.rechazar_si_falla:
                 entrega.exito = False
             comando_ejecutado.exito = False
             if proc.returncode < 0:
                 comando_ejecutado.observaciones += _(u'Se esperaba terminar '
                     u'con un código de retorno %s pero se obtuvo una señal %s '
-                    u'(%s).\n') % (self.retorno, -proc.returncode,
-                        -proc.returncode) # TODO poner con texto
+                    u'(%s).\n') % (retorno, -proc.returncode, -proc.returncode) # TODO poner con texto
                 log.debug(_(u'Se esperaba terminar con un código '
                     u'de retorno %s pero se obtuvo una señal %s (%s).\n'),
-                    self.retorno, -proc.returncode, -proc.returncode)
+                    retorno, -proc.returncode, -proc.returncode)
             else:
                 comando_ejecutado.observaciones += _(u'Se esperaba terminar '
                     u'con un código de retorno %s pero se obtuvo %s.\n') \
-                    % (self.retorno, proc.returncode)
+                    % (retorno, proc.returncode)
                 log.debug(_(u'Se esperaba terminar con un código de retorno '
-                    u'%s pero se obtuvo %s.\n'), self.retorno, proc.returncode)
+                    u'%s pero se obtuvo %s.\n'), retorno, proc.returncode)
     if comando_ejecutado.exito is None:
         log.debug(_(u'Código de retorno OK'))
     if a_guardar:
@@ -540,12 +543,13 @@ def ejecutar_comando_prueba(self, path, prueba): #{{{
                 comando_ejecutado.id), 'w')
         else:
             options['preexec_fn'].close_stderr = True
-    log.debug(_(u'Ejecutando como root: %s'), self.comando)
+    comando = self.comando + ' ' + prueba.caso_de_prueba.comando # FIXME Esto es propio de ComandoPrueba
+    log.debug(_(u'Ejecutando como root: %s'), comando)
     os.seteuid(0) # Dios! (para chroot)
     os.setegid(0)
     try:
         try:
-            proc = sp.Popen(self.comando, **options)
+            proc = sp.Popen(comando, **options)
         finally:
             os.setegid(user_info.gid) # Mortal de nuevo
             os.seteuid(user_info.uid)
@@ -557,8 +561,11 @@ def ejecutar_comando_prueba(self, path, prueba): #{{{
         raise
     proc.wait() #TODO un sleep grande nos caga todo, ver sercom viejo
     comando_ejecutado.fin_tareas = datetime.now() # TODO debería rodear solo la ejecución del comando
-    if self.retorno != self.RET_ANY:
-        if self.retorno == self.RET_FAIL:
+    retorno = self.retorno
+    if retorno == self.RET_PRUEBA:                # FIXME Esto es propio de ComandoPrueba
+        retorno = prueba.caso_de_prueba.retorno   # FIXME Esto es propio de ComandoPrueba
+    if retorno != self.RET_ANY:
+        if retorno == self.RET_FAIL:
             if proc.returncode == 0:
                 if self.rechazar_si_falla:
                     prueba.exito = False
@@ -570,24 +577,23 @@ def ejecutar_comando_prueba(self, path, prueba): #{{{
                 log.debug(_(u'Se esperaba que el programa termine '
                     u'con un error (código de retorno distinto de 0) pero '
                     u'terminó bien (código de retorno 0).\n'))
-        elif self.retorno != proc.returncode:
+        elif retorno != proc.returncode:
             if self.rechazar_si_falla:
                 prueba.exito = False
             comando_ejecutado.exito = False
             if proc.returncode < 0:
                 comando_ejecutado.observaciones += _(u'Se esperaba terminar '
                     u'con un código de retorno %s pero se obtuvo una señal %s '
-                    u'(%s).\n') % (self.retorno, -proc.returncode,
-                        -proc.returncode) # TODO poner con texto
+                    u'(%s).\n') % (retorno, -proc.returncode, -proc.returncode) # TODO poner con texto
                 log.debug(_(u'Se esperaba terminar con un código '
                     u'de retorno %s pero se obtuvo una señal %s (%s).\n'),
-                    self.retorno, -proc.returncode, -proc.returncode)
+                    retorno, -proc.returncode, -proc.returncode)
             else:
                 comando_ejecutado.observaciones += _(u'Se esperaba terminar '
                     u'con un código de retorno %s pero se obtuvo %s.\n') \
-                    % (self.retorno, proc.returncode)
+                    % (retorno, proc.returncode)
                 log.debug(_(u'Se esperaba terminar con un código de retorno '
-                    u'%s pero se obtuvo %s.\n'), self.retorno, proc.returncode)
+                    u'%s pero se obtuvo %s.\n'), retorno, proc.returncode)
     if comando_ejecutado.exito is None:
         log.debug(_(u'Código de retorno OK'))
     if a_guardar: