[llvm-commits] [zorg] r146788 - in /zorg/trunk/lnt: lnt/server/db/testsuite.py lnt/server/db/testsuitedb.py tests/server/db/CreateV4TestSuiteInstance.py
Daniel Dunbar
daniel at zuster.org
Fri Dec 16 16:12:19 PST 2011
Author: ddunbar
Date: Fri Dec 16 18:12:19 2011
New Revision: 146788
URL: http://llvm.org/viewvc/llvm-project?rev=146788&view=rev
Log:
[lnt/v0.4] lnt.server.db: Add magic to dynamically add the appropriate (machine,
order, run, sample) fields based on the test suite definition.
- In practice, we don't really need to provide these as class level variables
most of the time, since UI code will be abstracted around the test suite
definition itself. However, it makes writing test suite specific code nice
and readable, and its easy enough (although a bit magical).
Modified:
zorg/trunk/lnt/lnt/server/db/testsuite.py
zorg/trunk/lnt/lnt/server/db/testsuitedb.py
zorg/trunk/lnt/tests/server/db/CreateV4TestSuiteInstance.py
Modified: zorg/trunk/lnt/lnt/server/db/testsuite.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/db/testsuite.py?rev=146788&r1=146787&r2=146788&view=diff
==============================================================================
--- zorg/trunk/lnt/lnt/server/db/testsuite.py (original)
+++ zorg/trunk/lnt/lnt/server/db/testsuite.py Fri Dec 16 18:12:19 2011
@@ -19,6 +19,9 @@
def __init__(self, name):
self.name = name
+ def __repr__(self):
+ return '%s%r' % (self.__class__.__name__, (self.name,))
+
class StatusKind(Base):
__tablename__ = 'StatusKind'
@@ -28,6 +31,9 @@
def __init__(self, name):
self.name = name
+ def __repr__(self):
+ return '%s%r' % (self.__class__.__name__, (self.name,))
+
class TestSuite(Base):
__tablename__ = 'TestSuite'
@@ -62,6 +68,9 @@
self.name = name
self.info_key = info_key
+ def __repr__(self):
+ return '%s%r' % (self.__class__.__name__, (self.name, self.info_key))
+
class OrderField(Base):
__tablename__ = 'TestSuiteOrderFields'
@@ -78,6 +87,10 @@
self.info_key = info_key
self.ordinal = ordinal
+ def __repr__(self):
+ return '%s%r' % (self.__class__.__name__, (self.name, self.info_key,
+ self.ordinal))
+
class RunField(Base):
__tablename__ = 'TestSuiteRunFields'
@@ -90,15 +103,25 @@
self.name = name
self.info_key = info_key
+ def __repr__(self):
+ return '%s%r' % (self.__class__.__name__, (self.name, self.info_key))
+
class SampleField(Base):
__tablename__ = 'TestSuiteSampleFields'
id = Column("ID", Integer, primary_key=True)
test_suite_id = Column("TestSuiteID", Integer, ForeignKey('TestSuite.ID'))
name = Column("Name", String(256))
- type = Column("Type", Integer, ForeignKey('SampleType.ID'))
+ type_id = Column("Type", Integer, ForeignKey('SampleType.ID'))
info_key = Column("InfoKey", String(256))
- def __init__(self, name, info_key):
+ type = relation(SampleType)
+
+ def __init__(self, name, type, info_key):
self.name = name
+ self.type = type
self.info_key = info_key
+
+ def __repr__(self):
+ return '%s%r' % (self.__class__.__name__, (self.name, self.type,
+ self.info_key))
Modified: zorg/trunk/lnt/lnt/server/db/testsuitedb.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/db/testsuitedb.py?rev=146788&r1=146787&r2=146788&view=diff
==============================================================================
--- zorg/trunk/lnt/lnt/server/db/testsuitedb.py (original)
+++ zorg/trunk/lnt/lnt/server/db/testsuitedb.py Fri Dec 16 18:12:19 2011
@@ -27,7 +27,15 @@
number = Column("Number", Integer)
parameters = Column("Parameters", Binary)
- # ... FIXME: Add test suite machine keys ...
+ # Dynamically create fields for all of the test suite defined
+ # machine fields.
+ class_dict = locals()
+ for item in test_suite.machine_fields:
+ if item.name in class_dict:
+ raise ValueError,"test suite defines reserved key %r" % (
+ name,)
+
+ class_dict[item.name] = Column(item.name, String(256))
def __init__(self, name, number):
self.name = name
@@ -42,7 +50,15 @@
id = Column("ID", Integer, primary_key=True)
- # ... FIXME: Add test suite order keys ...
+ # Dynamically create fields for all of the test suite defined order
+ # fields.
+ class_dict = locals()
+ for item in test_suite.order_fields:
+ if item.name in class_dict:
+ raise ValueError,"test suite defines reserved key %r" % (
+ name,)
+
+ class_dict[item.name] = Column(item.name, String(256))
def __init__(self):
pass
@@ -65,7 +81,15 @@
machine = sqlalchemy.orm.relation(Machine)
order = sqlalchemy.orm.relation(Order)
- # ... FIXME: Add test suite run keys ...
+ # Dynamically create fields for all of the test suite defined run
+ # fields.
+ class_dict = locals()
+ for item in test_suite.run_fields:
+ if item.name in class_dict:
+ raise ValueError,"test suite defines reserved key %r" % (
+ name,)
+
+ class_dict[item.name] = Column(item.name, String(256))
def __init__(self, machine, order, start_time, end_time):
self.machine = machine
@@ -102,7 +126,24 @@
run = sqlalchemy.orm.relation(Run)
test = sqlalchemy.orm.relation(Test)
- # ... FIXME: Add test suite sample keys ...
+ # Dynamically create fields for all of the test suite defined sample
+ # fields.
+ class_dict = locals()
+ for item in test_suite.sample_fields:
+ if item.name in class_dict:
+ raise ValueError,"test suite defines reserved key %r" % (
+ name,)
+
+ if item.type.name == 'Real':
+ class_dict[item.name] = Column(item.name, Float)
+ elif item.type.name == 'Status':
+ class_dict[item.name] = Column(item.name, Integer,
+ ForeignKey(
+ testsuite.StatusKind.id))
+ else:
+ raise ValueError,(
+ "test suite defines unknown sample type %r" (
+ item.type.name,))
def __init__(self, run, test):
self.run = run
Modified: zorg/trunk/lnt/tests/server/db/CreateV4TestSuiteInstance.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/tests/server/db/CreateV4TestSuiteInstance.py?rev=146788&r1=146787&r2=146788&view=diff
==============================================================================
--- zorg/trunk/lnt/tests/server/db/CreateV4TestSuiteInstance.py (original)
+++ zorg/trunk/lnt/tests/server/db/CreateV4TestSuiteInstance.py Fri Dec 16 18:12:19 2011
@@ -13,6 +13,20 @@
# Create a new TestSuite.
ts = testsuite.TestSuite("nt", "NT", 0)
+
+# Define the default sample types.
+real_sample_type = testsuite.SampleType("Real")
+status_sample_type = testsuite.SampleType("Status")
+
+# Add reasonable definitions for the machine, run, order, and sample fields.
+ts.machine_fields.append(testsuite.MachineField("uname", "uname"))
+ts.order_fields.append(testsuite.OrderField("llvm_revision", "llvm_revision",
+ 1))
+ts.run_fields.append(testsuite.RunField("arch", "ARCH"))
+ts.sample_fields.append(testsuite.SampleField("value", real_sample_type,
+ ".value"))
+ts.sample_fields.append(testsuite.SampleField("status", status_sample_type,
+ ".value.status"))
db.add(ts)
db.commit()
@@ -28,10 +42,14 @@
end_time = datetime.datetime.utcnow()
machine = ts_db.Machine("test-machine", 1)
+machine.uname = "test-uname"
order = ts_db.Order()
+order.llvm_revision = "test-revision"
run = ts_db.Run(machine, order, start_time, end_time)
+run.arch = "test-arch"
test = ts_db.Test("test-a")
sample = ts_db.Sample(run, test)
+sample.value = 1.0
# Add and commit.
ts_db.add(machine)
@@ -66,13 +84,18 @@
# Audit the various fields.
assert machine.name == "test-machine"
assert machine.number == 1
+assert machine.uname == "test-uname"
+
+assert order.llvm_revision == "test-revision"
assert run.machine is machine
assert run.order is order
assert run.start_time == start_time
assert run.end_time == end_time
+assert run.arch == "test-arch"
assert test.name == "test-a"
assert sample.run is run
assert sample.test is test
+assert sample.value == 1.0
More information about the llvm-commits
mailing list