diff = HtmlDiff().make_file(orig, new, fromdesc=name+'.'+origname, todesc=name+'.'+newname, context=True, numlines=3)
mail.attachText(diff, name + '.diff.html', 'html')
return nota
+ def usa_stdin():
+ return os.path.exists(os.path.join(caso_de_prueba.path, 'stdin'))
+ def usa_stdout():
+ return os.path.exists(os.path.join(caso_de_prueba.path, 'stdout'))
+ def usa_stderr():
+ return os.path.exists(os.path.join(caso_de_prueba.path, 'stderr'))
+
# Cosas útiles
global log, conn, conf, uid, gid
# Para manejo de SIGCHLD
'close_fds': True,
'preexec_fn': secure_process(intento.chrootPath, uid, gid, tiempo_cpu),
}
- if os.path.exists(os.path.join(caso_de_prueba.path, 'stdin')):
+ if usa_stdin():
options['stdin'] = file(os.path.join(caso_de_prueba.path, 'stdin'), 'r')
- if os.path.exists(os.path.join(caso_de_prueba.path, 'stdout')):
+ if usa_stdout():
options['stdout'] = subprocess.PIPE
- if os.path.exists(os.path.join(caso_de_prueba.path, 'stderr')):
+ if usa_stderr():
options['stderr'] = subprocess.PIPE
# Ejecuto programa
params = ['/tp']
proc = subprocess.Popen(params, **options)
except Exception, e: # FIXME poner en el manejo de exceptiones estandar
try:
- print e.child_traceback
+ log.debug('ERROR! Trace del hijo: %s', e.child_traceback)
raise
except:
raise
return prueba
# Verifico salidas estándar/de error
prueba.pasada = True # Asumo que está bien, ya habrá tiempo para cambiarlo
- obs = diff(prueba, mail, proc.stdout.readlines(),
- file(os.path.join(caso_de_prueba.path, 'stdout')).readlines(),
- caso_de_prueba.nombre + '.stdout', longname='La salida estándar')
- obs += diff(prueba, mail, proc.stderr.readlines(),
- file(os.path.join(caso_de_prueba.path, 'stderr')).readlines(),
+ obs = ''
+ if usa_stdout():
+ obs += diff(prueba, mail, proc.stdout.readlines(),
+ file(os.path.join(caso_de_prueba.path, 'stdout')).readlines(),
+ caso_de_prueba.nombre + '.stdout', longname='La salida estándar')
+ if usa_stderr():
+ obs += diff(prueba, mail, proc.stderr.readlines(),
+ file(os.path.join(caso_de_prueba.path, 'stderr')).readlines(),
caso_de_prueba.nombre + '.stderr', longname='La salida de error')
for f in caso_de_prueba.archivosSalida:
if f not in prueba.archivosSalida:
log.debug('No hay intento para probar')
time.sleep(intervalo)
continue
- log.info('Nuevo intento a probar (%s)', intento)
+ log.info('Nuevo intento a probar (%d %d.%d.%d %d%d%d)',
+ intento.inscripto.padron, intento.entrega.nroEjercicio,
+ intento.entrega.entrega, intento.numero, intento.entrega.curso.anio,
+ intento.entrega.curso.cuatrimestre, intento.entrega.curso.curso)
mail = MailIntento(intento)
# Compila
compilar(intento, mail)
if not intento.compila:
+ log.info('Intento no compila')
mail.send('NO COMPILA')
continue
# Ejecución de casos de prueba
# Pruebo y agrego prueba a la lista
prueba = probar(intento, caso_de_prueba, mail)
if not prueba.casoDePrueba.privado and not prueba.pasada:
+ log.info('Prueba %s no pasada' % prueba.casoDePrueba.nombre)
resultado = False
# Limpio chroot
limpiar(intento)