Пример #1
0
    def test_rotate(self, mock_subprocess):
        mock_subprocess.return_value = 0
        expected = dict(rotate=dict(status='ok',
                                    actions=[
                                        dict(host=self.testhost,
                                             location='short.0',
                                             prev=Constants.SYNC_PATH,
                                             savesets=1)
                                    ]))

        saveset = Saveset(location='short.0',
                          saveset='testrotate',
                          host_id=self.testhost_id,
                          backup_host_id=self.testhost_id)

        self.maxDiff = None
        self.session.add(saveset)
        self.session.commit()

        shutil.copytree(
            self.testdata_path,
            os.path.join(self.snapshot_root, 'short.0', self.testhost))
        obj = Actions(self.cli, db_engine=self.engine, db_session=self.session)
        obj.inject(self.testhost, self.volume,
                   os.path.join(self.snapshot_root, 'short.0'), saveset.id)
        ret = obj.rotate('short')
        self.assertEqual(ret, expected)
        mock_subprocess.assert_called_once_with(
            ['rsnapshot', '-c', self.rsnapshot_conf, 'short'])

        record = self.session.query(Saveset).filter(
            Saveset.saveset == 'testrotate').one()
        self.assertEqual(record.location, 'short.1')
Пример #2
0
    def test_calc_sums(self):
        expected = dict(calc_sums=dict(
            status='ok', saveset=self.saveset, size=780, processed=780))

        shutil.copytree(self.testdata_path,
                        os.path.join(self.volume_path, self.testhost))
        obj = Actions(self.cli, db_engine=self.engine, db_session=self.session)
        obj.inject(self.testhost, self.volume, self.volume_path,
                   self.saveset_id)
        ret = obj.calc_sums(self.saveset_id)
        self.assertEqual(ret, expected)

        count = 0
        with open(
                os.path.join(self.volume_path, self.testhost,
                             Constants.OPTS_DEFAULTS['manifest']),
                'r') as mfile:
            headers = mfile.readline()
            self.assertEqual(headers, 'file_id,type,file_size,has_checksum\n')
            for line in mfile:
                file_id, file_type, file_size, has_sum = line.split(',')
                file = self.session.query(File).filter_by(id=file_id).one()
                if file_type != 'f':
                    continue
                print('filename=%s, file_id=%s' % (file.filename, file_id))
                self.assertEqual(file.shasum,
                                 binascii.unhexlify(file.filename[9:41]))
                count += 1
        self.assertEqual(count, 15)
Пример #3
0
    def test_inject(self):
        expected = dict(inject=dict(
            status='ok', saveset=self.saveset, file_count=15, skipped=0))

        shutil.copytree(self.testdata_path,
                        os.path.join(self.volume_path, self.testhost))
        obj = Actions(self.cli, db_engine=self.engine, db_session=self.session)
        ret = obj.inject(self.testhost, self.volume, self.volume_path,
                         self.saveset_id)
        self.assertEqual(ret, expected)

        count = 0
        with open(
                os.path.join(self.volume_path, self.testhost,
                             Constants.OPTS_DEFAULTS['manifest']),
                'r') as mfile:
            headers = mfile.readline()
            self.assertEqual(headers, 'file_id,type,file_size,has_checksum\n')
            for line in mfile:
                file_id, file_type, file_size, has_sum = line.split(',')
                file = self.session.query(File).filter_by(id=file_id).one()
                self.assertEqual('/'.join(file.path.split('/')[:1]),
                                 os.path.join(self.testhost))
                self.assertEqual(file.size, 52)
                self.assertEqual(file.shasum, None)
                count += 1
        self.assertEqual(count, expected['inject']['file_count'])
Пример #4
0
    def test_verify(self):
        expected = dict(verify=dict(status='ok',
                                    results=[
                                        dict(saveset=self.saveset,
                                             count=15,
                                             errors=0,
                                             missing=0,
                                             skipped=0)
                                    ]))

        shutil.copytree(self.testdata_path,
                        os.path.join(self.volume_path, self.testhost))
        obj = Actions(self.cli, db_engine=self.engine, db_session=self.session)
        obj.inject(self.testhost, self.volume, self.volume_path,
                   self.saveset_id)
        ret = obj.calc_sums(self.saveset_id)
        ret = obj.verify([self.saveset])
        self.assertEqual(ret, expected)