configurationengine/source/plugins/symbian/ConeCRMLPlugin/CRMLPlugin/tests/unittest_crml_comparator.py
author terytkon
Thu, 11 Mar 2010 17:04:37 +0200
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
permissions -rw-r--r--
Adding EPL version of configurationengine.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     1
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     2
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     3
# All rights reserved.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     4
# This component and the accompanying materials are made available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     5
# under the terms of "Eclipse Public License v1.0"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     6
# which accompanies this distribution, and is available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     7
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     8
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     9
# Initial Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    10
# Nokia Corporation - initial contribution.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    11
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    12
# Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    13
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    14
# Description:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    15
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    16
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    17
import unittest
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    18
import __init__
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    19
from cone.public import plugin
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    20
from CRMLPlugin.crml_model import *
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
from CRMLPlugin.crml_comparator import CrmlComparator
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    22
from cone.public.plugin import FlatComparisonResultEntry as Entry
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    23
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
class TestComparator(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
    def setUp(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
        keys = [
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
            CrmlSimpleKey(ref='Foo.Bar', int='0x1'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    28
            CrmlBitmaskKey(int='0x2', bits=[CrmlBit(ref='Foo.Bit1', index=1),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    29
                                            CrmlBit(ref='Foo.Bit2', index=2),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
                                            CrmlBit(ref='Foo.Bit4', index=4, invert=True)]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    31
            CrmlKeyRange(first_int='0x10000000', last_int='0x1FFFFFFF', ref="Foo.Seq",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
                         subkeys=[CrmlKeyRangeSubKey(ref='Sub1', name='Sub-key 1', type='int', int='0x1'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    33
                                  CrmlKeyRangeSubKey(ref='Sub2', name='Sub-key 2', type='real', int='0x2')]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
        ]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    36
        self.repo = CrmlRepository(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
            uid_value   = '0x10203040',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
            uid_name    = 'KCrUidTest',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
            owner       = '0x11223344',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
            backup      = True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
            rfs         = True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
            access      = CrmlAccess(),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    43
            keys        = keys)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    44
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    45
        self.comparator = CrmlComparator('test.crml', self.repo)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    46
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    47
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
    def assert_comparison_result_after_change_equals(self,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
        modification_code, added=[], removed=[], modified=[],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    50
        check_keys_in_entry_data=True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
        target_resource_ref='test.crml'):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
        # Make a copy of the test repo and modify it using the given code
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
        repo = self.repo.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    54
        exec(modification_code)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
        expected_result = plugin.FlatComparisonResult(only_in_source = removed,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    57
                                                      only_in_target = added,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    58
                                                      modified       = modified)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    59
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    60
        comparator = CrmlComparator('test.crml', self.repo)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    61
        actual_result = comparator.flat_compare(target_resource_ref, repo)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    62
        self.assertEquals(expected_result, actual_result)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    63
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    64
        # Assert that all comparison result entries have references to the
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    65
        # repository objects 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    66
        for entry in actual_result.only_in_source:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    67
            self.assertTrue(isinstance(entry.data['repo'], CrmlRepository))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    68
        for entry in actual_result.only_in_target:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    69
            self.assertTrue(isinstance(entry.data['repo'], CrmlRepository))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    70
        for entry in actual_result.modified:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    71
            self.assertTrue(isinstance(entry.data['source_repo'], CrmlRepository))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    72
            self.assertTrue(isinstance(entry.data['target_repo'], CrmlRepository))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    73
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    74
        # Check also references to CRML key objects if specified
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    75
        if check_keys_in_entry_data:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    76
            for entry in actual_result.only_in_source:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
                self.assertTrue(isinstance(entry.data['key'], CrmlKeyBase))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
            for entry in actual_result.only_in_target:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    79
                self.assertTrue(isinstance(entry.data['key'], CrmlKeyBase))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
            for entry in actual_result.modified:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
                self.assertTrue(isinstance(entry.data['source_key'], CrmlKeyBase))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
                self.assertTrue(isinstance(entry.data['target_key'], CrmlKeyBase))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
    def test_simple_key_changed(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
        def check(attrname, value_id, old_value, new_value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
            self.assert_comparison_result_after_change_equals(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
                'repo.keys[0].%s = %r' % (attrname, new_value),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    88
                modified=[Entry(sub_id       = '0x00000001',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    89
                                value_id     = value_id,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    90
                                source_value = old_value,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
                                target_value = new_value)])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    92
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    93
        check('ref',            'ref',          'Foo.Bar',  'Foo.Baz')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    94
        check('name',           'name',         None,       'Foobar')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    95
        check('backup',         'backup',       False,      True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    96
        check('read_only',      'read_only',    False,      True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    97
        check('access.cap_rd',  'cap_rd',       None,       'FooCapability')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    98
        check('access.cap_wr',  'cap_wr',       None,       'FooCapability')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    99
        check('access.sid_rd',  'sid_rd',       None,       '0x12345678')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   100
        check('access.sid_wr',  'sid_wr',       None,       '0x12345678')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   101
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   102
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
        self.assert_comparison_result_after_change_equals(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
            'repo.keys[0].int = "0x5"',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
            added   = [Entry(sub_id='0x00000005')],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
            removed = [Entry(sub_id='0x00000001')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
    def test_bitmask_key_changed(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
        def check(attrname, value_id, old_value, new_value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
            self.assert_comparison_result_after_change_equals(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
                'repo.keys[1].%s = %r' % (attrname, new_value),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
                modified=[Entry(sub_id       = '0x00000002',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
                                value_id     = value_id,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
                                source_value = old_value,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
                                target_value = new_value)])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
        check('name',           'name',         None,       'Foobar')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
        check('backup',         'backup',       False,      True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
        check('read_only',      'read_only',    False,      True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
        check('access.cap_rd',  'cap_rd',       None,       'FooCapability')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
        check('access.cap_wr',  'cap_wr',       None,       'FooCapability')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
        check('access.sid_rd',  'sid_rd',       None,       '0x12345678')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
        check('access.sid_wr',  'sid_wr',       None,       '0x12345678')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
        self.assert_comparison_result_after_change_equals(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
            'repo.keys[1].int = "0x5"',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
            added   = [Entry(sub_id='0x00000005')],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
            removed = [Entry(sub_id='0x00000002')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
    def test_bitmask_key_bit_changed(self):    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
        def check(attrname, value_id, old_value, new_value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
            self.assert_comparison_result_after_change_equals(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   133
                'repo.keys[1].bits[0].%s = %r' % (attrname, new_value),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   134
                modified = [Entry(sub_id       = '0x00000002 (bit 1)',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   135
                                  value_id     = value_id,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   136
                                  source_value = old_value,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   137
                                  target_value = new_value)])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   138
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   139
        check('ref',    'ref',      'Foo.Bit1', 'Foo.Bar.Bit')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   140
        check('invert', 'invert',   False,      True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   141
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   142
        self.assert_comparison_result_after_change_equals(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   143
            'repo.keys[1].bits[0].index = 6',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   144
            added   = [Entry(sub_id='0x00000002 (bit 6)')],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
            removed = [Entry(sub_id='0x00000002 (bit 1)')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
    def test_key_range_changed(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
        def check(attrname, value_id, old_value, new_value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
            self.assert_comparison_result_after_change_equals(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
                'repo.keys[2].%s = %r' % (attrname, new_value),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   152
                modified=[Entry(sub_id       = '0x10000000-0x1FFFFFFF',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   153
                                value_id     = value_id,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   154
                                source_value = old_value,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   155
                                target_value = new_value)])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   156
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   157
        check('ref',            'ref',          'Foo.Seq',  'Foo.Bar')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
        check('name',           'name',         None,       'Foobar')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
        check('backup',         'backup',       False,      True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
        check('read_only',      'read_only',    False,      True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
        check('access.cap_rd',  'cap_rd',       None,       'FooCapability')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
        check('access.cap_wr',  'cap_wr',       None,       'FooCapability')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
        check('access.sid_rd',  'sid_rd',       None,       '0x12345678')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   164
        check('access.sid_wr',  'sid_wr',       None,       '0x12345678')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   165
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   166
        def check(attrname, new_value, old_id, new_id):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   167
            self.assert_comparison_result_after_change_equals(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   168
                'repo.keys[2].%s = %r' % (attrname, new_value),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   169
            added   = [Entry(sub_id=new_id)],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   170
            removed = [Entry(sub_id=old_id)])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   171
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   172
        check('first_int',  '0x00000000',   '0x10000000-0x1FFFFFFF', '0x00000000-0x1FFFFFFF')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   173
        check('last_int',   '0x20000000',   '0x10000000-0x1FFFFFFF', '0x10000000-0x20000000')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   174
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   175
    def test_key_range_subkey_changed(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   176
        def check(attrname, old_value, new_value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   177
            self.assert_comparison_result_after_change_equals(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   178
                'repo.keys[2].subkeys[0].%s = %r' % (attrname, new_value),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   179
                modified = [Entry(sub_id       = '0x10000000-0x1FFFFFFF (sub-key 0x00000001)',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   180
                                  value_id     = attrname,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   181
                                  source_value = old_value,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   182
                                  target_value = new_value)])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   183
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   184
        check('ref', 'Sub1', 'FooSub')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   185
        check('name', 'Sub-key 1', 'Foo')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   186
        check('type', 'int', 'real')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   187
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   188
        self.assert_comparison_result_after_change_equals(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   189
            'repo.keys[2].subkeys[0].int = "0xA"',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   190
            added   = [Entry(sub_id='0x10000000-0x1FFFFFFF (sub-key 0x0000000A)')],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   191
            removed = [Entry(sub_id='0x10000000-0x1FFFFFFF (sub-key 0x00000001)')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   192
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   193
    def test_key_type_changed(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   194
        # Change a bitmask key into a simple key
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   195
        self.assert_comparison_result_after_change_equals(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   196
            "repo.keys[1] = CrmlSimpleKey(ref='Foo.Bar', name='Foo', int='0x2')",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   197
            modified = [Entry(sub_id       = '0x00000002',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   198
                              value_id     = 'key_type',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   199
                              source_value = 'bitmask_key',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   200
                              target_value = 'simple_key'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   201
                        Entry(sub_id       = '0x00000002',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   202
                              value_id     = 'name',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   203
                              source_value = None,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   204
                              target_value = 'Foo')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   205
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   206
        # Change a simple key into a bitmask key
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   207
        self.assert_comparison_result_after_change_equals(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   208
            "repo.keys[0] = CrmlBitmaskKey(int='0x1', name='Foo', bits=[CrmlBit(ref='Foo.Bit1', index=1)])",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   209
            modified = [Entry(sub_id       = '0x00000001',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   210
                              value_id     = 'key_type',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   211
                              source_value = 'simple_key',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   212
                              target_value = 'bitmask_key'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   213
                        Entry(sub_id       = '0x00000001',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   214
                              value_id     = 'name',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   215
                              source_value = None,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   216
                              target_value = 'Foo')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   217
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   218
    def test_repository_attrs_changed(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   219
        def check(attrname, value_id, old_value, new_value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   220
            self.assert_comparison_result_after_change_equals(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   221
                'repo.%s = %r' % (attrname, new_value),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   222
                modified=[Entry(sub_id       = None,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   223
                                value_id     = value_id,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   224
                                source_value = old_value,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   225
                                target_value = new_value)],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   226
                check_keys_in_entry_data=False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   227
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   228
        check('uid_name',       'uid_name',     'KCrUidTest',   'Foobar')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   229
        check('owner',          'owner',        '0x11223344',   '0xAABBCCDD')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   230
        check('backup',         'backup',       True,           False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   231
        check('rfs',            'rfs',          True,           False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   232
        check('access.cap_rd',  'cap_rd',       None,           'FooCapability')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   233
        check('access.cap_wr',  'cap_wr',       None,           'FooCapability')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   234
        check('access.sid_rd',  'sid_rd',       None,           '0x12345678')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   235
        check('access.sid_wr',  'sid_wr',       None,           '0x12345678')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   236
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   237
    def test_repository_file_changed(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   238
        self.assert_comparison_result_after_change_equals(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   239
            '', # Make no modifications in the repository
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   240
            modified=[Entry(sub_id       = None,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   241
                            value_id     = 'file',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   242
                            source_value = 'test.crml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   243
                            target_value = 'xyz.crml')],
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   244
            target_resource_ref = 'xyz.crml',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   245
            check_keys_in_entry_data = False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   246
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   247
if __name__ == '__main__':
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   248
    unittest.main()