|
@@ -460,26 +460,43 @@ class Serialize(unittest.TestCase):
|
|
|
self.assertEqual(newd.getVarFlag('HELLO', 'other'), 'planet')
|
|
|
|
|
|
|
|
|
+# Remote datastore tests
|
|
|
+# These really only test the interface, since in actual usage we have a
|
|
|
+# tinfoil connector that does everything over RPC, and this doesn't test
|
|
|
+# that.
|
|
|
+
|
|
|
+class TestConnector:
|
|
|
+ d = None
|
|
|
+ def __init__(self, d):
|
|
|
+ self.d = d
|
|
|
+ def getVar(self, name):
|
|
|
+ return self.d._findVar(name)
|
|
|
+ def getKeys(self):
|
|
|
+ return set(self.d.keys())
|
|
|
+ def getVarHistory(self, name):
|
|
|
+ return self.d.varhistory.variable(name)
|
|
|
+ def expandPythonRef(self, varname, expr, d):
|
|
|
+ localdata = self.d.createCopy()
|
|
|
+ for key in d.localkeys():
|
|
|
+ localdata.setVar(d.getVar(key))
|
|
|
+ varparse = bb.data_smart.VariableParse(varname, localdata)
|
|
|
+ return varparse.python_sub(expr)
|
|
|
+ def setVar(self, name, value):
|
|
|
+ self.d.setVar(name, value)
|
|
|
+ def setVarFlag(self, name, flag, value):
|
|
|
+ self.d.setVarFlag(name, flag, value)
|
|
|
+ def delVar(self, name):
|
|
|
+ self.d.delVar(name)
|
|
|
+ return False
|
|
|
+ def delVarFlag(self, name, flag):
|
|
|
+ self.d.delVarFlag(name, flag)
|
|
|
+ return False
|
|
|
+ def renameVar(self, name, newname):
|
|
|
+ self.d.renameVar(name, newname)
|
|
|
+ return False
|
|
|
+
|
|
|
class Remote(unittest.TestCase):
|
|
|
def test_remote(self):
|
|
|
- class TestConnector:
|
|
|
- d = None
|
|
|
- def __init__(self, d):
|
|
|
- self.d = d
|
|
|
- def getVar(self, name):
|
|
|
- return self.d._findVar(name)
|
|
|
- def getKeys(self):
|
|
|
- return self.d.localkeys()
|
|
|
- def getVarHistory(self, name):
|
|
|
- return self.d.varhistory.variable(name)
|
|
|
- def expandPythonRef(self, varname, expr, d):
|
|
|
- localdata = self.d.createCopy()
|
|
|
- for key in d.localkeys():
|
|
|
- localdata.setVar(d.getVar(key))
|
|
|
- varparse = bb.data_smart.VariableParse(varname, localdata)
|
|
|
- return varparse.python_sub(expr)
|
|
|
- def setVar(self, name, value):
|
|
|
- self.d.setVar(name, value)
|
|
|
|
|
|
d1 = bb.data.init()
|
|
|
d1.enableTracking()
|
|
@@ -500,6 +517,9 @@ class Remote(unittest.TestCase):
|
|
|
# Test setVar on client side affects server
|
|
|
d2.setVar('HELLO', 'other-world')
|
|
|
self.assertEqual(d1.getVar('HELLO'), 'other-world')
|
|
|
+ # Test setVarFlag on client side affects server
|
|
|
+ d2.setVarFlag('HELLO', 'flagname', 'flagvalue')
|
|
|
+ self.assertEqual(d1.getVarFlag('HELLO', 'flagname'), 'flagvalue')
|
|
|
# Test client side data is incorporated in python expansion (which is done on server)
|
|
|
d2.setVar('FOO', 'bar')
|
|
|
self.assertEqual(d2.expand('${@d.getVar("FOO")}'), 'bar')
|
|
@@ -507,3 +527,75 @@ class Remote(unittest.TestCase):
|
|
|
d1.setVar('FOO_test', 'baz')
|
|
|
d1.appendVar('OVERRIDES', ':test')
|
|
|
self.assertEqual(d2.getVar('FOO'), 'baz')
|
|
|
+
|
|
|
+
|
|
|
+# Remote equivalents of local test classes
|
|
|
+# Note that these aren't perfect since we only test in one direction
|
|
|
+
|
|
|
+class RemoteDataExpansions(DataExpansions):
|
|
|
+ def setUp(self):
|
|
|
+ self.d1 = bb.data.init()
|
|
|
+ self.d = bb.data.init()
|
|
|
+ self.d1["foo"] = "value_of_foo"
|
|
|
+ self.d1["bar"] = "value_of_bar"
|
|
|
+ self.d1["value_of_foo"] = "value_of_'value_of_foo'"
|
|
|
+ connector = TestConnector(self.d1)
|
|
|
+ self.d.setVar('_remote_data', connector)
|
|
|
+
|
|
|
+class TestRemoteNestedExpansions(TestNestedExpansions):
|
|
|
+ def setUp(self):
|
|
|
+ self.d1 = bb.data.init()
|
|
|
+ self.d = bb.data.init()
|
|
|
+ self.d1["foo"] = "foo"
|
|
|
+ self.d1["bar"] = "bar"
|
|
|
+ self.d1["value_of_foobar"] = "187"
|
|
|
+ connector = TestConnector(self.d1)
|
|
|
+ self.d.setVar('_remote_data', connector)
|
|
|
+
|
|
|
+class TestRemoteConcat(TestConcat):
|
|
|
+ def setUp(self):
|
|
|
+ self.d1 = bb.data.init()
|
|
|
+ self.d = bb.data.init()
|
|
|
+ self.d1.setVar("FOO", "foo")
|
|
|
+ self.d1.setVar("VAL", "val")
|
|
|
+ self.d1.setVar("BAR", "bar")
|
|
|
+ connector = TestConnector(self.d1)
|
|
|
+ self.d.setVar('_remote_data', connector)
|
|
|
+
|
|
|
+class TestRemoteConcatOverride(TestConcatOverride):
|
|
|
+ def setUp(self):
|
|
|
+ self.d1 = bb.data.init()
|
|
|
+ self.d = bb.data.init()
|
|
|
+ self.d1.setVar("FOO", "foo")
|
|
|
+ self.d1.setVar("VAL", "val")
|
|
|
+ self.d1.setVar("BAR", "bar")
|
|
|
+ connector = TestConnector(self.d1)
|
|
|
+ self.d.setVar('_remote_data', connector)
|
|
|
+
|
|
|
+class TestRemoteOverrides(TestOverrides):
|
|
|
+ def setUp(self):
|
|
|
+ self.d1 = bb.data.init()
|
|
|
+ self.d = bb.data.init()
|
|
|
+ self.d1.setVar("OVERRIDES", "foo:bar:local")
|
|
|
+ self.d1.setVar("TEST", "testvalue")
|
|
|
+ connector = TestConnector(self.d1)
|
|
|
+ self.d.setVar('_remote_data', connector)
|
|
|
+
|
|
|
+class TestRemoteKeyExpansion(TestKeyExpansion):
|
|
|
+ def setUp(self):
|
|
|
+ self.d1 = bb.data.init()
|
|
|
+ self.d = bb.data.init()
|
|
|
+ self.d1.setVar("FOO", "foo")
|
|
|
+ self.d1.setVar("BAR", "foo")
|
|
|
+ connector = TestConnector(self.d1)
|
|
|
+ self.d.setVar('_remote_data', connector)
|
|
|
+
|
|
|
+class TestRemoteFlags(TestFlags):
|
|
|
+ def setUp(self):
|
|
|
+ self.d1 = bb.data.init()
|
|
|
+ self.d = bb.data.init()
|
|
|
+ self.d1.setVar("foo", "value of foo")
|
|
|
+ self.d1.setVarFlag("foo", "flag1", "value of flag1")
|
|
|
+ self.d1.setVarFlag("foo", "flag2", "value of flag2")
|
|
|
+ connector = TestConnector(self.d1)
|
|
|
+ self.d.setVar('_remote_data', connector)
|