upgrade to python3;add some validator examples

This commit is contained in:
2025-10-11 12:33:24 +08:00
parent 65632f0e60
commit 487c041148
25 changed files with 1492 additions and 317 deletions

View File

@@ -1,6 +1,6 @@
import math, os, resource, signal, string, sys, threading, logging, time, pickle
import shutil, Queue
import shutil, queue
import unittest
import pdb
from engineconfig import getConfig
@@ -103,12 +103,12 @@ class SimpleTester(TesterBase):
if os.path.exists(pcname):
try:
os.unlink(pcname)
except OSError, e:
except OSError:
self.logger.exception(
"Failed to delete presetcode file %s" % pcname)
return False
f = open(pcname, 'w')
f.write(string.replace(presetcode.code, '\r\n', '\n'))
f.write(presetcode.code.replace('\r\n', '\n'))
f.write('\n');
f.close()
@@ -118,24 +118,24 @@ class SimpleTester(TesterBase):
if os.path.exists(datadirsource):
try:
os.unlink(datadirsource)
except OSError, e:
except OSError:
self.logger.exception("Failed to delete source")
return False
if os.path.exists(datadirtarget):
try:
os.unlink(datadirtarget)
except OSError, e:
except OSError:
self.logger.exception("Failed to delete target")
return False
# preprocess source code
code = string.replace(submit.code, '\r\n', '\n')
code = string.replace(code, chr(0x1a), '') # char generated by tc
code = string.replace(code, 'getch()', '')
code = string.replace(code, 'getch ()', '')
code = string.replace(code, 'getch ( )', '')
code = submit.code.replace('\r\n', '\n')
code = code.replace(chr(0x1a), '') # char generated by tc
code = code.replace('getch()', '')
code = code.replace('getch ()', '')
code = code.replace('getch ( )', '')
code = string.replace(code, '\r\n', '\n')
code = code.replace('\r\n', '\n')
# write source to disk
f = open(datadirsource, 'w')
f.write(code)
@@ -146,7 +146,7 @@ class SimpleTester(TesterBase):
config = getConfig()
try:
submit.user = config.runas.get_nowait()
except Queue.Empty:
except queue.Empty:
self.logger.exception("No runas user left, please create more!")
return False
rundir = self.get_rundir(submit)
@@ -157,12 +157,12 @@ class SimpleTester(TesterBase):
if os.path.exists(rundir):
try:
self._remove(rundir)
except OSError, e:
except OSError:
self.logger.exception("Failed to delete rundir")
config.runas.put(submit.user)
return False
os.mkdir(rundir)
os.chmod(rundir, 0775)
os.chmod(rundir, 0o775)
return True
@@ -199,7 +199,7 @@ class SimpleTester(TesterBase):
for code in submit.get_presetcodes():
if not code.isheader:
cmd.append(code.name)
self.logger.debug(string.join(cmd, '_'))
self.logger.debug('_'.join(cmd))
errfile = os.path.join(datadir, 'compile.err')
@@ -210,9 +210,8 @@ class SimpleTester(TesterBase):
compilemsg = None
if os.path.exists(errfile):
f = file(errfile, 'r')
compilemsg = string.join(f.readlines(), '')
f.close()
with open(errfile, 'r') as f:
compilemsg = ''.join(f.readlines())
if compilemsg:
submit.set_compilemessage(compilemsg)
@@ -283,7 +282,7 @@ class SimpleTester(TesterBase):
s = s.replace('<datadir>', datadir)
s = s.replace('<user>', submit.user)
self.runenv[k] = s
self.logger.debug(string.join(cmd, ' ') + ' ' + str(self.runenv))
self.logger.debug(' '.join(cmd) + ' ' + str(self.runenv))
(exitcode, sig, timeused, memused) = \
self._execute(submit, cmd, timelimit = testcase.timelimit * 10,
@@ -365,22 +364,22 @@ class SimpleTester(TesterBase):
try:
os.close(0)
os.open(infile, os.O_RDONLY)
except Exception, e:
print e
except Exception as e:
print(e)
sys.exit(125)
if outfile:
try:
os.close(1)
os.open(outfile, os.O_WRONLY|os.O_CREAT|os.O_TRUNC, 0666)
except Exception, e:
print e
os.open(outfile, os.O_WRONLY|os.O_CREAT|os.O_TRUNC, 0o666)
except Exception as e:
print(e)
sys.exit(125)
if errfile:
try:
os.close(2)
os.open(errfile, os.O_WRONLY|os.O_CREAT|os.O_TRUNC, 0666)
except Exception, e:
print e
os.open(errfile, os.O_WRONLY|os.O_CREAT|os.O_TRUNC, 0o666)
except Exception as e:
print(e)
sys.exit(125)
#os.chdir(self.get_datadir(submit))
@@ -398,22 +397,23 @@ class SimpleTester(TesterBase):
# read information form statfile
if statfile:
try:
stat = pickle.load(file(statfile, 'r'))
with open(statfile, 'rb') as f:
stat = pickle.load(f)
exitcode = stat['exitcode']
sig = stat['sig']
timeused = stat['timeused']
memused = 0
if self.basemem.has_key('RSS'):
if 'RSS' in self.basemem:
memused += stat['memrss'] - self.basemem['RSS']
if self.basemem.has_key('Data'):
if 'Data' in self.basemem:
memused += stat['memdata'] - self.basemem['Data']
if self.basemem.has_key('Stack'):
if 'Stack' in self.basemem:
memused += stat['memstack'] - self.basemem['Stack']
memused = max(0, memused)
except Exception, e:
except Exception as e:
self.logger.exception(e)
self.logger.error("Failed to read statfile: %s" % statfile)
exitcode = 127 # judge script error
exitcode = 127 # judge script error
return (exitcode, sig, timeused, memused)