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')
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, '')
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)
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'), ])
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')
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)
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')}, })
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()
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')
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)
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, '*****@*****.**')