Files
2026-02-07 23:19:38 +01:00

250 lines
8.4 KiB
Python

import os
import sys
import struct
import time
import pytest
prefix = '.'
for i in range(0, 3):
if os.path.isdir(os.path.join(prefix, 'pycdlib')):
sys.path.insert(0, prefix)
break
else:
prefix = '../' + prefix
import pycdlib.dates
import pycdlib.pycdlibexception
def test_string_to_timestruct_invalid_input_type():
with pytest.raises(AttributeError) as exc_info:
ts = pycdlib.dates.string_to_timestruct('')
def test_string_to_timestruct_blank_bytes():
ts = pycdlib.dates.string_to_timestruct(b'')
assert(ts.tm_year == 0)
assert(ts.tm_mon == 0)
assert(ts.tm_mday == 0)
assert(ts.tm_hour == 0)
assert(ts.tm_min == 0)
assert(ts.tm_sec == 0)
assert(ts.tm_wday == 0)
assert(ts.tm_yday == 0)
assert(ts.tm_isdst == 0)
def test_string_to_timestruct():
ts = pycdlib.dates.string_to_timestruct(b'20180718212300')
assert(ts.tm_year == 2018)
assert(ts.tm_mon == 7)
assert(ts.tm_mday == 18)
assert(ts.tm_hour == 21)
assert(ts.tm_min == 23)
assert(ts.tm_sec == 0)
assert(ts.tm_wday == 2)
assert(ts.tm_yday == 199)
assert(ts.tm_isdst == -1)
def test_dirrecorddate_record_not_initialized():
drdate = pycdlib.dates.DirectoryRecordDate()
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
drdate.record()
assert(str(excinfo.value) == 'Directory Record Date not initialized')
def test_dirrecorddate_new_after_new():
drdate = pycdlib.dates.DirectoryRecordDate()
drdate.new(time.time())
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
drdate.new(time.time())
assert(str(excinfo.value) == 'Directory Record Date already initialized')
def test_dirrecorddate_parse_after_new():
drdate = pycdlib.dates.DirectoryRecordDate()
drdate.new(time.time())
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
drdate.parse(b'')
assert(str(excinfo.value) == 'Directory Record Date already initialized')
def test_dirrecorddate_parse_after_parse():
drdate = pycdlib.dates.DirectoryRecordDate()
drdate.parse(b'\x76\x07\x12\x15\x21\x00\x00')
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
drdate.parse(b'\x76\x07\x12\x15\x21\x00\x00')
assert(str(excinfo.value) == 'Directory Record Date already initialized')
def test_dirrecorddate_new_after_parse():
drdate = pycdlib.dates.DirectoryRecordDate()
drdate.parse(b'\x76\x07\x12\x15\x21\x00\x00')
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
drdate.new(time.time())
assert(str(excinfo.value) == 'Directory Record Date already initialized')
def test_dirrecorddate_record_after_new():
drdate = pycdlib.dates.DirectoryRecordDate()
drdate.new(time.time())
assert(len(drdate.record()) == 7)
def test_dirrecorddate_compare_equal():
drdate = pycdlib.dates.DirectoryRecordDate()
drdate.new(time.time())
drdate2 = drdate
assert(not(drdate2 != drdate))
def test_dirrecorddate_compare_not_equal():
drdate = pycdlib.dates.DirectoryRecordDate()
drdate.new(time.time())
time.sleep(1)
drdate2 = pycdlib.dates.DirectoryRecordDate()
drdate2.new(time.time())
assert(drdate2 != drdate)
def test_volumedescdate_record_not_initialized():
voldate = pycdlib.dates.VolumeDescriptorDate()
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
voldate.record()
assert(str(excinfo.value) == 'This Volume Descriptor Date is not initialized')
def test_volumedescdate_parse_invalid_string():
voldate = pycdlib.dates.VolumeDescriptorDate()
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInvalidISO) as excinfo:
voldate.parse(b'')
assert(str(excinfo.value) == 'Invalid ISO9660 date string')
def test_volumedescdate_new_after_new():
voldate = pycdlib.dates.VolumeDescriptorDate()
voldate.new(0.0)
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
voldate.new(0.0)
assert(str(excinfo.value) == 'This Volume Descriptor Date object is already initialized')
def test_volumedescdate_parse_after_new():
voldate = pycdlib.dates.VolumeDescriptorDate()
voldate.new(0.0)
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
voldate.parse(b'')
assert(str(excinfo.value) == 'This Volume Descriptor Date object is already initialized')
def test_volumedescdate_parse_after_parse():
voldate = pycdlib.dates.VolumeDescriptorDate()
voldate.parse(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
voldate.parse(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
assert(str(excinfo.value) == 'This Volume Descriptor Date object is already initialized')
def test_volumedescdate_new_after_parse():
voldate = pycdlib.dates.VolumeDescriptorDate()
voldate.parse(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
voldate.new(0.0)
assert(str(excinfo.value) == 'This Volume Descriptor Date object is already initialized')
def test_volumedescdate_parse_zero():
voldate = pycdlib.dates.VolumeDescriptorDate()
voldate.parse(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
assert(voldate.year == 0)
assert(voldate.month == 0)
assert(voldate.dayofmonth == 0)
assert(voldate.hour == 0)
assert(voldate.minute == 0)
assert(voldate.second == 0)
assert(voldate.hundredthsofsecond == 0)
assert(voldate.gmtoffset == 0)
assert(voldate.date_str == b'0000000000000000' + b'\x00')
def test_volumedescdate_parse_nonzero():
voldate = pycdlib.dates.VolumeDescriptorDate()
voldate.parse(b'2019010721250000\x00')
assert(voldate.year == 2019)
assert(voldate.month == 1)
assert(voldate.dayofmonth == 7)
assert(voldate.hour == 21)
assert(voldate.minute == 25)
assert(voldate.second == 0)
assert(voldate.hundredthsofsecond == 0)
assert(voldate.gmtoffset == 0)
def test_volumedescdate_parse_hundredths():
voldate = pycdlib.dates.VolumeDescriptorDate()
voldate.parse(b'2019010721250005\x00')
assert(voldate.year == 2019)
assert(voldate.month == 1)
assert(voldate.dayofmonth == 7)
assert(voldate.hour == 21)
assert(voldate.minute == 25)
assert(voldate.second == 0)
assert(voldate.hundredthsofsecond == 5)
assert(voldate.gmtoffset == 0)
def test_volumedescdate_parse_null_hundredths():
voldate = pycdlib.dates.VolumeDescriptorDate()
voldate.parse(b'20190107212500\x00\x00\x00')
assert(voldate.year == 2019)
assert(voldate.month == 1)
assert(voldate.dayofmonth == 7)
assert(voldate.hour == 21)
assert(voldate.minute == 25)
assert(voldate.second == 0)
assert(voldate.hundredthsofsecond == 0)
assert(voldate.gmtoffset == 0)
def test_volumedescdate_record_after_parse():
voldate = pycdlib.dates.VolumeDescriptorDate()
voldate.parse(b'2019010721250000\x00')
rec = voldate.record()
assert(rec == b'2019010721250000\x00')
def save_and_set_tz(newtz):
if 'TZ' in os.environ:
oldtz = os.environ['TZ']
else:
oldtz = None
os.environ['TZ'] = newtz
time.tzset()
return oldtz
def restore_tz(oldtz):
if oldtz is not None:
os.environ['TZ'] = oldtz
else:
del os.environ['TZ']
time.tzset()
def test_volumedescdate_new_nonzero():
oldtz = save_and_set_tz('US/Eastern')
test_seconds_since_epoch = 1546914300.0
voldate = pycdlib.dates.VolumeDescriptorDate()
voldate.new(test_seconds_since_epoch)
assert(voldate.year == 2019)
assert(voldate.month == 1)
assert(voldate.dayofmonth == 7)
assert(voldate.hour == 21)
assert(voldate.minute == 25)
assert(voldate.second == 0)
assert(voldate.hundredthsofsecond == 0)
restore_tz(oldtz)
def test_volumedescdate_test_equal():
voldate = pycdlib.dates.VolumeDescriptorDate()
voldate.new(1546914300.0)
voldate2 = pycdlib.dates.VolumeDescriptorDate()
voldate2.new(1546914300.0)
assert(not(voldate != voldate2))
def test_volumedescdate_test_not_equal():
voldate = pycdlib.dates.VolumeDescriptorDate()
voldate.new(1546914300.0)
voldate2 = pycdlib.dates.VolumeDescriptorDate()
voldate2.new(1546914200.0)
assert(voldate != voldate2)