]> git.llucax.com Git - software/sercom.git/commitdiff
Bugfix: no trata de guardar 2 veces el stdout/err, honra rechazar_si_falla y otros.
authorLeandro Lucarella <llucax@gmail.com>
Mon, 12 Mar 2007 14:42:36 +0000 (14:42 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Mon, 12 Mar 2007 14:42:36 +0000 (14:42 +0000)
También evita crear un zip vacío si no hay archivos_a_guardar y honra el
Comando.terminar_si_falla.

sercom/model.py
sercom/tester.py

index 07ad64e4dcd66b9b269f095d6355afa1038cdc5b..7b0f1f2a4e7cc6589ec57be91f884bbd590565f4 100644 (file)
@@ -357,15 +357,6 @@ class Comando(InheritableSQLObject): #{{{
                                                 # son casos especiales
     activo              = BoolCol(notNone=True, default=True)
 
                                                 # son casos especiales
     activo              = BoolCol(notNone=True, default=True)
 
-    def _get_guardar_stdout(self):
-        return self.STDOUT in self.archivos_a_guardar
-
-    def _get_guardar_stderr(self):
-        return self.STDERR in self.archivos_a_guardar
-
-    def _get_guardar_stdouterr(self):
-        return self.STDOUTERR in self.archivos_a_guardar
-
     def __repr__(self, clave='', mas=''):
         return ('%s(%s comando=%s, descripcion=%s, retorno=%s, '
             'max_tiempo_cpu=%s, max_memoria=%s, max_tam_archivo=%s, '
     def __repr__(self, clave='', mas=''):
         return ('%s(%s comando=%s, descripcion=%s, retorno=%s, '
             'max_tiempo_cpu=%s, max_memoria=%s, max_tam_archivo=%s, '
index 47b3ec060f5e85e76bfbc285de46d942c939da2e..bf78038df4c18661b0ec3d1c3a3c259f47d96841 100644 (file)
@@ -330,17 +330,18 @@ def ejecutar_comando_fuente(self, path, entrega): #{{{
         options['stdin'] = file('/tmp/sercom.tester.%s.stdin' % comando_ejecutado.id, 'r') # TODO
     else:
         options['preexec_fn'].close_stdin = True
         options['stdin'] = file('/tmp/sercom.tester.%s.stdin' % comando_ejecutado.id, 'r') # TODO
     else:
         options['preexec_fn'].close_stdin = True
-    if self.guardar_stdouterr:
+    a_guardar = set(self.archivos_a_guardar)
+    if self.STDOUTERR in a_guardar:
         options['stdout'] = file('/tmp/sercom.tester.%s.stdouterr'
             % comando_ejecutado.id, 'w') #TODO /var/run/sercom?
         options['stderr'] = sp.STDOUT
     else:
         options['stdout'] = file('/tmp/sercom.tester.%s.stdouterr'
             % comando_ejecutado.id, 'w') #TODO /var/run/sercom?
         options['stderr'] = sp.STDOUT
     else:
-        if self.guardar_stdout:
+        if self.STDOUT in a_guardar:
             options['stdout'] = file('/tmp/sercom.tester.%s.stdout'
                 % comando_ejecutado.id, 'w') #TODO /run/lib/sercom?
         else:
             options['preexec_fn'].close_stdout = True
             options['stdout'] = file('/tmp/sercom.tester.%s.stdout'
                 % comando_ejecutado.id, 'w') #TODO /run/lib/sercom?
         else:
             options['preexec_fn'].close_stdout = True
-        if self.guardar_stderr:
+        if self.STDERR in a_guardar:
             options['stderr'] = file('/tmp/sercom.tester.%s.stderr'
                 % comando_ejecutado.id, 'w') #TODO /var/run/sercom?
         else:
             options['stderr'] = file('/tmp/sercom.tester.%s.stderr'
                 % comando_ejecutado.id, 'w') #TODO /var/run/sercom?
         else:
@@ -364,6 +365,8 @@ def ejecutar_comando_fuente(self, path, entrega): #{{{
     if self.retorno != self.RET_ANY:
         if self.retorno == self.RET_FAIL:
             if proc.returncode == 0:
     if self.retorno != self.RET_ANY:
         if self.retorno == self.RET_FAIL:
             if proc.returncode == 0:
+                if self.rechazar_si_falla:
+                    entrega.correcta = False
                 comando_ejecutado.exito = False
                 comando_ejecutado.observaciones += _(u'Se esperaba que el '
                     u'programa termine con un error (código de retorno '
                 comando_ejecutado.exito = False
                 comando_ejecutado.observaciones += _(u'Se esperaba que el '
                     u'programa termine con un error (código de retorno '
@@ -373,6 +376,8 @@ def ejecutar_comando_fuente(self, path, entrega): #{{{
                     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:
                     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:
+            if self.rechazar_si_falla:
+                entrega.correcta = False
             comando_ejecutado.exito = False
             if proc.returncode < 0:
                 comando_ejecutado.observaciones += _(u'Se esperaba terminar '
             comando_ejecutado.exito = False
             if proc.returncode < 0:
                 comando_ejecutado.observaciones += _(u'Se esperaba terminar '
@@ -391,31 +396,41 @@ def ejecutar_comando_fuente(self, path, entrega): #{{{
     if comando_ejecutado.exito is None:
         log.debug(_(u'Código de retorno OK'))
     comando_ejecutado.fin = datetime.now()
     if comando_ejecutado.exito is None:
         log.debug(_(u'Código de retorno OK'))
     comando_ejecutado.fin = datetime.now()
-    buffer = StringIO()
-    zip = ZipFile(buffer, 'w')
-    # Guardamos stdout/stderr
-    if self.guardar_stdouterr:
-        zip.write('/tmp/sercom.tester.%s.stdouterr'
-            % comando_ejecutado.id, '__stdouterr__')
-    else:
-        if self.guardar_stdout:
-            zip.write('/tmp/sercom.tester.%s.stdout'
-                % comando_ejecutado.id, '__stdout__')
-        if self.guardar_stderr:
-            zip.write('/tmp/sercom.tester.%s.stderr'
-                % comando_ejecutado.id, '__stderr__')
-    # Guardamos otros
-    for f in self.archivos_a_guardar:
-        if not os.path.exists(join(path, f)):
-            comando_ejecutado.exito = False
-            comando_ejecutado.observaciones += _(u'Se esperaba un archivo "%s" pero no fue '
-                u'encontrado') % f
-            log.debug(_(u'Se esperaba un archivo "%s" pero no fue '
-                u'encontrado'), f)
+    if a_guardar:
+        buffer = StringIO()
+        zip = ZipFile(buffer, 'w')
+        # Guardamos stdout/stderr
+        if self.STDOUTERR in a_guardar:
+            a_guardar.remove(self.STDOUTERR)
+            zip.write('/tmp/sercom.tester.%s.stdouterr'
+                % comando_ejecutado.id, '__stdouterr__')
         else:
         else:
-            zip.write(join(path, f), f)
-    zip.close()
-    comando_ejecutado.archivos_guardados = buffer.getvalue()
+            if self.STDOUT in a_guardar:
+                a_guardar.remove(self.STDOUT)
+                zip.write('/tmp/sercom.tester.%s.stdout'
+                    % comando_ejecutado.id, '__stdout__')
+            if self.STDERR in a_guardar:
+                a_guardar.remove(self.STDERR)
+                zip.write('/tmp/sercom.tester.%s.stderr'
+                    % comando_ejecutado.id, '__stderr__')
+        # Guardamos otros
+        for f in a_guardar:
+            if not os.path.exists(join(path, f)):
+                if self.rechazar_si_falla:
+                    entrega.correcta = False
+                comando_ejecutado.exito = False
+                comando_ejecutado.observaciones += _(u'Se esperaba un archivo '
+                    u'"%s" pero no fue encontrado') % f
+                log.debug(_(u'Se esperaba un archivo "%s" pero no fue '
+                    u'encontrado'), f)
+            else:
+                zip.write(join(path, f), f)
+        zip.close()
+        comando_ejecutado.archivos_guardados = buffer.getvalue()
+    if comando_ejecutado.exito is None:
+        comando_ejecutado.exito = True
+    elif self.terminar_si_falla:
+        raise ExecutionFailure(self)
 
 #    if no_anda_ejecucion: # TODO
 #        comando_ejecutado.exito = False
 
 #    if no_anda_ejecucion: # TODO
 #        comando_ejecutado.exito = False
@@ -439,8 +454,6 @@ def ejecutar_comando_fuente(self, path, entrega): #{{{
 #    else:
 #        comando_ejecutado.exito = True
 #        comando_ejecutado.observaciones += 'xxx OK' # TODO
 #    else:
 #        comando_ejecutado.exito = True
 #        comando_ejecutado.observaciones += 'xxx OK' # TODO
-    comando_ejecutado.exito = True
-    comando_ejecutado.observaciones += 'xxx OK' # TODO
 ComandoFuente.ejecutar = ejecutar_comando_fuente
 #}}}
 
 ComandoFuente.ejecutar = ejecutar_comando_fuente
 #}}}