示例#1
0
	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])
示例#2
0
    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])
示例#3
0
	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)
示例#4
0
    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)
示例#5
0
    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()))
示例#6
0
	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)
示例#7
0
	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
示例#8
0
    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
示例#9
0
    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)
示例#10
0
    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()))