97 lines
2.9 KiB
Python
Executable File
97 lines
2.9 KiB
Python
Executable File
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
# this repository contains the full copyright notices and license terms.
|
|
import os
|
|
import shutil
|
|
import tempfile
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from trytond.config import config
|
|
from trytond.filestore import filestore
|
|
|
|
|
|
class FileStoreTestCase(unittest.TestCase):
|
|
"Test FileStore"
|
|
|
|
def setUp(self):
|
|
path = config.get('database', 'path')
|
|
dtemp = tempfile.mkdtemp()
|
|
config.set('database', 'path', dtemp)
|
|
self.addCleanup(config.set, 'database', 'path', path)
|
|
self.addCleanup(shutil.rmtree, dtemp)
|
|
|
|
def data(self):
|
|
return os.urandom(10)
|
|
|
|
def test_set(self):
|
|
"Test set"
|
|
result = filestore.set(self.data(), prefix='test')
|
|
self.assertTrue(result)
|
|
self.assertIsInstance(result, str)
|
|
|
|
def test_setmany(self):
|
|
"Test setmany"
|
|
result = filestore.setmany([self.data(), self.data()], prefix='test')
|
|
self.assertIsInstance(result, list)
|
|
self.assertEqual(len(result), 2)
|
|
self.assertIsInstance(result[0], str)
|
|
|
|
def test_get(self):
|
|
"Test get"
|
|
data = self.data()
|
|
id = filestore.set(data, prefix='test')
|
|
self.assertEqual(filestore.get(id, prefix='test'), data)
|
|
|
|
def test_getmany(self):
|
|
"Test getmany"
|
|
data = [self.data(), self.data()]
|
|
ids = filestore.setmany(data, prefix='test')
|
|
self.assertListEqual(filestore.getmany(ids, prefix='test'), data)
|
|
|
|
def test_size(self):
|
|
"Test size"
|
|
data = self.data()
|
|
id = filestore.set(data, prefix='test')
|
|
self.assertEqual(filestore.size(id, prefix='test'), len(data))
|
|
|
|
def test_sizemany(self):
|
|
"Test sizemany"
|
|
data = [self.data(), self.data()]
|
|
lens = [len(d) for d in data]
|
|
ids = filestore.setmany(data, prefix='test')
|
|
self.assertListEqual(filestore.sizemany(ids, prefix='test'), lens)
|
|
|
|
def test_prefix(self):
|
|
"Test prefix"
|
|
data = self.data()
|
|
id = filestore.set(data, prefix='foo')
|
|
with self.assertRaises(IOError):
|
|
filestore.get(id, prefix='bar')
|
|
|
|
def test_bad_prefix(self):
|
|
"Test bad prefix"
|
|
with self.assertRaises(ValueError):
|
|
filestore.set(self.data(), prefix='../')
|
|
|
|
def test_duplicate(self):
|
|
"Test duplicate"
|
|
data = self.data()
|
|
id = filestore.set(data, prefix='test')
|
|
self.assertEqual(filestore.set(data, prefix='test'), id)
|
|
|
|
def test_collision(self):
|
|
"Test collision"
|
|
data1 = self.data()
|
|
data2 = self.data()
|
|
|
|
id1 = filestore.set(data1, prefix='test')
|
|
|
|
with patch.object(filestore, '_id') as _id:
|
|
_id.return_value = id1
|
|
|
|
id2 = filestore.set(data2, prefix='test')
|
|
|
|
self.assertNotEqual(id1, id2)
|
|
self.assertEqual(filestore.get(id1, prefix='test'), data1)
|
|
self.assertEqual(filestore.get(id2, prefix='test'), data2)
|