configurationengine/source/plugins/symbian/ConeCRMLPlugin/CRMLPlugin/tests/unittest_crml_model.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
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    20
from cone.public import api, exceptions
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
from CRMLPlugin.crml_model import *
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    22
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    23
class TestCrmlAccess(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
    def test_create_access_object(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
        acc = CrmlAccess()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
        self.assertEquals(acc.cap_rd, None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
        self.assertEquals(acc.cap_wr, None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    28
        self.assertEquals(acc.sid_rd, None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    29
        self.assertEquals(acc.sid_wr, None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    31
        acc = CrmlAccess(cap_rd='AlwaysPass', cap_wr='WriteUserData', sid_rd='0x12345678', sid_wr='0x87654321')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
        self.assertEquals(acc.cap_rd, 'AlwaysPass')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    33
        self.assertEquals(acc.cap_wr, 'WriteUserData')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
        self.assertEquals(acc.sid_rd, '0x12345678')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
        self.assertEquals(acc.sid_wr, '0x87654321')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    36
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
    def test_clone_access_object(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
        acc1 = CrmlAccess(cap_rd='AlwaysPass', cap_wr='WriteUserData', sid_rd='0x12345678', sid_wr='0x87654321')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
        acc2 = acc1.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
        self.assertFalse(acc1 is acc2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
        self.assertTrue(acc1 == acc2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
        self.assertFalse(acc1 != acc2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    43
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    44
    def test_compare_access_objects(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    45
        acc1 = CrmlAccess(cap_rd='AlwaysPass', cap_wr='WriteUserData', sid_rd='0x12345678', sid_wr='0x87654321')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    46
        acc2 = acc1.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    47
        self.assertTrue(acc1 == acc2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
        self.assertFalse(acc1 != acc2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    50
        def check(attrname, value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
            acc2 = acc1.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
            setattr(acc1, attrname, value)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
            self.assertFalse(acc1 == acc2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    54
            self.assertTrue(acc1 != acc2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
        # Check that changing each individual attribute makes the comparison fail
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    57
        check('cap_rd', 'ReadDeviceData')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    58
        check('cap_wr', 'WriteDeviceData')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    59
        check('sid_rd', '0x11223344')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    60
        check('sid_wr', '0x44332211')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    61
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    62
        subkeys = [
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    63
            CrmlKeyRangeSubKey(ref='Sub1', name='Sub-key 1', type='int', int='0x1'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    64
            CrmlKeyRangeSubKey(ref='Sub2', name='Sub-key 2', type='real', int='0x2'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    65
            CrmlKeyRangeSubKey(ref='Sub3', name='Sub-key 3', type='string', int='0x3'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    66
        ]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    67
        self.keyrange = CrmlKeyRange(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    68
            first_int   = '0x10000000',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    69
            last_int    = '0x1FFFFFFF',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    70
            first_index = 2,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    71
            index_bits  = 0x0ff0,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    72
            backup      = True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    73
            read_only   = True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    74
            access      = CrmlAccess(cap_rd='ReadUserData'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    75
            subkeys     = subkeys)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    76
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
    def test_create_keyrange_object(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
        self.assertRaises(ValueError, CrmlKeyRange)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    79
        self.assertRaises(ValueError, CrmlKeyRange, first_int='0x10')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
        self.assertRaises(ValueError, CrmlKeyRange, last_int='0x1F')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
        keyrange = CrmlKeyRange(first_int='0x10', last_int='0x1F')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
class TestCrmlRepository(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
    def setUp(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
        keys = [
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    88
            CrmlSimpleKey(ref='Foo.Bar', int='0x1'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    89
            CrmlBitmaskKey(int='0x2', bits=[CrmlBit(ref='Foo.Bit1', index=1),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    90
                                            CrmlBit(ref='Foo.Bit2', index=2),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
                                            CrmlBit(ref='Foo.Bit4', index=4, invert=True)]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    92
            CrmlKeyRange(first_int='0x10000000', last_int='0x1FFFFFFF', ref="Foo.Seq",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    93
                         subkeys=[CrmlKeyRangeSubKey(ref='Sub1', name='Sub-key 1', type='int', int='0x1'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    94
                                  CrmlKeyRangeSubKey(ref='Sub2', name='Sub-key 2', type='real', int='0x2')]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    95
        ]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    96
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    97
        self.repo = CrmlRepository(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    98
            uid_value   = '0x10203040',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    99
            uid_name    = 'KCrUidTest',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   100
            owner       = '0x11223344',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   101
            backup      = True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   102
            rfs         = True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
            version     = '2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
            access      = CrmlAccess(cap_rd='ReadUserData'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
            keys        = keys)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
    def test_create_repo_object(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
        repo = CrmlRepository()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
        self.assertEquals(repo.uid_value,   None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
        self.assertEquals(repo.uid_name,    None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
        self.assertEquals(repo.owner,       None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
        self.assertEquals(repo.backup,      False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
        self.assertEquals(repo.rfs,         False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
        self.assertEquals(repo.access,      CrmlAccess())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
        self.assertEquals(repo.keys,        [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
        keys = [
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
            CrmlSimpleKey(ref='Foo.Bar', int='0x1'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
            CrmlBitmaskKey(int='0x2', bits=[CrmlBit(ref='Foo.Bit1', index=1),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
                                            CrmlBit(ref='Foo.Bit2', index=2),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
                                            CrmlBit(ref='Foo.Bit4', index=4, invert=True)]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
            CrmlKeyRange(first_int='0x10000000', last_int='0x1FFFFFFF', ref="Foo.Seq",
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
                         subkeys=[CrmlKeyRangeSubKey(ref='Sub1', name='Sub-key 1', type='int', int='0x1'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
                                  CrmlKeyRangeSubKey(ref='Sub2', name='Sub-key 2', type='real', int='0x2')]),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
        ]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
        repo = self.repo
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
        self.assertEquals(repo.uid_value,   '0x10203040')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
        self.assertEquals(repo.uid_name,    'KCrUidTest')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
        self.assertEquals(repo.owner,       '0x11223344')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
        self.assertEquals(repo.backup,      True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   133
        self.assertEquals(repo.rfs,         True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   134
        self.assertEquals(repo.version,     '2')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   135
        self.assertEquals(repo.access,      CrmlAccess(cap_rd='ReadUserData'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   136
        self.assertEquals(repo.keys,        keys)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   137
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   138
    def test_clone_repo_object(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   139
        repo1 = self.repo
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   140
        repo2 = repo1.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   141
        self.assertFalse(repo1 is repo2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   142
        self.assertTrue(repo1 == repo2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   143
        self.assertFalse(repo1 != repo2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   144
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
        # Assert that the keys have been deep-copied
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
        self.assertFalse(repo1.keys is repo2.keys)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
        self.assertEquals(repo1.keys, repo2.keys)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
        for i in xrange(len(repo1.keys)):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
            self.assertFalse(repo1.keys[i] is repo2.keys[i])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
    def test_compare_repo_objects(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   152
        repo1 = CrmlRepository()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   153
        repo2 = repo1.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   154
        self.assertTrue(repo1 == repo2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   155
        self.assertFalse(repo1 != repo2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   156
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   157
        def check(attrname, value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
            repo1 = self.repo
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
            repo2 = repo1.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
            setattr(repo2, attrname, value)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
            self.assertFalse(repo1 == repo2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
            self.assertTrue(repo1 != repo2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   164
        # Check that changing each individual attribute makes the comparison fail
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   165
        check('uid_value',  '0xbaadf00d')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   166
        check('uid_name',   'KFooUid')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   167
        check('owner',      '0xbeef')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   168
        check('backup',     False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   169
        check('rfs',        False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   170
        check('access',     CrmlAccess(cap_wr='WriteUserData'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   171
        check('keys',       ['foo'])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   172
        check('version',    '3')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   173
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   174
        def check2(mod_func):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   175
            repo1 = self.repo
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   176
            repo2 = repo1.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   177
            mod_func(repo2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   178
            self.assertFalse(repo1 == repo2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   179
            self.assertTrue(repo1 != repo2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   180
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   181
        # Check that changing the keys makes the comparison fail
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   182
        check2(lambda r: setattr(r.keys[0], 'name', 'foo'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   183
        check2(lambda r: setattr(r.keys[1], 'type', 'binary'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   184
        check2(lambda r: setattr(r.keys[2], 'index_bits', 0x00ffff00))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   185
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   186
    def test_get_repo_refs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   187
        self.assertEquals([], CrmlRepository(uid_value='0x1').get_refs())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   188
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   189
        expected = ['Foo.Bar',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   190
                    'Foo.Bit1',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   191
                    'Foo.Bit2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   192
                    'Foo.Bit4',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   193
                    'Foo.Seq',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   194
                    'Foo.Seq.Sub1',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   195
                    'Foo.Seq.Sub2']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   196
        self.assertEquals(sorted(expected), sorted(self.repo.get_refs()))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   197
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   198
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   199
class TestCrmlSimpleKey(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   200
    def setUp(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   201
        self.key = CrmlSimpleKey(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   202
            ref         = 'Foo.Bar',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   203
            name        = 'Foobar',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   204
            int         = '0x1020',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   205
            type        = 'real',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   206
            backup      = True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   207
            read_only   = True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   208
            access      = CrmlAccess(cap_rd='ReadUserData'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   209
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   210
    def test_create_key_object(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   211
        # Not specifying ref or index should make the constructor fail
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   212
        self.assertRaises(ValueError, CrmlSimpleKey)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   213
        self.assertRaises(ValueError, CrmlSimpleKey, ref='Foo.Bar')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   214
        self.assertRaises(ValueError, CrmlSimpleKey, int='0x1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   215
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   216
        key = CrmlSimpleKey(ref='Foo.Bar', int='0x1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   217
        self.assertEquals(key.ref,          'Foo.Bar')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   218
        self.assertEquals(key.name,         None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   219
        self.assertEquals(key.int,          '0x1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   220
        self.assertEquals(key.type,         'int')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   221
        self.assertEquals(key.backup,       False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   222
        self.assertEquals(key.read_only,    False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   223
        self.assertEquals(key.access,       CrmlAccess())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   224
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   225
        key = self.key
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   226
        self.assertEquals(key.ref,          'Foo.Bar')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   227
        self.assertEquals(key.name,         'Foobar')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   228
        self.assertEquals(key.int,          '0x1020')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   229
        self.assertEquals(key.type,         'real')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   230
        self.assertEquals(key.backup,       True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   231
        self.assertEquals(key.read_only,    True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   232
        self.assertEquals(key.access,       CrmlAccess(cap_rd='ReadUserData'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   233
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   234
    def test_clone_key_object(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   235
        key1 = self.key
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   236
        key2 = key1.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   237
        self.assertFalse(key1 is key2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   238
        self.assertTrue(key1 == key2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   239
        self.assertFalse(key1 != key2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   240
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   241
    def test_compare_key_objects(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   242
        def check(attrname, value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   243
            key1 = self.key
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   244
            key2 = key1.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   245
            setattr(key2, attrname, value)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   246
            self.assertFalse(key1 == key2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   247
            self.assertTrue(key1 != key2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   248
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   249
        # Check that changing each individual attribute makes the comparison fail
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   250
        check('ref',        'Foo.Bar.Baz')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   251
        check('name',       'Testing')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   252
        check('int',        'KFooUid')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   253
        check('type',       'selection')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   254
        check('backup',     False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   255
        check('read_only',  False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   256
        check('access',     CrmlAccess(cap_wr='WriteUserData'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   257
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   258
    def test_get_key_refs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   259
        self.assertEquals(['Foo.Bar'], self.key.get_refs())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   260
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   261
class TestCrmlBit(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   262
    def test_create_bit_object(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   263
        # Not specifying ref or index should make the constructor fail
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   264
        self.assertRaises(ValueError, CrmlBit)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   265
        self.assertRaises(ValueError, CrmlBit, ref='Foo.Bar')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   266
        self.assertRaises(ValueError, CrmlBit, index='3')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   267
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   268
        bit = CrmlBit(ref='Foo.Bar', index=1)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   269
        self.assertEquals(bit.ref,      'Foo.Bar')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   270
        self.assertEquals(bit.index,    1)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   271
        self.assertEquals(bit.invert,   False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   272
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   273
        bit = CrmlBit(ref='Foo.Bar.Baz', index=2, invert=True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   274
        self.assertEquals(bit.ref,      'Foo.Bar.Baz')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   275
        self.assertEquals(bit.index,    2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   276
        self.assertEquals(bit.invert,   True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   277
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   278
    def test_clone_bit_object(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   279
        bit1 = CrmlBit(ref='Foo.Bar.Baz', index=2, invert=True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   280
        bit2 = bit1.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   281
        self.assertFalse(bit1 is bit2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   282
        self.assertTrue(bit1 == bit2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   283
        self.assertFalse(bit1 != bit2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   284
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   285
    def test_compare_bit_objects(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   286
        bit1 = CrmlBit(ref='Foo.Bar.Baz', index=2, invert=True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   287
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   288
        def check(attrname, value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   289
            bit2 = bit1.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   290
            setattr(bit1, attrname, value)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   291
            self.assertFalse(bit1 == bit2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   292
            self.assertTrue(bit1 != bit2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   293
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   294
        check('ref',    'Foo.Bar')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   295
        check('index',  5)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   296
        check('invert', False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   297
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   298
class TestCrmlBitmaskKey(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   299
    def setUp(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   300
        bits = [
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   301
            CrmlBit(ref='Foo.Bit1', index=1),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   302
            CrmlBit(ref='Foo.Bit2', index=2),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   303
            CrmlBit(ref='Foo.Bit4', index=4, invert=True),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   304
        ]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   305
        self.bm = CrmlBitmaskKey(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   306
            int         = '0x500',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   307
            type        = 'int',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   308
            backup      = True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   309
            read_only   = True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   310
            access      = CrmlAccess(cap_rd='ReadUserData'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   311
            bits        = bits)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   312
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   313
    def test_create_bitmask_object(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   314
        self.assertRaises(ValueError, CrmlBitmaskKey)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   315
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   316
        bm = CrmlBitmaskKey(int='0x2')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   317
        self.assertEquals(bm.int,       '0x2')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   318
        self.assertEquals(bm.type,      'int')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   319
        self.assertEquals(bm.backup,    False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   320
        self.assertEquals(bm.read_only, False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   321
        self.assertEquals(bm.access,    CrmlAccess())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   322
        self.assertEquals(bm.bits,      [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   323
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   324
        bm = self.bm
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   325
        self.assertEquals(bm.int,       '0x500')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   326
        self.assertEquals(bm.type,      'int')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   327
        self.assertEquals(bm.backup,    True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   328
        self.assertEquals(bm.read_only, True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   329
        self.assertEquals(bm.access,    CrmlAccess(cap_rd='ReadUserData'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   330
        self.assertEquals(bm.bits,      [CrmlBit(ref='Foo.Bit1', index=1),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   331
                                         CrmlBit(ref='Foo.Bit2', index=2),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   332
                                         CrmlBit(ref='Foo.Bit4', index=4, invert=True)])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   333
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   334
    def test_clone_bitmask_object(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   335
        bm1 = self.bm
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   336
        bm2 = bm1.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   337
        self.assertFalse(bm1 is bm2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   338
        self.assertTrue(bm1 == bm2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   339
        self.assertFalse(bm1 != bm2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   340
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   341
        # Assert that the bits have been deep-copied
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   342
        self.assertFalse(bm1.bits is bm2.bits)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   343
        self.assertEquals(bm1.bits, bm2.bits)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   344
        for i in xrange(len(bm1.bits)):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   345
            self.assertFalse(bm1.bits[i] is bm2.bits[i])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   346
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   347
    def test_compare_bitmask_objects(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   348
        def check(attrname, value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   349
            bm1 = self.bm
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   350
            bm2 = bm1.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   351
            setattr(bm2, attrname, value)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   352
            self.assertFalse(bm1 == bm2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   353
            self.assertTrue(bm1 != bm2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   354
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   355
        check('int',        '0x600')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   356
        check('type',       'binary')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   357
        check('backup',     False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   358
        check('read_only',  False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   359
        check('access',     CrmlAccess(cap_rd='ReadDeviceData'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   360
        check('bits',       [CrmlBit(ref='Foo.Bit7', index=7),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   361
                             CrmlBit(ref='Foo.Bit9', index=9)])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   362
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   363
    def test_get_bitmask_refs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   364
        self.assertEquals([], CrmlBitmaskKey(int='0x1').get_refs())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   365
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   366
        expected = ['Foo.Bit1',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   367
                    'Foo.Bit2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   368
                    'Foo.Bit4',]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   369
        self.assertEquals(sorted(expected), sorted(self.bm.get_refs()))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   370
 
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   371
class TestCrmlKeyRangeSubKey(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   372
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   373
    def setUp(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   374
        self.subkey = CrmlKeyRangeSubKey(ref='Foo.Bar', name='Foobar', type='int', int='0x1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   375
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   376
    def test_create_subkey_object(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   377
        self.assertRaises(ValueError, CrmlKeyRangeSubKey)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   378
        self.assertRaises(ValueError, CrmlKeyRangeSubKey, ref='Foo.Bar')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   379
        self.assertRaises(ValueError, CrmlKeyRangeSubKey, type='int')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   380
        self.assertRaises(ValueError, CrmlKeyRangeSubKey, int='0x1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   381
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   382
        subkey = self.subkey
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   383
        self.assertEquals(subkey.ref,   'Foo.Bar')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   384
        self.assertEquals(subkey.name,  'Foobar')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   385
        self.assertEquals(subkey.type,  'int')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   386
        self.assertEquals(subkey.int,   '0x1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   387
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   388
    def test_clone_subkey_object(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   389
        subkey1 = self.subkey
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   390
        subkey2 = subkey1.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   391
        self.assertFalse(subkey1 is subkey2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   392
        self.assertTrue(subkey1 == subkey2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   393
        self.assertFalse(subkey1 != subkey2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   394
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   395
    def test_compare_subkey_objects(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   396
        def check(attrname, value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   397
            subkey1 = self.subkey
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   398
            subkey2 = subkey1.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   399
            setattr(subkey2, attrname, value)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   400
            self.assertFalse(subkey1 == subkey2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   401
            self.assertTrue(subkey1 != subkey2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   402
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   403
        check('ref',    'Foo.Bar.Baz')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   404
        check('name',   'Test')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   405
        check('int',    '0x2')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   406
        check('type',   'binary')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   407
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   408
class TestCrmlKeyRange(unittest.TestCase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   409
    def setUp(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   410
        subkeys = [
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   411
            CrmlKeyRangeSubKey(ref='Sub1', name='Sub-key 1', type='int', int='0x1'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   412
            CrmlKeyRangeSubKey(ref='Sub2', name='Sub-key 2', type='real', int='0x2'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   413
            CrmlKeyRangeSubKey(ref='Sub3', name='Sub-key 3', type='string', int='0x3'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   414
        ]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   415
        self.keyrange = CrmlKeyRange(
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   416
            ref         = 'Foo.Seq',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   417
            first_int   = '0x10000000',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   418
            last_int    = '0x1FFFFFFF',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   419
            first_index = 2,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   420
            index_bits  = 0x0ff0,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   421
            backup      = True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   422
            read_only   = True,
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   423
            access      = CrmlAccess(cap_rd='ReadUserData'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   424
            subkeys     = subkeys)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   425
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   426
    def test_create_keyrange_object(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   427
        self.assertRaises(ValueError, CrmlKeyRange)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   428
        self.assertRaises(ValueError, CrmlKeyRange, first_int='0x10')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   429
        self.assertRaises(ValueError, CrmlKeyRange, last_int='0x1F')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   430
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   431
        keyrange = CrmlKeyRange(first_int='0x10', last_int='0x1F')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   432
        self.assertEquals(keyrange.first_int,   '0x10')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   433
        self.assertEquals(keyrange.last_int,    '0x1F')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   434
        self.assertEquals(keyrange.first_index, 0)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   435
        self.assertEquals(keyrange.index_bits,  None)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   436
        self.assertEquals(keyrange.backup,      False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   437
        self.assertEquals(keyrange.read_only,   False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   438
        self.assertEquals(keyrange.access,      CrmlAccess())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   439
        self.assertEquals(keyrange.subkeys,     [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   440
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   441
        keyrange = self.keyrange
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   442
        self.assertEquals(keyrange.first_int,   '0x10000000')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   443
        self.assertEquals(keyrange.last_int,    '0x1FFFFFFF')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   444
        self.assertEquals(keyrange.first_index, 2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   445
        self.assertEquals(keyrange.index_bits,  0x0ff0)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   446
        self.assertEquals(keyrange.backup,      True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   447
        self.assertEquals(keyrange.read_only,   True)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   448
        self.assertEquals(keyrange.access,      CrmlAccess(cap_rd='ReadUserData'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   449
        self.assertEquals(keyrange.subkeys,     [
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   450
            CrmlKeyRangeSubKey(ref='Sub1', name='Sub-key 1', type='int', int='0x1'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   451
            CrmlKeyRangeSubKey(ref='Sub2', name='Sub-key 2', type='real', int='0x2'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   452
            CrmlKeyRangeSubKey(ref='Sub3', name='Sub-key 3', type='string', int='0x3')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   453
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   454
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   455
    def test_clone_keyrange_object(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   456
        keyrange1 = self.keyrange
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   457
        keyrange2 = keyrange1.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   458
        self.assertFalse(keyrange1 is keyrange2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   459
        self.assertTrue(keyrange1 == keyrange2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   460
        self.assertFalse(keyrange1 != keyrange2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   461
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   462
        # Assert that the sub-keys have been deep-copied
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   463
        self.assertFalse(keyrange1.subkeys is keyrange2.subkeys)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   464
        self.assertEquals(keyrange1.subkeys, keyrange2.subkeys)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   465
        for i in xrange(len(keyrange1.subkeys)):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   466
            self.assertFalse(keyrange1.subkeys[i] is keyrange2.subkeys[i])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   467
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   468
    def test_compare_keyrange_objects(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   469
        def check(attrname, value):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   470
            keyrange1 = self.keyrange
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   471
            keyrange2 = keyrange1.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   472
            setattr(keyrange2, attrname, value)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   473
            self.assertFalse(keyrange1 == keyrange2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   474
            self.assertTrue(keyrange1 != keyrange2)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   475
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   476
        check('first_int',      '0x20000000')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   477
        check('last_int',       '0x2FFFFFFF')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   478
        check('first_index',    3)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   479
        check('index_bits',     0xf00)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   480
        check('backup',         False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   481
        check('read_only',      False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   482
        check('access',         CrmlAccess(cap_rd='ReadDeviceData'))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   483
        check('subkeys',        [
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   484
            CrmlKeyRangeSubKey(ref='Sub0x100', name='Sub-key 0x100', type='string', int='0x100'),
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   485
            CrmlKeyRangeSubKey(ref='Sub0x200', name='Sub-key 0x200', type='binary', int='0x200')])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   486
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   487
    def test_get_keyrange_refs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   488
        self.assertEquals([], CrmlKeyRange(first_int='0x1', last_int='0x2').get_refs())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   489
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   490
        expected = ['Foo.Seq',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   491
                    'Foo.Seq.Sub1',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   492
                    'Foo.Seq.Sub2',
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   493
                    'Foo.Seq.Sub3',]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   494
        self.assertEquals(sorted(expected), sorted(self.keyrange.get_refs()))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   495
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   496
if __name__ == "__main__":
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   497
    unittest.main()