[llvm-commits] [zorg] r146772 - in /zorg/trunk/lnt: lnt/server/db/ lnt/server/db/__init__.py lnt/server/db/testsuite.py lnt/server/db/v4db.py tests/server/ tests/server/db/ tests/server/db/CreateV4TestSuite.py

Daniel Dunbar daniel at zuster.org
Fri Dec 16 15:14:43 PST 2011


Author: ddunbar
Date: Fri Dec 16 17:14:43 2011
New Revision: 146772

URL: http://llvm.org/viewvc/llvm-project?rev=146772&view=rev
Log:
[v0.4] server.db: Start sketching models for the TestSuite object.

Added:
    zorg/trunk/lnt/lnt/server/db/
    zorg/trunk/lnt/lnt/server/db/__init__.py
    zorg/trunk/lnt/lnt/server/db/testsuite.py
    zorg/trunk/lnt/lnt/server/db/v4db.py
    zorg/trunk/lnt/tests/server/
    zorg/trunk/lnt/tests/server/db/
    zorg/trunk/lnt/tests/server/db/CreateV4TestSuite.py

Added: zorg/trunk/lnt/lnt/server/db/__init__.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/db/__init__.py?rev=146772&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/db/__init__.py (added)
+++ zorg/trunk/lnt/lnt/server/db/__init__.py Fri Dec 16 17:14:43 2011
@@ -0,0 +1 @@
+__all__ = []

Added: zorg/trunk/lnt/lnt/server/db/testsuite.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/db/testsuite.py?rev=146772&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/db/testsuite.py (added)
+++ zorg/trunk/lnt/lnt/server/db/testsuite.py Fri Dec 16 17:14:43 2011
@@ -0,0 +1,82 @@
+"""
+Database models for the TestSuites abstraction.
+"""
+
+import sqlalchemy
+import sqlalchemy.ext.declarative
+import sqlalchemy.orm
+from sqlalchemy import *
+from sqlalchemy.schema import Index
+from sqlalchemy.orm import relation, backref
+from sqlalchemy.orm.collections import attribute_mapped_collection
+
+Base = sqlalchemy.ext.declarative.declarative_base()
+class StatusKind(Base):
+    __tablename__ = 'StatusKind'
+
+    id = Column("ID", Integer, primary_key=True)
+    name = Column("Name", String(256))
+    
+    def __init__(self, name):
+        self.name = name
+
+class TestSuite(Base):
+    __tablename__ = 'TestSuite'
+
+    id = Column("ID", Integer, primary_key=True)
+    name = Column("Name", String(256))
+    db_key_name = Column("DBKeyName", String(256))
+    version = Column("Version", Integer)
+
+    machine_fields = relation('MachineField', backref='test_suite')
+    order_fields = relation('OrderField', backref='test_suite')
+    run_fields = relation('RunField', backref='test_suite')
+
+    def __init__(self, name, db_key_name, version):
+        self.name = name
+        self.db_key_name = db_key_name
+        self.version = version
+
+    def __repr__(self):
+        return '%s%r' % (self.__class__.__name__, (self.name, self.db_key_name,
+                                                   self.version))
+
+class MachineField(Base):
+    __tablename__ = 'TestSuiteMachineFields'
+
+    id = Column("ID", Integer, primary_key=True)
+    test_suite_id = Column("TestSuiteID", Integer, ForeignKey('TestSuite.ID'))
+    name = Column("Name", String(256))
+    info_key = Column("InfoKey", String(256))
+
+    def __init__(self, name, info_key):
+        self.name = name
+        self.info_key = info_key
+
+class OrderField(Base):
+    __tablename__ = 'TestSuiteOrderFields'
+
+    id = Column("ID", Integer, primary_key=True)
+    test_suite_id = Column("TestSuiteID", Integer, ForeignKey('TestSuite.ID'))
+    name = Column("Name", String(256))
+    info_key = Column("InfoKey", String(256))
+    ordinal = Column("Ordinal", Integer)
+
+    def __init__(self, name, info_key, ordinal):
+        assert isinstance(ordinal, int) and ordinal >= 0
+
+        self.name = name
+        self.info_key = info_key
+        self.ordinal = ordinal
+
+class RunField(Base):
+    __tablename__ = 'TestSuiteRunFields'
+
+    id = Column("ID", Integer, primary_key=True)
+    test_suite_id = Column("TestSuiteID", Integer, ForeignKey('TestSuite.ID'))
+    name = Column("Name", String(256))
+    info_key = Column("InfoKey", String(256))
+
+    def __init__(self, name, info_key):
+        self.name = name
+        self.info_key = info_key

Added: zorg/trunk/lnt/lnt/server/db/v4db.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/db/v4db.py?rev=146772&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/db/v4db.py (added)
+++ zorg/trunk/lnt/lnt/server/db/v4db.py Fri Dec 16 17:14:43 2011
@@ -0,0 +1,20 @@
+import sqlalchemy
+import testsuite
+
+class V4DB(object):
+    def __init__(self, path, echo=False):
+        assert (path.startswith('mysql://') or
+                path.startswith('sqlite://')), "invalid database path"
+
+        self.path = path
+        self.engine = sqlalchemy.create_engine(path, echo=echo)
+
+        # Create the common tables in case this is a new database.
+        testsuite.Base.metadata.create_all(self.engine)
+
+        self.session = sqlalchemy.orm.sessionmaker(self.engine)()
+
+        # Add several shortcut aliases.
+        self.add = self.session.add
+        self.commit = self.session.commit
+        self.query = self.session.query

Added: zorg/trunk/lnt/tests/server/db/CreateV4TestSuite.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/tests/server/db/CreateV4TestSuite.py?rev=146772&view=auto
==============================================================================
--- zorg/trunk/lnt/tests/server/db/CreateV4TestSuite.py (added)
+++ zorg/trunk/lnt/tests/server/db/CreateV4TestSuite.py Fri Dec 16 17:14:43 2011
@@ -0,0 +1,43 @@
+# RUN: rm -f %t.db
+# RUN: python %s %t.db
+
+import sys
+from lnt.db.perfdb import PerfDB, Run
+from lnt.server.db import testsuite
+from lnt.server.db import v4db
+
+# Create an in memory database.
+db = v4db.V4DB("sqlite:///:memory:", echo=True)
+
+# Create a new TestSuite.
+ts = testsuite.TestSuite("nt", "NT", 0)
+db.add(ts)
+
+db.commit()
+
+test_suites = list(db.query(testsuite.TestSuite))
+assert len(test_suites) == 1
+ts = test_suites[0]
+
+assert ts.name == "nt"
+assert ts.db_key_name == "NT"
+assert len(ts.machine_fields) == 0
+assert len(ts.order_fields) == 0
+assert len(ts.run_fields) == 0
+
+# Add a field of each type.
+ts.machine_fields.append(testsuite.MachineField("uname", "uname"))
+ts.order_fields.append(testsuite.OrderField("llvm", "llvm", 0))
+ts.run_fields.append(testsuite.RunField("arch", "ARCH"))
+db.commit()
+
+ts = db.query(testsuite.TestSuite).first()
+assert len(ts.machine_fields) == 1
+assert len(ts.order_fields) == 1
+assert len(ts.run_fields) == 1
+assert ts.machine_fields[0].name == "uname"
+assert ts.order_fields[0].name == "llvm"
+assert ts.run_fields[0].name == "arch"
+assert ts.machine_fields[0].test_suite is ts
+assert ts.order_fields[0].test_suite is ts
+assert ts.run_fields[0].test_suite is ts





More information about the llvm-commits mailing list