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')
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)
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'])
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)