Exemple #1
0
    def test_get_repository_info_webview(self):
        """Testing ClearCaseClient.get_repository_info with webview"""
        self.spy_on(check_gnu_diff, call_original=False)
        self.spy_on(execute, op=kgb.SpyOpMatchInOrder([
            {
                'args': (['cleartool', 'pwv', '-short'],),
                'op': kgb.SpyOpReturn('test-view'),
            },
            {
                'args': (['cleartool', 'pwv', '-root'],),
                'op': kgb.SpyOpReturn('/test/view'),
            },
            {
                'args': (['cleartool', 'describe', '-short', 'vob:.'],),
                'op': kgb.SpyOpReturn('vob'),
            },
            {
                'args': (['cleartool', 'lsview', '-full', '-properties',
                          '-cview'],),
                'op': kgb.SpyOpReturn(_WEBVIEW_VIEW_INFO),
            },
        ]))

        try:
            self.client.get_repository_info()
        except SCMError as e:
            self.assertEqual(six.text_type(e),
                             'Webviews and automatic views are not currently '
                             'supported. RBTools commands can only be used in '
                             'dynamic or snapshot views.')
        else:
            self.fail('get_repository_info did not raise SCMError')
Exemple #2
0
    def test_repository_info_update_from_remote_versionvault(self):
        """Testing ClearCaseRepositoryInfo.update_from_remote with
        VersionVault remote
        """
        self.spy_on(execute, op=kgb.SpyOpMatchInOrder([
            {
                'args': (['cleartool', 'lsregion'],),
                'op': kgb.SpyOpReturn(['region']),
            },
            {
                'args': (['cleartool', 'lsvob', '-s', '-family',
                          '9ac6856f.c9af11eb.9851.52:54:00:7f:63:a5',
                          '-region', 'region'],),
                'op': kgb.SpyOpReturn('vob'),
            },
        ]))

        repository_info = ClearCaseRepositoryInfo('/view/test/vob', 'vob')
        repository_info.update_from_remote({}, {
            'repopath': '/view/server-view',
            'uuid': '9ac6856f.c9af11eb.9851.52:54:00:7f:63:a5',
        })

        self.assertEqual(repository_info.uuid_to_tags, {
            '9ac6856f.c9af11eb.9851.52:54:00:7f:63:a5': ['vob'],
        })
        self.assertEqual(repository_info.is_legacy, True)
    def test_get_or_create_user_with_empty_info(self):
        """Testing LDAPBackend.get_or_create_user with empty information in
        LDAP
        """
        user_dn = 'CN=Bob,OU=MyOrg,DC=example,DC=COM'

        self.spy_on(
            TestLDAPObject.search_s,
            owner=TestLDAPObject,
            op=kgb.SpyOpMatchInOrder([
                {
                    'args': ('CN=admin,DC=example,DC=com',
                             ldap.SCOPE_SUBTREE, '(uid=doc)'),
                    'call_fake': lambda *args, **kwargs: [(user_dn, {})],
                },
                {
                    'args': (user_dn, ldap.SCOPE_BASE),
                    'call_fake': lambda *args, **kwargs: [(user_dn, {})]
                },
            ]))

        self.assertEqual(User.objects.count(), 0)

        user = self.backend.get_or_create_user(username='******',
                                               request=None)

        self.assertIsNotNone(user)
        self.assertEqual(User.objects.count(), 1)

        self.assertEqual(user.first_name, 'doc')
        self.assertEqual(user.last_name, '')
        self.assertEqual(user.email, '')
Exemple #4
0
    def test_get_repository_info_dynamic_UCM(self):
        """Testing ClearCaseClient.get_repository_info with dynamic view and UCM
        """
        self.spy_on(check_gnu_diff, call_original=False)
        self.spy_on(execute, op=kgb.SpyOpMatchInOrder([
            {
                'args': (['cleartool', 'pwv', '-short'],),
                'op': kgb.SpyOpReturn('test-view'),
            },
            {
                'args': (['cleartool', 'pwv', '-root'],),
                'op': kgb.SpyOpReturn('/test/view'),
            },
            {
                'args': (['cleartool', 'describe', '-short', 'vob:.'],),
                'op': kgb.SpyOpReturn('vob'),
            },
            {
                'args': (['cleartool', 'lsview', '-full', '-properties',
                          '-cview'],),
                'op': kgb.SpyOpReturn(_UCM_VIEW_INFO),
            },
        ]))

        repository_info = self.client.get_repository_info()
        self.assertEqual(repository_info.path, '/test/view/vob')
        self.assertEqual(repository_info.vobtag, 'vob')
        self.assertEqual(repository_info.vob_tags, {'vob'})

        # Initial state that gets populated later by update_from_remote
        self.assertEqual(repository_info.uuid_to_tags, {})
        self.assertEqual(repository_info.is_legacy, True)

        self.assertEqual(self.client.viewtype, 'dynamic')
        self.assertEqual(self.client.is_ucm, True)
    def test_authenticate_with_required_group_recurse_limit_hit(self):
        """Testing ActiveDirectoryBackend.authenticate with valid credentials
        and in required group recursion limit hit
        """
        self.spy_on(TestLDAPObject.simple_bind_s, owner=TestLDAPObject)
        self.spy_on(
            TestLDAPObject.search_s,
            owner=TestLDAPObject,
            op=kgb.SpyOpMatchInOrder([
                {
                    'args': ['dc=test,dc=corp,dc=example,dc=com'],
                    'call_fake':
                    lambda *args, **kwargs: [
                        ('CN=Test User,OU=MyOrg,DC=example,DC=com', {
                            'givenName': ['Test'],
                            'sn': ['User'],
                            'mail': ['*****@*****.**'],
                            'memberOf': [
                                'cn=other,ou=Groups,dc=example,dc=com',
                            ],
                        }),
                    ],
                },
                {
                    'args':
                    ['dc=example,dc=com'],
                    'kwargs': {
                        'filterstr': '(&(objectClass=group)(cn=other))',
                        'scope': ldap.SCOPE_SUBTREE,
                    },
                    'call_fake':
                    lambda *args, **kwargs: [
                        ('cn=other,ou=Groups,dc=example,dc=com', {
                            'memberOf': [
                                'cn=other2,ou=Groups,dc=example,dc=com',
                            ],
                        }),
                    ],
                },
            ]))

        user = self.backend.authenticate(request=None,
                                         username='******',
                                         password='******')

        self.assertIsNone(user)

        self.assertSpyCalledWith(TestLDAPObject.simple_bind_s,
                                 '*****@*****.**',
                                 'test-pass')
        self.assertSpyCallCount(TestLDAPObject.search_s, 2)
        self.assertSpyCalledWith(
            TestLDAPObject.search_s,
            'dc=test,dc=corp,dc=example,dc=com',
            filterstr='(&(objectClass=user)(sAMAccountName=test-user))',
            scope=ldap.SCOPE_SUBTREE)
        self.assertSpyCalledWith(TestLDAPObject.search_s,
                                 'dc=example,dc=com',
                                 filterstr='(&(objectClass=group)(cn=other))',
                                 scope=ldap.SCOPE_SUBTREE)
Exemple #6
0
    def test_activity_changeset(self):
        """Testing ClearCaseClient._get_activity_changeset"""
        self.spy_on(execute, op=kgb.SpyOpMatchInOrder([
            {
                'args': (['cleartool', 'lsregion'],),
                'op': kgb.SpyOpReturn(['region']),
            },
            {
                'args': (['cleartool', 'lsvob', '-s', '-family',
                          '9ac6856f.c9af11eb.9851.52:54:00:7f:63:a5',
                          '-region', 'region'],),
                'op': kgb.SpyOpReturn('/vobs/els'),
            },
            {
                'args': (['cleartool', 'lsactivity', '-fmt', '%[versions]Qp',
                          'activity-name'],),
                'op': kgb.SpyOpReturn(
                    '"/view/x/vobs/els/.@@/main/int/CHECKEDOUT.78" '
                    '"/view/x/vobs/els/test.pdf@@/main/int/CHECKEDOUT.77" '
                    '"/view/x/vobs/els/new.py@@/main/int/CHECKEDOUT.71" '
                    '"/view/x/vobs/els/test.py@@/main/int/CHECKEDOUT.64" '
                    '"/view/x/vobs/els/.@@/main/int/2" '
                    '"/view/x/vobs/els/test.py@@/main/int/3" '
                    '"/view/x/vobs/els/test.py@@/main/int/2"'
                ),
            },
            {
                'args': (['cleartool', 'desc', '-fmt',
                          '%[version_predecessor]p',
                          '/view/x/vobs/els/.@@/main/int/2'],),
                'op': kgb.SpyOpReturn('/main/int/1'),
            },
            {
                'args': (['cleartool', 'desc', '-fmt',
                          '%[version_predecessor]p',
                          '/view/x/vobs/els/test.py@@/main/int/2'],),
                'op': kgb.SpyOpReturn('/main/int/1'),
            },
        ]))

        repository_info = ClearCaseRepositoryInfo('/view/test/vob', 'vob')
        repository_info.update_from_remote({}, {
            'repopath': '/view/server-view',
            'uuid': '9ac6856f.c9af11eb.9851.52:54:00:7f:63:a5',
        })

        changeset = self.client._get_activity_changeset('activity-name',
                                                        repository_info)

        self.assertEqual(changeset, [
            ('/view/x/vobs/els/.@@/main/int/1',
             '/view/x/vobs/els/.'),
            ('/view/x/vobs/els/test.pdf@@/main/int/0',
             '/view/x/vobs/els/test.pdf'),
            ('/view/x/vobs/els/new.py@@/main/int/0',
             '/view/x/vobs/els/new.py'),
            ('/view/x/vobs/els/test.py@@/main/int/1',
             '/view/x/vobs/els/test.py'),
        ])
Exemple #7
0
    def test_get_vobtag_success(self):
        """Testing ClearCaseClient._get_vobtag inside view"""
        self.spy_on(execute, op=kgb.SpyOpMatchInOrder([
            {
                'args': (['cleartool', 'describe', '-short', 'vob:.'],),
                'op': kgb.SpyOpReturn('/vob\n'),
            },
        ]))

        self.assertEqual(self.client._get_vobtag(), '/vob')
Exemple #8
0
    def test_get_local_path_outside_view(self):
        """Testing ClearCaseClient.get_local_path outside of view"""
        self.spy_on(execute, op=kgb.SpyOpMatchInOrder([
            {
                'args': (['cleartool', 'pwv', '-short'],),
                'op': kgb.SpyOpReturn('** NONE **'),
            },
        ]))

        self.assertEqual(self.client.get_local_path(), None)
Exemple #9
0
    def test_diff_directory(self):
        """Testing ClearCaseClient._diff_directory"""
        self.spy_on(execute, op=kgb.SpyOpMatchInOrder([
            {
                'args': (['cleartool', 'diff', '-ser',
                          '.@@/main/1', '.@@/main/CHECKEDOUT'],),
                'op': kgb.SpyOpReturn([
                    '********************************',
                    '<<< directory 1: .@@/main/test-project_integration/2',
                    '>>> directory 2:',
                    '.@@/main/test-project_integration/CHECKEDOUT',
                    '********************************',
                    '-----[ renamed to ]-----',
                    '< test2.py  --06-29T17:26 david',
                    '---',
                    '> renamed-file.py  --06-29T17:26 david',
                    '-----[ deleted ]-----',
                    '< test3.py  --07-28T00:30 david',
                    '-----[ added ]-----',
                    '> test4.py  --07-28T18:27 david',
                ]),
            },
            {
                'args': (['cleartool', 'desc', '-fmt', '%On',
                          '.@@/main/1/test2.py'],),
                'op': kgb.SpyOpReturn('test2.py-fake-oid'),
            },
            {
                'args': (['cleartool', 'desc', '-fmt', '%On',
                          '.@@/main/CHECKEDOUT/renamed-file.py'],),
                'op': kgb.SpyOpReturn('renamed-file.py-fake-oid'),
            },
            {
                'args': (['cleartool', 'desc', '-fmt', '%On',
                          '.@@/main/1/test3.py'],),
                'op': kgb.SpyOpReturn('test3.py-fake-oid'),
            },
            {
                'args': (['cleartool', 'desc', '-fmt', '%On',
                          '.@@/main/CHECKEDOUT/test4.py'],),
                'op': kgb.SpyOpReturn('test4.py-fake-oid'),
            },
        ]))

        self.assertEqual(
            self.client._diff_directory('.@@/main/1', '.@@/main/CHECKEDOUT'),
            {
                'added': {('.@@/main/CHECKEDOUT/test4.py',
                           'test4.py-fake-oid')},
                'deleted': {('.@@/main/1/test3.py', 'test3.py-fake-oid')},
                'renamed': {('.@@/main/1/test2.py', 'test2.py-fake-oid',
                             '.@@/main/CHECKEDOUT/renamed-file.py',
                             'renamed-file.py-fake-oid')},
            })
Exemple #10
0
    def test_get_vobtag_error(self):
        """Testing ClearCaseClient._get_vobtag outside view"""
        self.spy_on(execute, op=kgb.SpyOpMatchInOrder([
            {
                'args': (['cleartool', 'describe', '-short', 'vob:.'],),
                'op': kgb.SpyOpReturn(
                    'cleartool: Error: Unable to determine VOB for '
                    'pathname ".".\n'
                ),
            },
        ]))

        with self.assertRaises(SCMError):
            self.client._get_vobtag()
Exemple #11
0
    def test_get_local_path_inside_view(self):
        """Testing ClearCaseClient.get_local_path inside view"""
        self.spy_on(execute, op=kgb.SpyOpMatchInOrder([
            {
                'args': (['cleartool', 'pwv', '-short'],),
                'op': kgb.SpyOpReturn('test-view'),
            },
            {
                'args': (['cleartool', 'pwv', '-root'],),
                'op': kgb.SpyOpReturn('/test/view'),
            },
            {
                'args': (['cleartool', 'describe', '-short', 'vob:.'],),
                'op': kgb.SpyOpReturn('vob'),
            },
        ]))

        self.assertEqual(self.client.get_local_path(), '/test/view/vob')
Exemple #12
0
    def test_get_or_create_user_in_ldap(self):
        """Testing LDAPBackend.get_or_create_user with new user found in LDAP
        """
        user_dn = 'CN=Bob BobBob,OU=MyOrg,DC=example,DC=COM'

        self.spy_on(TestLDAPObject.search_s,
                    owner=TestLDAPObject,
                    op=kgb.SpyOpMatchInOrder([
                        {
                            'args': ('CN=admin,DC=example,DC=com',
                                     ldap.SCOPE_SUBTREE, '(uid=doc)'),
                            'call_fake':
                            lambda *args, **kwargs: [(user_dn, {})],
                        },
                        {
                            'args': (user_dn, ldap.SCOPE_BASE),
                            'call_fake':
                            lambda *args, **kwargs: [
                                (user_dn, {
                                    'givenName': [b'Bob'],
                                    'sn': [b'BobBob'],
                                    'email': [b'*****@*****.**'],
                                }),
                            ],
                        },
                    ]))

        self.assertEqual(User.objects.count(), 0)

        user = self.backend.get_or_create_user(username='******', request=None)
        self.assertIsNotNone(user)
        self.assertEqual(User.objects.count(), 1)

        self.assertEqual(user.username, 'doc')
        self.assertEqual(user.first_name, 'Bob')
        self.assertEqual(user.last_name, 'BobBob')
        self.assertEqual(user.email, '*****@*****.**')
        self.assertFalse(user.is_staff)
        self.assertFalse(user.is_superuser)
Exemple #13
0
    def test_checkedout_changeset(self):
        """Testing ClearCaseClient._get_checkedout_changeset"""
        self.spy_on(execute, op=kgb.SpyOpMatchInOrder([
            {
                'args': (['cleartool', 'lsregion'],),
                'op': kgb.SpyOpReturn(['region']),
            },
            {
                'args': (['cleartool', 'lsvob', '-s', '-family',
                          '9ac6856f.c9af11eb.9851.52:54:00:7f:63:a5',
                          '-region', 'region'],),
                'op': kgb.SpyOpReturn('vob'),
            },
            {
                'args': (['cleartool', 'lscheckout', '-avobs', '-cview',
                          '-me', '-fmt', r'%En\t%PVn\t%Vn\n'],),
                'op': kgb.SpyOpReturn(
                    'test2.py\t/main/1\t/main/CHECKEDOUT\n'
                    'test.pdf\t/main/0\t/main/CHECKEDOUT\n'
                    'test.py\t/main/1\t/main/CHECKEDOUT\n'
                ),
            },
        ]))

        repository_info = ClearCaseRepositoryInfo('/view/test/vob', 'vob')
        repository_info.update_from_remote({}, {
            'repopath': '/view/server-view',
            'uuid': '9ac6856f.c9af11eb.9851.52:54:00:7f:63:a5',
        })

        changeset = self.client._get_checkedout_changeset(repository_info)

        self.assertEqual(changeset, [
            ('test2.py@@/main/1', 'test2.py'),
            ('test.pdf@@/main/0', 'test.pdf'),
            ('test.py@@/main/1', 'test.py'),
        ])
    def test_get_or_create_user_with_fullname_without_space(self):
        """Testing LDAPBackend.get_or_create_user with LDAP_FULL_NAME_ATTRIBUTE
        and user whose full name does not contain a space
        """
        user_dn = 'CN=Bob,OU=MyOrg,DC=example,DC=COM'

        self.spy_on(
            TestLDAPObject.search_s,
            owner=TestLDAPObject,
            op=kgb.SpyOpMatchInOrder([
                {
                    'args': ('CN=admin,DC=example,DC=com',
                             ldap.SCOPE_SUBTREE, '(uid=doc)'),
                    'call_fake': lambda *args, **kwargs: [(user_dn, {})],
                },
                {
                    'args': (user_dn, ldap.SCOPE_BASE),
                    'call_fake': lambda *args, **kwargs: [
                        (user_dn, {
                            'fn': [b'Bob'],
                            'email': [b'*****@*****.**'],
                        }),
                    ],
                },
            ]))

        self.assertEqual(User.objects.count(), 0)

        user = self.backend.get_or_create_user(username='******',
                                               request=None)

        self.assertIsNotNone(user)
        self.assertEqual(User.objects.count(), 1)

        self.assertEqual(user.first_name, 'Bob')
        self.assertEqual(user.last_name, '')
        self.assertEqual(user.email, '*****@*****.**')