def test_write_builder(self, fdclose, pd, gmd5, mbackup, ftmp, frename, fake_chmod): fake_chmod.return_value = True frename.return_value = True ftmp.return_value = [1, '/fake/path/a.file'] mbackup.return_value = ['testit', 'somemd5'] gmd5.return_value = True pd.return_value = Mock() fdclose.return_value = Mock() fb = FakedBuilder(device_count=4) builder = fb.gen_builder(balanced=False) builder.devs_changed = False rmd = RingMasterServer(rms_conf={'ringmasterd': self.confdict}) rmd.swiftdir = os.path.realpath('.') rmd.logger = MagicMock() self.assertTrue(rmd.write_builder('object', builder)) self.assertEquals( ftmp.mock_calls, [call(suffix='.tmp.builder', dir=os.path.realpath('.'))]) fake_builder_path = os.path.join(self.testdir, 'object.builder') fake_builder_bdir = os.path.join(self.testdir, 'backup') self.assertEquals(mbackup.mock_calls, [call(fake_builder_path, fake_builder_bdir)]) self.assertEquals(fdclose.mock_calls, [call(1)]) ftmp.return_value = [2, '/fake/path/a.file'] mbackup.side_effect = Exception('OMGMONKEY!') self.assertRaises(Exception, rmd.write_builder, ['something', 'else'])
def test_write_builder(self, fdclose, pd, gmd5, mbackup, ftmp, frename, fake_chmod): fake_chmod.return_value = True frename.return_value = True ftmp.return_value = [1, '/fake/path/a.file'] mbackup.return_value = ['testit', 'somemd5'] gmd5.return_value = True pd.return_value = Mock() fdclose.return_value = Mock() fb = FakedBuilder(device_count=4) builder = fb.gen_builder(balanced=False) builder.devs_changed = False rmd = RingMasterServer(rms_conf={'ringmasterd': self.confdict}) rmd.swiftdir = os.path.realpath('.') rmd.logger = MagicMock() self.assertTrue(rmd.write_builder('object', builder)) self.assertEquals(ftmp.mock_calls, [call( suffix='.tmp.builder', dir=os.path.realpath('.'))]) fake_builder_path = os.path.join(self.testdir, 'object.builder') fake_builder_bdir = os.path.join(self.testdir, 'backup') self.assertEquals( mbackup.mock_calls, [call(fake_builder_path, fake_builder_bdir)]) self.assertEquals(fdclose.mock_calls, [call(1)]) ftmp.return_value = [2, '/fake/path/a.file'] mbackup.side_effect = Exception('OMGMONKEY!') self.assertRaises(Exception, rmd.write_builder, ['something', 'else'])
def test_orchestration_pass(self, srs): srs.return_value = Mock() self._setup_builder_rings(count=4, balanced=False) rmd = RingMasterServer(rms_conf={'ringmasterd': self.confdict}) rmd.logger = MagicMock() rmd.ring_requires_change = MagicMock(return_value=True) rmd.min_part_hours_ok = MagicMock(return_value=True) rmd.min_modify_time = MagicMock(return_value=True) rmd.dispersion_ok = MagicMock(return_value=True) rmd.ring_balance_ok = MagicMock(return_value=True) rmd.rebalance_ring = MagicMock(return_value=True) rmd.write_builder = MagicMock(return_value=True) rmd.write_ring = MagicMock(return_value=True) def _reset_all(): rmd.ring_requires_change.reset_mock() rmd.min_part_hours_ok.reset_mock() rmd.min_modify_time.reset_mock() rmd.dispersion_ok.reset_mock() rmd.ring_balance_ok.reset_mock() rmd.rebalance_ring.reset_mock() rmd.write_builder.reset_mock() rmd.write_ring.reset_mock() srs.reset_mock() # passes with no changes rmd.ring_requires_change.return_value = False ring_changed = rmd.orchestration_pass('object') self.assertFalse(rmd.min_part_hours_ok.called) self.assertFalse(rmd.min_modify_time.called) self.assertFalse(rmd.dispersion_ok.called) self.assertFalse(rmd.ring_balance_ok.called) self.assertFalse(rmd.rebalance_ring.called) self.assertFalse(rmd.write_builder.called) self.assertFalse(rmd.write_ring.called) self.assertFalse(ring_changed) _reset_all() # change required, with min_part_hours enabled and everything ready rmd.ring_requires_change.return_value = True rmd.mph_enabled = True ring_changed = rmd.orchestration_pass('object') self.assertTrue(rmd.min_part_hours_ok.called) self.assertTrue(rmd.min_modify_time.called) self.assertTrue(rmd.dispersion_ok.called) self.assertTrue(rmd.ring_balance_ok.called) self.assertTrue(rmd.rebalance_ring.called) self.assertTrue(rmd.write_builder.called) self.assertTrue(rmd.write_ring.called) self.assertTrue(ring_changed) _reset_all() # change required, min_part_hours enabled and min_part_hours not ready rmd.ring_requires_change.return_value = True rmd.mph_enabled = True rmd.min_part_hours_ok.return_value = False ring_changed = rmd.orchestration_pass('object') self.assertTrue(rmd.min_part_hours_ok.called) self.assertFalse(rmd.min_modify_time.called) self.assertFalse(rmd.dispersion_ok.called) self.assertFalse(rmd.ring_balance_ok.called) self.assertFalse(rmd.rebalance_ring.called) self.assertFalse(rmd.write_builder.called) self.assertFalse(rmd.write_ring.called) self.assertFalse(ring_changed) rmd.min_part_hours_ok.return_value = True _reset_all() # change required, min_part_hours enabled and min_modify_time not ready rmd.ring_requires_change.return_value = True rmd.mph_enabled = True rmd.min_modify_time.return_value = False ring_changed = rmd.orchestration_pass('object') self.assertTrue(rmd.min_part_hours_ok.called) self.assertTrue(rmd.min_modify_time.called) self.assertFalse(rmd.dispersion_ok.called) self.assertFalse(rmd.ring_balance_ok.called) self.assertFalse(rmd.rebalance_ring.called) self.assertFalse(rmd.write_builder.called) self.assertFalse(rmd.write_ring.called) self.assertFalse(ring_changed) rmd.min_modify_time.return_value = True _reset_all() # change required, min_part_hours enabled and dispersion not ready rmd.ring_requires_change.return_value = True rmd.mph_enabled = True rmd.dispersion_ok.return_value = False ring_changed = rmd.orchestration_pass('object') self.assertTrue(rmd.min_part_hours_ok.called) self.assertTrue(rmd.min_modify_time.called) self.assertTrue(rmd.dispersion_ok.called) self.assertFalse(rmd.ring_balance_ok.called) self.assertFalse(rmd.rebalance_ring.called) self.assertFalse(rmd.write_builder.called) self.assertFalse(rmd.write_ring.called) self.assertFalse(ring_changed) rmd.dispersion_ok.return_value = True _reset_all() # change required, min_part_hours enabled and ring balance not ready rmd.ring_requires_change.return_value = True rmd.mph_enabled = True rmd.ring_balance_ok.return_value = False ring_changed = rmd.orchestration_pass('object') self.assertTrue(rmd.min_part_hours_ok.called) self.assertTrue(rmd.min_modify_time.called) self.assertTrue(rmd.dispersion_ok.called) self.assertTrue(rmd.ring_balance_ok.called) self.assertTrue(rmd.rebalance_ring.called) self.assertTrue(rmd.write_builder.called) self.assertTrue(rmd.write_ring.called) self.assertTrue(ring_changed) rmd.ring_balance_ok.return_value = True _reset_all()