Exemplo n.º 1
0
    def test_create_first_backup_for_new_volume(self):
        h = backup.BackupHelper(self.conf)

        def callback():
            callback.ran = True

        snapshot = {
            'id': 'bak1',
            'timestamp': 1.0,
        }
        snapshot['path'] = os.path.join(self.scratch, 'bak1')
        snapshot['origin'] = 'vol1'
        snapshot['size'] = 4 * 1024 * 1024
        with open(snapshot['path'], 'w') as f:
            f.write('\x00' * snapshot['size'])

        backup_id = 'backup1'

        with mock_spawn() as j:
            h.create(snapshot, backup_id, callback)
            j.run_job()
            self.assert_(callback.ran)

        conn = get_conn(self.conf)
        _headers, raw_json_string = conn.get_object('vol1',
                                                    'manifest', newest=True)
        m = Manifest.loads(raw_json_string)
        self.assertEquals(m.block_count, 1)
        self.assertEquals(m.backups['backup1'], 1.0)
        self.assertEquals(m.history, [1.0])
        self.assert_(isinstance(m[m.history[0]], list))
        stats_path = h._stats_file('vol1')
        self.assertFalse(os.path.exists(stats_path))
Exemplo n.º 2
0
    def test_create_first_backup_for_new_volume(self):
        h = backup.BackupHelper(self.conf)

        def callback():
            callback.ran = True

        snapshot = {
            'id': 'bak1',
            'timestamp': 1.0,
        }
        snapshot['path'] = os.path.join(self.scratch, 'bak1')
        snapshot['origin'] = 'vol1'
        snapshot['size'] = 4 * 1024 * 1024
        with open(snapshot['path'], 'w') as f:
            f.write('\x00' * snapshot['size'])

        backup_id = 'backup1'

        with mock_spawn() as j:
            h.create(snapshot, backup_id, callback)
            j.run_job()
            self.assert_(callback.ran)

        conn = get_conn(self.conf)
        _headers, raw_json_string = conn.get_object('vol1',
                                                    'manifest', newest=True)
        m = Manifest.loads(raw_json_string)
        self.assertEquals(m.block_count, 1)
        self.assertEquals(m.backups['backup1'], 1.0)
        self.assertEquals(m.history, [1.0])
        self.assert_(isinstance(m[m.history[0]], list))
        stats_path = h._stats_file('vol1')
        self.assertFalse(os.path.exists(stats_path))
Exemplo n.º 3
0
    def test_status_client_exception(self):
        h = backup.BackupHelper(self.conf)
        conn = get_conn(self.conf)

        def mock_head_account(*args, **kwargs):
            raise conn.ClientException('unable to connect')
        conn.head_account = mock_head_account
        with patch(backup, 'get_conn', lambda *args: conn):
            self.assertRaises(ServiceUnavailable, h.status)
Exemplo n.º 4
0
    def test_status_client_exception(self):
        h = backup.BackupHelper(self.conf)
        conn = get_conn(self.conf)

        def mock_head_account(*args, **kwargs):
            raise conn.ClientException('unable to connect')
        conn.head_account = mock_head_account
        with patch(backup, 'get_conn', lambda *args: conn):
            self.assertRaises(ServiceUnavailable, h.status)
Exemplo n.º 5
0
 def test_prune_missing_backup_id(self):
     h = backup.BackupHelper(self.conf)
     volume = {'id': 'vol1', 'size': 1}
     existing_backup_id = 'backup1'
     missing_backup_id = 'something_else'
     m = Manifest.blank(volume['size'])
     b = m.create_backup(existing_backup_id, timestamp=1.0)
     for i in range(volume['size']):
         b[i] = '00'
     conn = get_conn(self.conf)
     conn.put_container('vol1')
     conn.put_object('vol1', '00', 'asdf')
     conn.put_object('vol1', 'manifest', m.dumps())
     h.prune(volume, missing_backup_id)
     # Shouldn't blow up on missing backup_id.
     self.assert_(True)
Exemplo n.º 6
0
 def test_prune_missing_backup_id(self):
     h = backup.BackupHelper(self.conf)
     volume = {'id': 'vol1', 'size': 1}
     existing_backup_id = 'backup1'
     missing_backup_id = 'something_else'
     m = Manifest.blank(volume['size'])
     b = m.create_backup(existing_backup_id, timestamp=1.0)
     for i in range(volume['size']):
         b[i] = '00'
     conn = get_conn(self.conf)
     conn.put_container('vol1')
     conn.put_object('vol1', '00', 'asdf')
     conn.put_object('vol1', 'manifest', m.dumps())
     h.prune(volume, missing_backup_id)
     # Shouldn't blow up on missing backup_id.
     self.assert_(True)
Exemplo n.º 7
0
    def test_create_first_backup_create_container(self):
        h = backup.BackupHelper(self.conf)
        conn = get_conn(self.conf)
        _orig_put_container = conn.put_container

        def mock_put_container(*args, **kwargs):
            # force the race
            sleep(0.2)
            mock_put_container.called.append(*args, **kwargs)
            _orig_put_container(*args, **kwargs)

        conn.put_container = mock_put_container
        mock_put_container.called = []
        with patch(backup, 'get_conn', lambda *args: conn):
            snapshot = {
                'id': 'bak1',
                'timestamp': 1.0,
            }
            snapshot['path'] = os.path.join(self.scratch, 'bak1')
            snapshot['origin'] = 'vol1'
            snapshot['size'] = 16 * 1024**2
            with open(snapshot['path'], 'w') as f:
                f.write('\x00')
                f.seek(4 * 1024**2, 1)
                f.write('\x01')
                f.seek(4 * 1024**2, 1)
                f.write('\x02')

            backup_id = 'backup1'

            with mock_spawn() as j:
                h.create(snapshot, backup_id, lambda *args, **kwargs: None)
                j.run_job()
                # return doesn't matter, check it doesn't raise ClientException
                _headers, listing = conn.get_container(snapshot['origin'])
                # wrote 3 blocks + manifest.
                self.assertEquals(len(listing), 4)
                self.assertEquals(len(mock_put_container.called), 1)
        stats_path = h._stats_file('vol1')
        self.assertFalse(os.path.exists(stats_path))
Exemplo n.º 8
0
    def test_create_first_backup_create_container(self):
        h = backup.BackupHelper(self.conf)
        conn = get_conn(self.conf)
        _orig_put_container = conn.put_container

        def mock_put_container(*args, **kwargs):
            # force the race
            sleep(0.2)
            mock_put_container.called.append(*args, **kwargs)
            _orig_put_container(*args, **kwargs)
        conn.put_container = mock_put_container
        mock_put_container.called = []
        with patch(backup, 'get_conn', lambda *args: conn):
            snapshot = {
                'id': 'bak1',
                'timestamp': 1.0,
            }
            snapshot['path'] = os.path.join(self.scratch, 'bak1')
            snapshot['origin'] = 'vol1'
            snapshot['size'] = 16 * 1024 ** 2
            with open(snapshot['path'], 'w') as f:
                f.write('\x00')
                f.seek(4 * 1024 ** 2, 1)
                f.write('\x01')
                f.seek(4 * 1024 ** 2, 1)
                f.write('\x02')

            backup_id = 'backup1'

            with mock_spawn() as j:
                h.create(snapshot, backup_id, lambda *args, **kwargs: None)
                j.run_job()
                # return doesn't matter, check it doesn't raise ClientException
                _headers, listing = conn.get_container(snapshot['origin'])
                # wrote 3 blocks + manifest.
                self.assertEquals(len(listing), 4)
                self.assertEquals(len(mock_put_container.called), 1)
        stats_path = h._stats_file('vol1')
        self.assertFalse(os.path.exists(stats_path))
Exemplo n.º 9
0
    from lunr.common.config import LunrConfig
    from lunr.db.console import DBConsole as ManifestConsole
    from lunr.storage.helper.utils.client import get_conn
    parser = OptionParser('%prog [options] volume_id')
    parser.add_option('-C', '--config', default=LunrConfig.lunr_storage_config,
                      help="override config file")
    options, args = parser.parse_args()

    try:
        conf = LunrConfig.from_conf(options.config)
    except IOError, e:
        return 'ERROR: %s' % e

    try:
        volume_id = args.pop(0)
    except IndexError:
        return 'ERROR: Specify volume_id'

    conn = get_conn(conf)
    _headers, raw_json_string = conn.get_object(volume_id, 'manifest',
                                                newest=True)
    manifest = Manifest.loads(raw_json_string)

    banner = "manifest for volume %s available as 'm'" % volume_id
    c = ManifestConsole(banner=banner, locals={'m': manifest})
    return c()

if __name__ == "__main__":
    import sys
    sys.exit(main())
Exemplo n.º 10
0
    from lunr.common.config import LunrConfig
    from lunr.db.console import DBConsole as ManifestConsole
    from lunr.storage.helper.utils.client import get_conn
    parser = OptionParser('%prog [options] volume_id')
    parser.add_option('-C', '--config', default=LunrConfig.lunr_storage_config,
                      help="override config file")
    options, args = parser.parse_args()

    try:
        conf = LunrConfig.from_conf(options.config)
    except IOError, e:
        return 'ERROR: %s' % e

    try:
        volume_id = args.pop(0)
    except IndexError:
        return 'ERROR: Specify volume_id'

    conn = get_conn(conf)
    _headers, raw_json_string = conn.get_object(volume_id, 'manifest',
                                                newest=True)
    manifest = Manifest.loads(raw_json_string)

    banner = "manifest for volume %s available as 'm'" % volume_id
    c = ManifestConsole(banner=banner, locals={'m': manifest})
    return c()

if __name__ == "__main__":
    import sys
    sys.exit(main())