def test_transitive_keep(self): with Connector().create("test.format.foo", "test.foo", [self.store1]) as w1: with Connector().create("test.format.bar", "test.foo", [self.store1]) as w2: w2.write('FILE', 'test') w2.commit() doc2 = w2.getDoc() rev2 = w2.getRev() # create a reference from w1 to w2 w1.write('HPSD', struct.dumps([struct.DocLink(doc2)])) w1.commit() doc1 = w1.getDoc() rev1 = w1.getRev() # w2 is closed now, w1 still open, should prevent gc self.gc(self.store1) l = Connector().lookup_doc(doc1) self.assertEqual(l.revs(), [rev1]) self.assertEqual(l.preRevs(), []) self.assertEqual(Connector().lookup_rev(rev1), [self.store1]) l = Connector().lookup_doc(doc2) self.assertEqual(l.revs(), [rev2]) self.assertEqual(l.preRevs(), []) self.assertEqual(Connector().lookup_rev(rev2), [self.store1])
def test_sticky(self): s = struct.Set() # create sticky contianer on two stores with s.create("foo", [self.store1, self.store2]) as dummy: # create document on first store with Connector().create("test.format.foo", "test.ignore", [self.store1]) as w: w.commit() doc = w.getDoc() rev = w.getRev() watch1 = self.watchDoc(doc, connector.Watch.EVENT_REPLICATED) watch2 = self.watchRev(rev, connector.Watch.EVENT_REPLICATED) # add to sticky container s['dummy'] = struct.DocLink(doc) s.save() # wait for sticky replicatin to happen self.assertTrue(watch1.waitForWatch()) self.assertTrue(watch2.waitForWatch()) # check doc (with rev) to exist on all stores l = Connector().lookup_doc(doc) self.assertEqual(l.revs(), [rev]) self.assertEqual(len(l.stores(rev)), 2) self.assertTrue(self.store1 in l.stores(rev)) self.assertTrue(self.store2 in l.stores(rev)) l = Connector().lookup_rev(rev) self.assertEqual(len(l), 2) self.assertTrue(self.store1 in l) self.assertTrue(self.store2 in l)
def __init__(self, uuid, isDoc, parent=None): super(PropertiesDialog, self).__init__(parent) mainLayout = QtGui.QVBoxLayout() mainLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize) if isDoc: self.doc = uuid info = Connector().lookup_doc(uuid) mainLayout.addWidget(DocumentTab(info.stores(), "document")) self.revs = info.revs() else: self.doc = None mainLayout.addWidget( DocumentTab(Connector().lookup_rev(uuid), "revision")) self.revs = [uuid] if len(self.revs) == 0: QtGui.QMessageBox.warning( self, 'Missing document', 'The requested document was not found on any store.') sys.exit(1) tabWidget = QtGui.QTabWidget() self.annoTab = AnnotationTab(self.revs, isDoc and (len(self.revs) == 1)) QtCore.QObject.connect(self.annoTab, QtCore.SIGNAL("changed()"), self.__changed) tabWidget.addTab(self.annoTab, "Annotation") tabWidget.addTab(HistoryTab(self.revs), "History") if isDoc: tabWidget.addTab(RevisionTab(self.revs), "Revisions") else: tabWidget.addTab(RevisionTab(self.revs), "Revision") mainLayout.addWidget(tabWidget) if isDoc and (len(self.revs) == 1): self.buttonBox = QtGui.QDialogButtonBox( QtGui.QDialogButtonBox.Save | QtGui.QDialogButtonBox.Close) self.buttonBox.button( QtGui.QDialogButtonBox.Save).setEnabled(False) self.buttonBox.accepted.connect(self.__save) self.buttonBox.rejected.connect(self.reject) else: self.buttonBox = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok) self.buttonBox.accepted.connect(self.accept) mainLayout.addWidget(self.buttonBox) self.setLayout(mainLayout) self.setWindowTitle("Properties of %s" % (self.annoTab.getTitle()))
def test_sync_ff_err(self): (doc, rev1, rev2) = self.createMerge("public.data", {}, {'FILE' : "left"}, {'FILE' : "right"}) watch = self.watchDoc(doc, connector.Watch.EVENT_MODIFIED) self.startSync('ff', self.store1, self.store2) self.startSync('ff', self.store2, self.store1) self.assertFalse(watch.waitForWatch(1)) # check that doc is not synced l = Connector().lookup_doc(doc) self.assertEqual(len(l.revs()), 2) self.assertEqual(l.rev(self.store1), rev1) self.assertEqual(l.rev(self.store2), rev2)
def performSync(self, doc, strategy): watch = self.watchDoc(doc, connector.Watch.EVENT_MODIFIED) self.startSync(strategy, self.store1, self.store2) while True: watch.reset() self.assertTrue(watch.waitForWatch()) l = Connector().lookup_doc(doc) if len(l.revs()) == 1: break self.assertEqual(len(l.stores()), 2) self.assertTrue(self.store1 in l.stores()) self.assertTrue(self.store2 in l.stores()) return l
def test_sync_ff_err(self): (doc, rev1, rev2) = self.createMerge("public.data", {}, {'FILE': "left"}, {'FILE': "right"}) watch = self.watchDoc(doc, connector.Watch.EVENT_MODIFIED) self.startSync('ff', self.store1, self.store2) self.startSync('ff', self.store2, self.store1) self.assertFalse(watch.waitForWatch(1)) # check that doc is not synced l = Connector().lookup_doc(doc) self.assertEqual(len(l.revs()), 2) self.assertEqual(l.rev(self.store1), rev1) self.assertEqual(l.rev(self.store2), rev2)
def __init__(self, uuid, isDoc, parent=None): super(PropertiesDialog, self).__init__(parent) mainLayout = QtGui.QVBoxLayout() mainLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize) if isDoc: self.doc = uuid info = Connector().lookup_doc(uuid) mainLayout.addWidget(DocumentTab(info.stores(), "document")) self.revs = info.revs() else: self.doc = None mainLayout.addWidget(DocumentTab(Connector().lookup_rev(uuid), "revision")) self.revs = [uuid] if len(self.revs) == 0: QtGui.QMessageBox.warning(self, "Missing document", "The requested document was not found on any store.") sys.exit(1) tabWidget = QtGui.QTabWidget() self.annoTab = AnnotationTab(self.revs, isDoc and (len(self.revs) == 1)) QtCore.QObject.connect(self.annoTab, QtCore.SIGNAL("changed()"), self.__changed) tabWidget.addTab(self.annoTab, "Annotation") tabWidget.addTab(HistoryTab(self.revs), "History") if isDoc: tabWidget.addTab(RevisionTab(self.revs), "Revisions") else: tabWidget.addTab(RevisionTab(self.revs), "Revision") mainLayout.addWidget(tabWidget) if isDoc and (len(self.revs) == 1): self.buttonBox = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Save | QtGui.QDialogButtonBox.Close) self.buttonBox.button(QtGui.QDialogButtonBox.Save).setEnabled(False) self.buttonBox.accepted.connect(self.__save) self.buttonBox.rejected.connect(self.reject) else: self.buttonBox = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok) self.buttonBox.accepted.connect(self.accept) mainLayout.addWidget(self.buttonBox) self.setLayout(mainLayout) self.setWindowTitle("Properties of %s" % (self.annoTab.getTitle()))