Split the code of the mountindex command to be able to add tests. Fix the way the children of IndexInstanceNode are accessed. Fixes GitLab issue #518. Thanks to TheOneValen @TheOneValen for the report. Remove newlines from the index name levels before using them as FUSE directories. Fixed duplicated FUSE directory removal.
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import hashlib
|
||||
|
||||
from fuse import FuseOSError
|
||||
|
||||
from django.test import override_settings
|
||||
|
||||
from common.tests import BaseTestCase
|
||||
from documents.tests import DocumentTestMixin
|
||||
|
||||
from document_indexing.tests import DocumentIndexingTestMixin
|
||||
|
||||
from ..classes import IndexFilesystem
|
||||
|
||||
from .literals import (
|
||||
TEST_NODE_EXPRESSION, TEST_NODE_EXPRESSION_MULTILINE
|
||||
)
|
||||
|
||||
|
||||
@override_settings(OCR_AUTO_OCR=False)
|
||||
class IndexFSTestCase(DocumentIndexingTestMixin, DocumentTestMixin, BaseTestCase):
|
||||
auto_upload_document = False
|
||||
|
||||
def test_document_access(self):
|
||||
self._create_index()
|
||||
|
||||
self.index.node_templates.create(
|
||||
parent=self.index.template_root, expression=TEST_NODE_EXPRESSION,
|
||||
link_documents=True
|
||||
)
|
||||
|
||||
document = self.upload_document()
|
||||
index_filesystem = IndexFilesystem(index_slug=self.index.slug)
|
||||
|
||||
self.assertEqual(
|
||||
index_filesystem.access(
|
||||
'/{}/{}'.format(TEST_NODE_EXPRESSION, document.label)
|
||||
), None
|
||||
)
|
||||
|
||||
def test_document_access_failure(self):
|
||||
self._create_index()
|
||||
|
||||
self.index.node_templates.create(
|
||||
parent=self.index.template_root, expression=TEST_NODE_EXPRESSION,
|
||||
link_documents=True
|
||||
)
|
||||
|
||||
document = self.upload_document()
|
||||
index_filesystem = IndexFilesystem(index_slug=self.index.slug)
|
||||
|
||||
with self.assertRaises(FuseOSError):
|
||||
index_filesystem.access(
|
||||
'/{}/{}_non_valid'.format(TEST_NODE_EXPRESSION, document.label)
|
||||
)
|
||||
|
||||
def test_document_open(self):
|
||||
self._create_index()
|
||||
|
||||
self.index.node_templates.create(
|
||||
parent=self.index.template_root, expression=TEST_NODE_EXPRESSION,
|
||||
link_documents=True
|
||||
)
|
||||
|
||||
document = self.upload_document()
|
||||
index_filesystem = IndexFilesystem(index_slug=self.index.slug)
|
||||
|
||||
file_handle = index_filesystem.open(
|
||||
'/{}/{}'.format(TEST_NODE_EXPRESSION, document.label), 'rb'
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
hashlib.sha256(
|
||||
index_filesystem.read(
|
||||
path=None, size=document.size, offset=0, fh=file_handle
|
||||
)
|
||||
).hexdigest(),
|
||||
document.checksum
|
||||
)
|
||||
|
||||
def test_multiline_indexes(self):
|
||||
self._create_index()
|
||||
|
||||
self.index.node_templates.create(
|
||||
parent=self.index.template_root,
|
||||
expression=TEST_NODE_EXPRESSION_MULTILINE,
|
||||
link_documents=True
|
||||
)
|
||||
|
||||
self.upload_document()
|
||||
index_filesystem = IndexFilesystem(index_slug=self.index.slug)
|
||||
|
||||
self.assertEqual(
|
||||
list(index_filesystem.readdir('/', ''))[2:],
|
||||
[TEST_NODE_EXPRESSION_MULTILINE.replace('\r\n', ' ')]
|
||||
)
|
||||
|
||||
def test_duplicated_indexes(self):
|
||||
self._create_index()
|
||||
|
||||
self.index.node_templates.create(
|
||||
parent=self.index.template_root, expression=TEST_NODE_EXPRESSION,
|
||||
link_documents=True
|
||||
)
|
||||
self.index.node_templates.create(
|
||||
parent=self.index.template_root, expression=TEST_NODE_EXPRESSION,
|
||||
link_documents=True
|
||||
)
|
||||
|
||||
self.upload_document()
|
||||
index_filesystem = IndexFilesystem(index_slug=self.index.slug)
|
||||
|
||||
self.assertEqual(
|
||||
list(index_filesystem.readdir('/', ''))[2:], []
|
||||
)
|
||||
Reference in New Issue
Block a user