Adjust the barcode to ASN range check and add test case to cover the check

This commit is contained in:
Trenton H 2023-01-24 10:30:32 -08:00
parent 99c2442b28
commit 8b90b51b1a
3 changed files with 24 additions and 3 deletions

View File

@ -140,13 +140,13 @@ class Consumer(LoggingMixin):
if not self.override_asn: if not self.override_asn:
# check not necessary in case no ASN gets set # check not necessary in case no ASN gets set
return return
# Validate the range is above zero and less than int32 max # Validate the range is above zero and less than uint32_t max
# otherwise, Whoosh can't handle it in the index # otherwise, Whoosh can't handle it in the index
if self.override_asn < 0 or self.override_asn > 2_147_483_647: if self.override_asn < 0 or self.override_asn > 0xFF_FF_FF_FF:
self._fail( self._fail(
MESSAGE_ASN_RANGE, MESSAGE_ASN_RANGE,
f"Not consuming {self.filename}: " f"Not consuming {self.filename}: "
"Given ASN is out of range [0, 2147483647]", f"Given ASN {self.override_asn} is out of range [0, 4,294,967,295]",
) )
if Document.objects.filter(archive_serial_number=self.override_asn).exists(): if Document.objects.filter(archive_serial_number=self.override_asn).exists():
self._fail( self._fail(

View File

@ -9,6 +9,7 @@ from django.test import override_settings
from django.test import TestCase from django.test import TestCase
from documents import barcodes from documents import barcodes
from documents import tasks from documents import tasks
from documents.consumer import ConsumerError
from documents.tests.utils import DirectoriesMixin from documents.tests.utils import DirectoriesMixin
from PIL import Image from PIL import Image
@ -779,3 +780,23 @@ class TestBarcode(DirectoriesMixin, TestCase):
args, kwargs = mocked_call.call_args args, kwargs = mocked_call.call_args
self.assertEqual(kwargs["override_asn"], 123) self.assertEqual(kwargs["override_asn"], 123)
@override_settings(CONSUMER_ENABLE_ASN_BARCODE=True)
def test_asn_too_large(self):
src = os.path.join(
os.path.dirname(__file__),
"samples",
"barcodes",
"barcode-128-asn-too-large.pdf",
)
dst = os.path.join(self.dirs.scratch_dir, "barcode-128-asn-too-large.pdf")
shutil.copy(src, dst)
with mock.patch("documents.consumer.Consumer._send_progress"):
self.assertRaisesMessage(
ConsumerError,
"Given ASN 4294967296 is out of range [0, 4,294,967,295]",
tasks.consume_file,
dst,
)