artiq/artiq/test/hardware_testbench.py

63 lines
1.8 KiB
Python
Raw Normal View History

2015-06-26 12:19:11 +08:00
import os
import sys
import unittest
import logging
2015-06-29 10:08:39 +08:00
from artiq.language import *
2015-06-26 12:19:11 +08:00
from artiq.protocols.file_db import FlatFileDB
2015-07-14 04:08:20 +08:00
from artiq.master.worker_db import DeviceManager, ResultDB
from artiq.frontend.artiq_run import DummyScheduler
2015-06-26 12:19:11 +08:00
artiq_root = os.getenv("ARTIQ_ROOT")
logger = logging.getLogger(__name__)
def get_from_ddb(*path, default="skip"):
if not artiq_root:
raise unittest.SkipTest("no ARTIQ_ROOT")
v = FlatFileDB(os.path.join(artiq_root, "ddb.pyon")).data
try:
for p in path:
2015-07-05 12:36:23 +08:00
v = v[p]
return v.read
except KeyError:
if default == "skip":
raise unittest.SkipTest("ddb path {} not found".format(path))
else:
return default
2015-06-26 12:19:11 +08:00
@unittest.skipUnless(artiq_root, "no ARTIQ_ROOT")
class ExperimentCase(unittest.TestCase):
def setUp(self):
self.ddb = FlatFileDB(os.path.join(artiq_root, "ddb.pyon"))
2015-07-14 04:08:20 +08:00
self.dmgr = DeviceManager(self.ddb,
virtual_devices={"scheduler": DummyScheduler()})
2015-06-26 12:19:11 +08:00
self.pdb = FlatFileDB(os.path.join(artiq_root, "pdb.pyon"))
2015-07-14 04:08:20 +08:00
self.rdb = ResultDB()
2015-06-26 12:19:11 +08:00
def create(self, cls, **kwargs):
try:
exp = cls(self.dmgr, self.pdb, self.rdb, **kwargs)
exp.prepare()
return exp
except KeyError as e:
# skip if ddb does not match requirements
raise unittest.SkipTest(*e.args)
def execute(self, cls, *args, **kwargs):
2015-06-26 12:19:11 +08:00
expid = {
"file": sys.modules[cls.__module__].__file__,
2015-07-15 17:08:12 +08:00
"class_name": cls.__name__,
2015-06-26 12:19:11 +08:00
"arguments": kwargs
}
2015-07-14 04:08:20 +08:00
self.dmgr.virtual_devices["scheduler"].expid = expid
2015-06-26 12:19:11 +08:00
try:
exp = self.create(cls, **kwargs)
2015-06-26 12:19:11 +08:00
exp.run()
exp.analyze()
2015-07-05 10:05:11 +08:00
return exp
2015-06-26 12:19:11 +08:00
finally:
2015-07-14 04:08:20 +08:00
self.dmgr.close_devices()