diff -r 000000000000 -r 2e8eeb919028 configurationengine/source/plugins/symbian/ConeHCRPlugin/hcrplugin/tests/unittest_reader.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/configurationengine/source/plugins/symbian/ConeHCRPlugin/hcrplugin/tests/unittest_reader.py Thu Mar 11 17:04:37 2010 +0200 @@ -0,0 +1,194 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +import os, unittest +import __init__ + +from testautomation.utils import hex_to_bindata + +from hcrplugin.hcr_reader import HcrReader +from hcrplugin import hcr_exceptions +from hcrplugin.hcrrepository import HcrRecord + + +class TestHcrReader(unittest.TestCase): + def setUp(self): + self.reader = HcrReader() + + def test_read_repo_with_invalid_record_section_size(self): + # Record section size: 4 * 20 = 80 + # LSD offset: 32 + 80 = 112 + # LSD size: 0 + data = [ + # Header + # Record count should be 4, but is 6 here + "48435266 0200 0300 06000000 70000000", + "00000000 000000000000000000000000", + # Record section + "01000000 01000000 08000000 0000 0000 01000000", # bool + "02000000 01000000 04000000 0000 0000 85FFFFFF", # int8 + "03000000 01000000 40000000 0000 0000 CC000000", # uint8 + "01000000 02000000 02000000 0000 0000 91CBFFFF", # int16 + ] + data = ''.join(map(lambda x: hex_to_bindata(x), data)) + + try: + self.reader.parse_repository_from_bindata(data) + self.fail("Expected exception not raised") + except hcr_exceptions.InvalidHcrDataSizeError: + pass + + def test_read_repo_with_invalid_lsd_section_size(self): + # Record section size: 4 * 20 = 80 + # LSD offset: 32 + 80 = 112 + # LSD size: 0 + data = [ + # Header + # LSD section size should be 0, but is 40 here + "48435266 0200 0300 04000000 70000000", + "28000000 000000000000000000000000", + # Record section + "01000000 01000000 08000000 0000 0000 01000000", # bool + "02000000 01000000 04000000 0000 0000 85FFFFFF", # int8 + "03000000 01000000 40000000 0000 0000 CC000000", # uint8 + "01000000 02000000 02000000 0000 0000 91CBFFFF", # int16 + ] + data = ''.join(map(lambda x: hex_to_bindata(x), data)) + + try: + self.reader.parse_repository_from_bindata(data) + self.fail("Expected exception not raised") + except hcr_exceptions.InvalidHcrDataSizeError: + pass + + def test_read_repo_with_invalid_lsd_section_offset(self): + # Record section size: 2 * 20 = 40 + # LSD offset: 32 + 40 = 72 + # LSD size: 8 + 8 = 16 + data = [ + # Header, LSD offset here is 60 + "48435266 0200 0300 02000000 3C000000", + "10000000 000000000000000000000000", + # Record section + "01000000 01000000 00000001 0000 0800 00000000", # int64, lsd pos = (0, 8) + "02000000 01000000 00000002 0000 0800 08000000", # uint64, lsd pos = (8, 8) + # LSD section + "FC73 978B B823 D47F", # 8 bytes + "14FD 32B4 F410 2295", # 8 bytes + ] + data = ''.join(map(lambda x: hex_to_bindata(x), data)) + + try: + self.reader.parse_repository_from_bindata(data) + self.fail("Expected exception not raised") + except hcr_exceptions.InvalidLsdSectionOffsetError: + pass + + def test_read_repo_with_invalid_lsd_pos_in_record(self): + # Record section size: 2 * 20 = 40 + # LSD offset: 32 + 40 = 72 + # LSD size: 8 + 8 = 16 + data = [ + # Header + "48435266 0200 0300 02000000 48000000", + "10000000 000000000000000000000000", + # Record section + "01000000 01000000 00000001 0000 0800 00000000", # int64, lsd pos = (0, 8) + "02000000 01000000 00000002 0000 0800 0C000000", # uint64, lsd pos = (12, 8), should be (8, 8) + # LSD section + "FC73 978B B823 D47F", # 8 bytes + "14FD 32B4 F410 2295", # 8 bytes + ] + data = ''.join(map(lambda x: hex_to_bindata(x), data)) + + try: + self.reader.parse_repository_from_bindata(data) + self.fail("Expected exception not raised") + except hcr_exceptions.InvalidRecordLsdPositionError: + pass + + def test_read_repo_with_invalid_record_value_type(self): + # Record section size: 2 * 20 = 40 + # LSD offset: 32 + 40 = 72 + # LSD size: 8 + 8 = 16 + data = [ + # Header + "48435266 0200 0300 02000000 48000000", + "10000000 000000000000000000000000", + # Record section + "01000000 01000000 00000001 0000 0800 00000000", # int64, lsd pos = (0, 8) + "02000000 01000000 DEADBEEF 0000 0800 0C000000", # invalid type + # LSD section + "FC73 978B B823 D47F", # 8 bytes + "14FD 32B4 F410 2295", # 8 bytes + ] + data = ''.join(map(lambda x: hex_to_bindata(x), data)) + + try: + self.reader.parse_repository_from_bindata(data) + self.fail("Expected exception not raised") + except hcr_exceptions.InvalidRecordValueTypeError: + pass + + def _run_test_read_record_with_invalid_lsd_size(self, value_type, lsd_data): + try: + self.reader.parse_record_value_from_lsd_bindata(value_type, lsd_data) + self.fail("Expected exception not raised") + except hcr_exceptions.InvalidRecordLsdPositionError: + pass + + def test_read_record_with_invalid_lsd_size_int64(self): + data = hex_to_bindata("0000 0000 0000 00") + self._run_test_read_record_with_invalid_lsd_size(HcrRecord.VALTYPE_INT64, data) + + def test_read_record_with_invalid_lsd_size_uint64(self): + data = hex_to_bindata("0000 0000 0000 00") + self._run_test_read_record_with_invalid_lsd_size(HcrRecord.VALTYPE_UINT64, data) + + def test_read_record_with_invalid_lsd_size_arrayint32(self): + data = hex_to_bindata("0000 0000 0000 00") + self._run_test_read_record_with_invalid_lsd_size(HcrRecord.VALTYPE_ARRAY_INT32, data) + + def test_read_record_with_invalid_lsd_size_arrayuint32(self): + data = hex_to_bindata("0000 0000 0000 00") + self._run_test_read_record_with_invalid_lsd_size(HcrRecord.VALTYPE_ARRAY_UINT32, data) + + + def test_read_record_with_invalid_data_size(self): + try: + self.reader.parse_record_from_bindata('1234') + self.fail("Parsing invalid record data succeeded!") + except hcr_exceptions.HcrReaderError: + pass + + def test_read_signed_integer_in_record(self): + #Test that padding bytes don't matter when reading the type + def check(record, data): + self.assertEquals(self.reader.parse_record_from_bindata(data)[0], record) + + r = HcrRecord(HcrRecord.VALTYPE_INT8, -123, 12, 43, 5) + d = hex_to_bindata("0C000000 2B000000 04000000 0500 0000 85FFFFFF") + check(r, d) + d = hex_to_bindata("0C000000 2B000000 04000000 0500 0000 85000000") + check(r, d) + + r = HcrRecord(HcrRecord.VALTYPE_INT16, -12345, 12, 43, 5) + d = hex_to_bindata("0C000000 2B000000 02000000 0500 0000 C7CFFFFF") + check(r, d) + d = hex_to_bindata("0C000000 2B000000 02000000 0500 0000 C7CF0000") + check(r, d) + + \ No newline at end of file