Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_rrrrrecord_record_not_initialized():
rr = pycdlib.rockridge.RRRRRecord()
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
rr.record()
assert(str(excinfo.value) == 'RR record not initialized')
def test_rrrrrecord_append_field_invalid_field():
rr = pycdlib.rockridge.RRRRRecord()
rr.new()
with pytest.raises(pycdlib.pycdlibexception.PyCdlibInternalError) as excinfo:
rr.append_field('AA')
assert(str(excinfo.value) == 'Unknown RR field name AA')
def test_rrrrrecord_append_field_nm():
rr = pycdlib.rockridge.RRRRRecord()
rr.new()
rr.append_field('NM')
assert(rr.rr_flags == 0x8)
def test_rrrrrecord_record():
rr = pycdlib.rockridge.RRRRRecord()
rr.new()
rec = rr.record()
assert(rec == b'RR\x05\x01\x00')
def test_rrrrrecord_append_field_sl():
rr = pycdlib.rockridge.RRRRRecord()
rr.new()
rr.append_field('SL')
assert(rr.rr_flags == 0x4)
Parameters:
rrstr - The string to parse the record out of.
Returns:
Nothing.
'''
if self._initialized:
raise pycdlibexception.PyCdlibInternalError('RR record already initialized')
(su_len, su_entry_version_unused,
self.rr_flags) = struct.unpack_from(self.FMT, rrstr[:5], 2)
# We assume that the caller has already checked the su_entry_version,
# so we don't bother.
if su_len != RRRRRecord.length():
raise pycdlibexception.PyCdlibInvalidISO('Invalid length on rock ridge extension')
self._initialized = True
# In reality, this can never happen. If the RR record pushes
# us over the DR limit, then there is no room for a CE record
# either, and we are going to fail. We leave this in place
# both for consistency with other records and to keep mypy
# happy.
return -1
self.dr_entries.ce_record.add_record(thislen)
self.ce_entries.sp_record = new_sp
else:
curr_dr_len += thislen
self.dr_entries.sp_record = new_sp
# For RR Record
rr_record = None
if self.rr_version == '1.09':
rr_record = RRRRRecord()
rr_record.new()
thislen = RRRRRecord.length()
if curr_dr_len + thislen > ALLOWED_DR_SIZE:
if self.dr_entries.ce_record is None:
# In reality, this can never happen. If the RR record pushes
# us over the DR limit, then there is no room for a CE record
# either, and we are going to fail. We leave this in place
# both for consistency with other records and to keep mypy
# happy.
return -1
self.dr_entries.ce_record.add_record(thislen)
self.ce_entries.rr_record = rr_record
else:
curr_dr_len += thislen
self.dr_entries.rr_record = rr_record
recname = rtype.decode('utf-8').lower() + '_record'
if self.has_entry(recname):
raise pycdlibexception.PyCdlibInvalidISO('Only single %s record supported' % (rtype.decode('utf-8')))
if rtype == b'SP':
if left < 7 or not is_first_dir_record_of_root:
raise pycdlibexception.PyCdlibInvalidISO('Invalid SUSP SP record')
# OK, this is the first Directory Record of the root
# directory, which means we should check it for the SUSP/RR
# extension, which is exactly 7 bytes and starts with 'SP'.
entry_list.sp_record = RRSPRecord()
entry_list.sp_record.parse(recslice)
elif rtype == b'RR':
entry_list.rr_record = RRRRRecord()
entry_list.rr_record.parse(recslice)
elif rtype == b'CE':
entry_list.ce_record = RRCERecord()
entry_list.ce_record.parse(recslice)
elif rtype == b'PX':
entry_list.px_record = RRPXRecord()
px_record_length = entry_list.px_record.parse(recslice)
elif rtype == b'PD':
pd = RRPDRecord()
pd.parse(recslice)
entry_list.pd_records.append(pd)
elif rtype == b'ST':
entry_list.st_record = RRSTRecord()
entry_list.st_record.parse(recslice)
elif rtype == b'ER':
entry_list.er_record = RRERRecord()