def test_visibility_metric(self): """ Test that the visibility metric is tracked """ v1 = Version(self.replica) calls = [] replicas = [r for r in self.sim.replicas if r != self.replica] for idx, replica in enumerate(replicas): self.sim.env.now += (2 * (idx + 1)) v1.update(replica) self.assertGreater(v1.updated, v1.created) self.assertEqual(v1.updated, self.sim.env.now) pcent = float(idx + 2) / float(len(self.sim.replicas)) calls.append( mock.call('visibility', (self.replica.id, str(v1), pcent, v1.created, self.sim.env.now))) # Check that this is the last call self.sim.results.update.assert_has_calls(calls + [ mock.call('visibility latency', (self.replica.id, str(v1), v1.created, v1.updated)) ], any_order=True) self.assertTrue(v1.is_visible())
def test_version_string(self): """ Test that the version string is compressed. """ version = Version(self.replica) self.assertEqual(str(version), "root->1") for idx in xrange(100): version = version.nextv(self.replica) self.assertEqual(str(version), "100->101")
def test_is_stale(self): """ Test the staleness of a version. """ v1 = Version(self.replica) self.assertFalse(v1.is_stale()) self.sim.env.now = 42 v2 = v1.nextv( random.choice([r for r in self.sim.replicas if r != self.replica])) self.assertTrue(v1.is_stale()) self.assertFalse(v2.is_stale())
def test_version_comparison(self): """ Test version comparison based on fork """ v1 = Version(self.replica) v2 = v1.nextv(self.replica) self.assertLess(v1, v2) self.assertLessEqual(v1, v2) self.assertLessEqual(v2, v2) self.assertEqual(v1, v1) self.assertNotEqual(v1, v2) self.assertGreater(v2, v1) self.assertGreaterEqual(v2, v1) self.assertGreaterEqual(v2, v2)
def test_nextv(self): """ Test getting the next version of an object. """ v1 = Version(self.replica) self.sim.env.now = 42 v2 = v1.nextv( random.choice([r for r in self.sim.replicas if r != self.replica])) self.assertIsInstance(v2, Version) self.assertEqual(v2.parent, v1) self.assertEqual(v1.level, v2.level) self.assertFalse(v2.committed) self.assertGreater(v2.version, v1.version) self.assertGreater(v2.created, v1.created) self.assertGreater(v2.updated, v1.created) self.assertNotEqual(v2.writer, v1.writer) self.assertEqual(v1.counter, v2.counter)
def test_update(self): """ Test the update of a version over time. """ v1 = Version(self.replica) for idx, replica in enumerate(self.sim.replicas): if replica == self.replica: continue self.sim.env.now += (2 * (idx + 1)) v1.update(replica) self.assertGreater(v1.updated, v1.created) self.assertEqual(v1.updated, self.sim.env.now) # Check that this is the last call self.sim.results.update.assert_called_with( 'visibility latency', (self.replica.id, str(v1), v1.created, v1.updated)) self.assertTrue(v1.is_visible())
def test_forked_version_string(self): """ Test the compressability of a forked version string. """ version = Version(self.replica) for idx in xrange(5): version = version.nextv(self.replica) # Now we split version_a = version.nextv(self.replica) version_b = version.nextv(self.replica) for idx in xrange(3): version_a = version_a.nextv(self.replica) for idx in xrange(9): version_b = version_b.nextv(self.replica) self.assertEqual(str(version_a), '') self.assertEqual(str(version_b), '')
def test_commit(self): """ Test the commit of a version over time. """ v1 = Version(self.replica) for idx, replica in enumerate(self.sim.replicas): if replica == self.replica: continue self.sim.env.now += (2 * (idx + 1)) v1.update(replica) self.sim.results.update.assert_called_with( 'visibility latency', (self.replica.id, str(v1), v1.created, v1.updated)) self.assertTrue(v1.is_visible()) v1.update(self.replica, commit=True) self.assertTrue(v1.committed) self.assertTrue(v1.is_committed()) self.sim.results.update.assert_called_with( 'commit latency', (self.replica.id, str(v1), v1.created, v1.updated))