def setUp(self): self.vs = ValueStore() yield self.vs.init()
class ValueStoreTest(unittest.TestCase): """ Testing value store: store of immutable values (blobs, trees, commits) """ @defer.inlineCallbacks def setUp(self): self.vs = ValueStore() yield self.vs.init() def test_ValueObjects(self): # Testing all Value Objects vref1 = ValueRef("some") self.assertEqual(vref1.identity, "some") self.assertEqual(vref1.vtype, None) vref2 = ValueRef("other", "X") self.assertEqual(vref2.vtype, "X") # Blob value objects vo1 = ValueObject("1") self.assertNotEqual(vo1.identity, None) self.assertEqual(vo1.vtype, "B") print vo1 print "vo1=", vo1.__dict__ vo2 = ValueObject(2) self.assertNotEqual(vo1.identity, vo2.identity) vo3 = ValueObject(("a", "b")) self.assertNotEqual(vo1.identity, vo3.identity) vo4 = ValueObject(["a", "b"]) vo5 = ValueObject({"a": "b", "c": (1, 2), "d": {}, "e": {"x": "y"}}) self.assertNotEqual(vo5.identity, vo4.identity) print "vo5=", vo5.__dict__ # Tree value objects with childrefs tv0 = TreeValue() self.assertEqual(tv0.vtype, "T") tv1 = TreeValue(()) self.assertEqual(tv0.identity, tv1.identity) tv2 = TreeValue(vo1.identity) tv3 = TreeValue((vo1.identity,)) tv4 = TreeValue(vo1) tv5 = TreeValue((vo1,)) self.assertEqual(tv2.identity, tv3.identity) self.assertEqual(tv4.identity, tv5.identity) self.assertEqual(tv2.identity, tv4.identity) self.assertNotEqual(tv0.identity, tv2.identity) tv6 = TreeValue((vo2, vo3)) print "tv6=", tv6.__dict__ tv7 = TreeValue((vo3, vo2)) self.assertEqual(tv6.identity, tv7.identity) tv8 = TreeValue(tv6) tv9 = TreeValue((tv6, tv7, vo5)) # Check cycle in tree tv10 = TreeValue((tv8, tv6)) # Commit value objects with root tree cv0 = CommitValue() self.assertEqual(cv0.vtype, "C") cv1 = CommitValue(tv2) cv2 = CommitValue(tv2.identity) self.assertEqual(cv1.identity, cv2.identity) self.assertNotEqual(cv0.identity, cv1.identity) # Commit value objects with parent commits cv5 = CommitValue(None, (cv1, cv0)) cv6 = CommitValue(None, cv2) cv7 = CommitValue(None, (cv0, cv1)) self.assertNotEqual(cv5.identity, cv7.identity) # Composite value objects with childref and base cvc1 = CommitValue(tv2, (cv1, cv2)) print "cvc1=", cvc1.__dict__ cvc2 = CommitValue(tv2, cvc1, ts=123, committer="mike", author="some") self.assertEqual(cvc2.value["committer"], "mike") print "cvc2=", cvc2.__dict__ # Reference values rv1 = RefValue("ref1") print "rv1=", rv1.__dict__ self.assertEqual(rv1.vtype, "R") rv2 = RefValue("ref2") # Test ValueRef generation vr1 = cvc1._value_ref() self.assertEqual(vr1.identity, cvc1.identity) self.assertFalse(vr1 is cvc1) self.assertFalse(hasattr(vr1, "value")) self.assertEqual(vr1.vtype, "C") @defer.inlineCallbacks def test_ValueStore(self): vo1 = ValueObject("1") rvo1 = yield self.vs.put_value(vo1) rvo2 = yield self.vs.put_value(vo1) # Put in values and trees r1 = yield self.vs.put_value("1") print "r1=", r1 self.assertTrue(isinstance(r1, ValueRef)) self.assertFalse(hasattr(r1, "value")) # Check that a value object actually was placed in the values store re1 = yield self.vs.exists_value(ValueObject("1").identity) self.assertTrue(re1) self.assertEqual(rvo1.identity, r1.identity) r2 = yield self.vs.put_value("2") rt1 = yield self.vs.put_tree((r1, r2)) r3 = yield self.vs.put_value("3") rt2 = yield self.vs.put_tree((r3, rt1)) r4 = yield self.vs.put_value("4") r5 = yield self.vs.put_value("5") rt3 = yield self.vs.put_tree((r4, r5)) rt4 = yield self.vs.put_tree((rt2, rt3)) # Test gets rv1 = yield self.vs.get_value(r1) self.assertEqual(rv1.value, "1") self.assertEqual(rv1.vtype, "B") rvs1 = yield self.vs.get_value(r1.identity) self.assertEqual(rv1.identity, rvs1.identity) rv2 = yield self.vs.get_value(rt1) self.assertEqual(rv2.vtype, "T") self.assertEqual(rv2.value["children"][0]["ref"], r1.identity) rv3 = yield self.vs.get_value("not_exist") self.assertEqual(rv3, None) rest1 = yield self.vs.get_tree_entries(rt1) print "rest1=", rest1 self.assertEqual(len(rest1), 2) self.assertTrue(rest1[0]["ref"] == r1.identity or rest1[1]["ref"] == r1.identity) self.assertTrue(rest1[0]["ref"] == r2.identity or rest1[1]["ref"] == r2.identity) rest2 = yield self.vs.get_tree_entries("not_exist") self.assertEqual(rest2, None) restv1 = yield self.vs.get_tree_entriesvalues(rt1) self.assertEqual(len(restv1), 2) self.assertEqual(int(restv1[0].value.value) + int(restv1[1].value.value), 3) restv2 = yield self.vs.get_tree_entriesvalues("not_exist") self.assertEqual(restv2, None) # Commits rc1 = yield self.vs.put_commit(rt1) rc2 = yield self.vs.put_commit(rt2, rc1) rc3 = yield self.vs.put_commit(rt2, rc2, committer="me") rcg1 = yield self.vs.get_commit(rc1) self.assertEqual(rcg1.identity, rc1.identity) self.assertEqual(rcg1.value["parents"], []) self.assertEqual(rcg1.value["roottree"], rt1.identity) rcgv1 = yield self.vs.get_commit_root_entriesvalues(rc1) self.assertEqual(len(rcgv1), 2) self.assertEqual(int(rcgv1[0].value.value) + int(rcgv1[1].value.value), 3)