[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