configurationengine/source/plugins/symbian/ConeHCRPlugin/hcrplugin/tests/unittest_reader.py
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
--- /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