Example #1
0
    def test_pinning(self):
        # pinning is reflected in is_pinned
        for master in settings.MASTER_DATABASES:
            self.assertFalse(pindb.is_pinned(master))
            pindb.pin(master)
            self.assertTrue(pindb.is_pinned(master))
        # unpin_all resets the state.
        pindb.unpin_all()
        for master in settings.MASTER_DATABASES:
            self.assertFalse(pindb.is_pinned(master))

        pindb.pin("default")
        # pinning state is available as a set.
        pinned1 = pindb.get_pinned()
        self.assertTrue('default' in pinned1)
        # unpinning doesn't affect the previous set.
        pindb.unpin_all()
        pinned2 = pindb.get_pinned()
        self.assertTrue('default' in pinned1)
        self.assertFalse('default' in pinned2)

        # we can keep track of new pins vs. carried-over pins
        #  i.e. pins that stick for the replication lag period.
        self.assertEqual(0, len(pindb.get_newly_pinned()))
        pindb.pin("default")
        self.assertEqual(1, len(pindb.get_newly_pinned()))
        pindb.unpin_all()
        self.assertEqual(0, len(pindb.get_newly_pinned()))
        pindb.pin("default", count_as_new=False)
        self.assertEqual(0, len(pindb.get_newly_pinned()))
        # it counts as pinned even if we don't count it as new.
        self.assertEqual(1, len(pindb.get_pinned()))
Example #2
0
    def test_router(self):
        # Ham should go in the default DB:
        self.assertEqual(dj_db.router.db_for_read(HamModel), "default")
        # Reading one shouldn't cause it to pin:
        self.assertEqual(pindb.is_pinned("default"), False)
        # The delegate router has no opinion on Hams, so they should write to
        # the default DB:
        self.assertEqual(dj_db.router.db_for_write(HamModel), "default")
        # The above should cause it to pin (even though default has no slaves
        # in this case):
        self.assertEqual(pindb.is_pinned("default"), True)

        # Eggs are stored in a replicated DB set, so we should read from a replica:
        self.assertTrue(dj_db.router.db_for_read(EggModel) in ["egg-0", "egg-1"])
        # Reading shouldn't pin:
        self.assertEqual(pindb.is_pinned("egg"), False)
        # Writes should go to master:
        self.assertEqual(dj_db.router.db_for_write(EggModel), "egg")
        # And should cause a pin:
        self.assertEqual(pindb.is_pinned("egg"), True)
        pindb.unpin_all()

        # Making a Ham should pin to the master of the default set...
        ham1 = HamModel.objects.create()
        self.assertEqual(pindb.is_pinned("default"), True)
        # ...but not the egg set:
        self.assertEqual(pindb.is_pinned("egg"), False)

        # Making an Egg should pin the egg set as well:
        egg1 = EggModel.objects.create()
        self.assertEqual(pindb.is_pinned("egg"), True)
        pindb.unpin_all()

        ham1a = HamModel.objects.get(pk=ham1.pk)
        egg1a = EggModel.objects.get(pk=egg1.pk)  # no longer bewm
Example #3
0
    def test_router(self):
        # Ham should go in the default DB:
        self.assertEqual(dj_db.router.db_for_read(HamModel), "default")
        # Reading one shouldn't cause it to pin:
        self.assertEqual(pindb.is_pinned("default"), False)
        # The delegate router has no opinion on Hams, so they should write to
        # the default DB:
        self.assertEqual(dj_db.router.db_for_write(HamModel), "default")
        # The above should *not* cause it to pin since we're disabled.
        self.assertEqual(pindb.is_pinned("default"), False)

        # Eggs are stored in a replicated DB set, but since we're disabled, 
        #   we should still get the master.
        self.assertEqual(dj_db.router.db_for_read(EggModel), "egg")
        # Reading shouldn't pin:
        self.assertEqual(pindb.is_pinned("egg"), False)
        # Writes should go to master:
        self.assertEqual(dj_db.router.db_for_write(EggModel), "egg")
        # but still should *not* cause it to pin since we're disabled.
        self.assertEqual(pindb.is_pinned("egg"), False)