]> git.llucax.com Git - z.facultad/75.52/sercom.git/blobdiff - sercom/tester.py
Muevo alumno_inscripto dentro de curso
[z.facultad/75.52/sercom.git] / sercom / tester.py
index 982ad718a0fea03fea9a4a128ee90f1c7768e09c..51c861e4a84b3e57f76a2b855985c0b015de04d4 100644 (file)
@@ -338,12 +338,13 @@ def ejecutar_comando_fuente(self, path, entrega): #{{{
                 comando_ejecutado.id), 'w')
         else:
             options['preexec_fn'].close_stderr = True
                 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:
     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)
         finally:
             os.setegid(user_info.gid) # Mortal de nuevo
             os.seteuid(user_info.uid)
@@ -355,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
         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
             if proc.returncode == 0:
                 if self.rechazar_si_falla:
                     entrega.exito = False
@@ -368,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'))
                 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 '
             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'),
                 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') \
             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 '
                 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:
     if comando_ejecutado.exito is None:
         log.debug(_(u'Código de retorno OK'))
     if a_guardar:
@@ -520,6 +521,7 @@ def ejecutar_comando_prueba(self, path, prueba): #{{{
     else:
         options['preexec_fn'].close_stdin = True
     a_guardar = set(self.archivos_a_guardar)
     else:
         options['preexec_fn'].close_stdin = True
     a_guardar = set(self.archivos_a_guardar)
+    a_guardar |= set(prueba.caso_de_prueba.archivos_a_guardar) # FIXME Esto es propio de ComandoPrueba
     if self.archivos_a_comparar:
         zip_a_comparar = ZipFile(StringIO(self.archivos_a_comparar), 'r')
         a_comparar = set(zip_a_comparar.namelist())
     if self.archivos_a_comparar:
         zip_a_comparar = ZipFile(StringIO(self.archivos_a_comparar), 'r')
         a_comparar = set(zip_a_comparar.namelist())
@@ -542,12 +544,13 @@ def ejecutar_comando_prueba(self, path, prueba): #{{{
                 comando_ejecutado.id), 'w')
         else:
             options['preexec_fn'].close_stderr = True
                 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:
     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)
         finally:
             os.setegid(user_info.gid) # Mortal de nuevo
             os.seteuid(user_info.uid)
@@ -559,8 +562,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
         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
             if proc.returncode == 0:
                 if self.rechazar_si_falla:
                     prueba.exito = False
@@ -572,24 +578,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'))
                 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 '
             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'),
                 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') \
             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 '
                 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:
     if comando_ejecutado.exito is None:
         log.debug(_(u'Código de retorno OK'))
     if a_guardar: