Changeset 21
- Timestamp:
- 2008年07月27日 00时21分26秒 (4 years ago)
- Location:
- trunk
- Files:
-
- 12 modified
-
pysvnmanager/controllers/authz.py (modified) (3 diffs)
-
pysvnmanager/controllers/check.py (modified) (4 diffs)
-
pysvnmanager/controllers/role.py (modified) (1 diff)
-
pysvnmanager/model/auth/http.py (modified) (1 diff)
-
pysvnmanager/model/svnauthz.py (modified) (50 diffs)
-
pysvnmanager/templates/auth_failed.mako (modified) (1 diff)
-
pysvnmanager/tests/functional/test_authz.py (modified) (8 diffs)
-
pysvnmanager/tests/functional/test_check.py (modified) (8 diffs)
-
pysvnmanager/tests/functional/test_login.py (modified) (1 diff)
-
pysvnmanager/tests/functional/test_role.py (modified) (3 diffs)
-
pysvnmanager/tests/test_models.py (modified) (39 diffs)
-
setup.cfg (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/pysvnmanager/controllers/authz.py
r17 r21 15 15 self.reposlist = self.authz.get_manageable_repos_list(self.login_as) 16 16 17 def __auth_failed(self , reposname=None):17 def __auth_failed(self): 18 18 if not self.reposlist: 19 return True20 elif reposname and not reposname in self.reposlist:21 19 return True 22 20 else: … … 38 36 if i == '*' or i =='$authenticated' or i == '$anonymous': 39 37 continue 40 if i[0] == '@': 41 all_avail_users.append([_("Group:")+i[1:], i]) 42 else: 43 all_avail_users.append([i, i]) 38 all_avail_users.append([_("Group:")+i[1:], i]) 44 39 for alias in self.authz.aliaslist: 45 40 i = alias.uname 46 if i[0] == '&': 47 all_avail_users.append([_("Alias:")+i[1:], i]) 48 else: 49 all_avail_users.append([i, i]) 41 all_avail_users.append([_("Alias:")+i[1:], i]) 50 42 for user in self.authz.userlist: 51 43 i = user.uname … … 111 103 reposname = d.get('reposname') 112 104 path = d.get('path') 113 114 105 module = self.authz.get_module(reposname, path) 115 106 if not module: -
trunk/pysvnmanager/controllers/check.py
r17 r21 15 15 self.reposlist = self.authz.get_manageable_repos_list(self.login_as) 16 16 17 def __auth _failed(self, reposname=None):17 def __authz_failed(self): 18 18 if not self.reposlist: 19 return True20 elif reposname and not reposname in self.reposlist:21 19 return True 22 20 else: … … 24 22 25 23 def index(self): 26 if self.__auth _failed():24 if self.__authz_failed(): 27 25 return render('/auth_failed.mako') 28 26 … … 35 33 36 34 def access_map(self): 37 if self.__auth _failed():35 if self.__authz_failed(): 38 36 return render('/auth_failed.mako') 39 37 … … 78 76 79 77 def get_auth_path(self, repos=None, type=None, path=None): 80 if self.__auth _failed():78 if self.__authz_failed(): 81 79 return render('/auth_failed.mako') 82 80 -
trunk/pysvnmanager/controllers/role.py
r19 r21 119 119 msg = unicode(e) 120 120 121 log.info(_( "User %(user)s changed group: %(grp)s. (rev:%(rev)s,%(msg)s)") % \121 log.info(_(u"User %(user)s changed group: %(grp)s. (rev:%(rev)s,%(msg)s)") % \ 122 122 {'user':session.get('user'), 'grp': rolename, 'rev': revision, 'msg': msg} ) 123 123 -
trunk/pysvnmanager/model/auth/http.py
r2 r21 5 5 def htpasswd_login(username, password, config): 6 6 authn_file = getattr(config, 'authn_file', '') 7 try: 8 if authn_file: 9 pwdfile = open(authn_file) 10 for line in pwdfile: 11 user, pwdhash = line.strip().split(':',1) 12 if username == user: 13 if pwdhash == crypt(password, pwdhash[:2]): 14 return True 15 break 16 except: 17 pass 7 8 if authn_file: 9 pwdfile = open(authn_file) 10 for line in pwdfile: 11 user, pwdhash = line.strip().split(':',1) 12 if username == user: 13 if pwdhash == crypt(password, pwdhash[:2]): 14 return True 15 break 18 16 19 17 return False -
trunk/pysvnmanager/model/svnauthz.py
r19 r21 21 21 def _(message): return message 22 22 23 reload(sys) # in Python2.5, method sys.setdefaultencoding23 #reload(sys) # in Python2.5, method sys.setdefaultencoding 24 24 #will be delete after initialize. we need reload it. 25 sys.setdefaultencoding('utf-8')25 #sys.setdefaultencoding('utf-8') 26 26 27 27 RIGHTS_W = 4 … … 40 40 def check_valid_groupname(name): 41 41 if name == '*': 42 return ''42 return 43 43 else: 44 44 if name[0]=='$': … … 48 48 def check_valid_reposname(name): 49 49 if name == '/': 50 return ''50 return 51 51 else: 52 52 bad_chars = r'''^[\.$&@-]|[\\/:]|[*?"'<>|,;%#$]''' … … 54 54 55 55 def check_valid_string(check_str, bad_chars=""): 56 check_str = normalize_user(check_str) 56 57 msg = '' 57 58 if not check_str: … … 62 63 p = re.compile(bad_chars) 63 64 if p.search(check_str): 64 msg = _("Name (%s) contains invalid characters.") % check_str 65 return msg 65 msg = _(u"Name (%s) contains invalid characters.") % check_str 66 67 if msg: 68 raise Exception, msg 66 69 67 70 def normalize_user(name): 68 71 if isinstance(name, basestring): 69 72 name = name.strip() 73 74 if isinstance(name, str): 75 name = unicode(name, 'utf-8') 76 70 77 return name 71 78 … … 76 83 if not name: 77 84 name = '/' 85 86 if isinstance(name, str): 87 name = unicode(name, 'utf-8') 88 78 89 return name 79 90 … … 86 97 elif isinstance(name, basestring) and name[0] != '/': 87 98 name = '/'+name 88 99 100 if isinstance(name, str): 101 name = unicode(name, 'utf-8') 102 89 103 return name 90 104 … … 119 133 120 134 def __init__(self, name): 121 name = n ame.strip()135 name = normalize_user(name) 122 136 123 137 if not name: … … 148 162 obj = obj.username 149 163 elif isinstance(obj, (str, unicode)): 150 obj = obj.strip()164 obj = normalize_user(obj) 151 165 else: 152 166 return False … … 180 194 >>> a.uname 181 195 '&aliasname' 182 >>> str(a)196 >>> unicode(a) 183 197 'aliasname = username' 184 198 >>> user in a … … 186 200 >>> user = User('jiangxin') 187 201 >>> a.user = user 188 >>> str(a)202 >>> unicode(a) 189 203 'aliasname = jiangxin' 190 204 >>> 'JiangXin' in a … … 197 211 True 198 212 >>> a = Alias('admin') 199 >>> str(a)213 >>> unicode(a) 200 214 'admin = ' 201 215 >>> a.username … … 217 231 raise Exception, 'Wrong parameter for userobj.' 218 232 219 aliasname = aliasname.strip() 220 221 if not aliasname: 222 raise Exception, _('Aliasname is not provided.') 223 elif aliasname and aliasname[0]=='&': 224 raise Exception, _('Aliasname should not begin with &.') 225 233 aliasname = normalize_user(aliasname) 234 check_valid_aliasname(aliasname) 226 235 self.__name = aliasname 227 236 self.__userobj = userobj … … 235 244 236 245 def __get_unique_name(self): 237 return '&'+self.__name246 return u'&'+self.__name 238 247 239 248 uname = property(__get_unique_name) … … 243 252 return self.__userobj.name 244 253 else: 245 return ''254 return u'' 246 255 247 256 username = property(__get_username) … … 255 264 256 265 def __str__(self): 257 return "%s = %s" % (self.name, self.username)266 return u"%s = %s" % (self.aliasname, self.username) 258 267 259 268 def __cmp__(self, obj): … … 270 279 obj = obj.uname 271 280 elif isinstance(obj, basestring): 272 obj = obj.strip()281 obj = normalize_user(obj) 273 282 274 283 if not obj: … … 392 401 393 402 def __init__(self, name=''): 394 name = name.strip() 395 396 if not name: 397 raise Exception, _('Group name is not provided.') 398 elif name and name[0]=='@': 399 raise Exception, _('Group name should not begin with @.') 400 403 name = normalize_user(name) 404 check_valid_groupname(name) 401 405 self.name = name 402 406 self.__members = [] … … 404 408 def __get_unique_name(self): 405 409 if self.name[0] != '$' and self.name != '*': 406 return '@'+self.name410 return u'@'+self.name 407 411 else: 408 412 return self.name … … 425 429 def __str__(self): 426 430 if self.name[0] != '$' and self.name != '*': 427 return "%s = %s" % (self.name, ', '.join(sorted(self.membernames)))428 else: 429 return "# Built-in group: %s" % self.name431 return u"%s = %s" % (self.name, ', '.join(sorted(self.membernames))) 432 else: 433 return u"# Built-in group: %s" % self.name 430 434 431 435 def __iter__(self): … … 476 480 if isinstance(member, (str, unicode)): 477 481 for user in member.split(','): 478 if user.strip(): 479 ulist.append(user.strip()) 482 user = normalize_user(user) 483 if user: 484 ulist.append(user) 480 485 elif isinstance(member, (list, tuple)): 481 486 ulist.extend(member) … … 484 489 for user in ulist: 485 490 if isinstance(user, (str, unicode)): 491 user = normalize_user(user) 486 492 if user not in mlist: 487 493 continue … … 513 519 obj = obj.uname 514 520 elif isinstance(obj, (str, unicode)): 515 obj = obj.strip()521 obj = normalize_user(obj) 516 522 else: 517 523 return False … … 566 572 567 573 if autocreate: 568 msg = check_valid_username(name) 569 if msg: 570 raise Exception, msg 574 check_valid_username(name) 571 575 user = User(name) 572 576 self.user_list.append(user) … … 592 596 def get_or_set(self, name, autocreate = True): 593 597 assert isinstance(name, basestring) 594 595 598 name = normalize_user(name) 596 599 … … 604 607 605 608 if autocreate: 606 msg = check_valid_aliasname(name) 607 if msg: 608 raise Exception, msg 609 check_valid_aliasname(name) 609 610 alias = Alias(name) 610 611 self.alias_list.append(alias) … … 615 616 def remove(self, name): 616 617 if isinstance(name, (str, unicode)): 617 alias = self.get(name .strip())618 alias = self.get(name) 618 619 else: 619 620 alias = name … … 625 626 626 627 def __str__(self): 627 buff = "[aliases]\n"628 buff = u"[aliases]\n" 628 629 for alias in sorted(self.alias_list): 629 630 buff += unicode(alias) … … 648 649 def get_or_set(self, name, autocreate = True): 649 650 assert isinstance(name, basestring) 650 651 651 name = normalize_user(name) 652 652 if not name: … … 659 659 660 660 if autocreate: 661 msg = check_valid_groupname(name) 662 if msg: 663 raise Exception, msg 661 check_valid_groupname(name) 664 662 group = Group(name) 665 663 self.group_list.append(group) … … 672 670 name = name.name 673 671 else: 674 name = n ame.strip()672 name = normalize_user(name) 675 673 item = self.get(name) 676 674 if item: … … 811 809 unamelist = map(lambda x: x.uname, self.__rule_list) 812 810 for (user, rights) in rules.items(): 813 user = user.strip()811 user = normalize_user(user) 814 812 815 813 if user in unamelist: … … 936 934 """ 937 935 def __init__(self, name): 938 name = n ame.strip()936 name = normalize_repos(name) 939 937 self.__repos_name = name 940 938 self.__admins = [] 941 939 self.module_list = [] 942 self.authz = ''943 940 944 941 def __iter__(self): … … 950 947 951 948 def __set_name(self, name): 952 self.__repos_name = n ame.strip()949 self.__repos_name = normalize_repos(name) 953 950 954 951 name = property(__get_name, __set_name) … … 1064 1061 1065 1062 if autocreate: 1066 msg = check_valid_reposname(name) 1067 if msg: 1068 raise Exception, msg 1063 check_valid_reposname(name) 1069 1064 repos = Repos(name) 1070 1065 self.repos_list.append(repos) … … 1181 1176 else: 1182 1177 rev = 0 1183 self.__version = "%s.%d" % (major, rev)1178 self.__version = u"%s.%d" % (major, rev) 1184 1179 1185 1180 def modulelist(self): … … 1236 1231 f = self.__file 1237 1232 f.truncate(0) 1238 f.write(unicode(self) )1233 f.write(unicode(self).encode('utf-8')) 1239 1234 if isinstance(self.__file, (basestring)): 1240 1235 f.close() … … 1244 1239 1245 1240 def __str__(self): 1246 buff = ""1241 buff = u"" 1247 1242 buff += self.compose_version() 1248 1243 buff += self.compose_acl() … … 1269 1264 path = section 1270 1265 1271 reposname = reposname.strip()1272 path = path.strip()1266 reposname = normalize_repos(reposname) 1267 path = normalize_path(path) 1273 1268 1274 1269 self.add_rules(reposname, path, contents, force=True) … … 1276 1271 def parse_aliases(self, aliases): 1277 1272 for (name, username) in aliases.items(): 1278 name = n ame.strip()1279 username = username.strip()1273 name = normalize_user(name) 1274 username = normalize_user(username) 1280 1275 self.add_alias(name, username) 1281 1276 … … 1287 1282 i = pattern.search(acl) 1288 1283 if i: 1289 name = i.group(1).strip()1290 admin = i.group(2).strip()1284 name = normalize_repos(i.group(1)) 1285 admin = normalize_user(i.group(2)) 1291 1286 if name and admin: 1292 1287 repos = self.__reposlist.get_or_set(name) … … 1339 1334 admins = repos.admins 1340 1335 if admins: 1341 buff += "# admin : %s = %s\n" % (repos.name, admins)1336 buff += u"# admin : %s = %s\n" % (repos.name, admins) 1342 1337 return buff 1343 1338 … … 1347 1342 elif isinstance(user, Alias): 1348 1343 user = user.username 1344 elif isinstance(user, basestring): 1345 user = normalize_user(user) 1349 1346 elif not user: 1350 1347 return False … … 1357 1354 admins = repos.admins 1358 1355 for i in admins.split(','): 1359 if i: i = i.strip()1356 if i: i = normalize_user(i) 1360 1357 1361 1358 if not i: continue … … 1546 1543 if isinstance(members, (str, unicode)): 1547 1544 for user in members.split(','): 1548 user = user.strip()1545 user = normalize_user(user) 1549 1546 if user: 1550 1547 ulist.append(user) … … 1581 1578 1582 1579 def del_alias(self, name, force=False): 1583 name = name.strip()1584 1585 1580 alias = self.__aliaslist.get(name) 1586 1581 if not alias: … … 1624 1619 def check_rights(self, user, repos, path, required): 1625 1620 if isinstance(user, (str, unicode)): 1626 user = user.strip()1621 user = normalize_user(user) 1627 1622 if isinstance(repos, (str, unicode)): 1628 repos = repos.strip()1623 repos = normalize_repos(repos) 1629 1624 if isinstance(path, (str, unicode)): 1630 path = path.strip().rstrip('/')1625 path = normalize_path(path) 1631 1626 1632 1627 if isinstance(required, (str, unicode)): … … 1683 1678 def get_access_map(self, user=None, reposname='/', descend=True): 1684 1679 if isinstance(user, (str, unicode)): 1685 user = user.strip()1680 user = normalize_user(user) 1686 1681 if not user: 1687 1682 user = '*' … … 1718 1713 def get_path_access_msgs(self, user, reposname, path, abbr=False): 1719 1714 if isinstance(user, (str, unicode)): 1720 user = user.strip()1715 user = normalize_user(user) 1721 1716 if not user: 1722 1717 user = '*' … … 1754 1749 def get_access_map_msgs(self, user='*', reposname=None, abbr=False): 1755 1750 if isinstance(user, (str, unicode)): 1756 user = user.strip()1751 user = normalize_user(user) 1757 1752 if not user: 1758 1753 user = '*' -
trunk/pysvnmanager/templates/auth_failed.mako
r2 r21 1 1 ## -*- coding: utf-8 -*- 2 <%inherit file="/base.mako" /> 3 2 <h2> 4 3 ${_("Permission denied.")} 4 </h2> -
trunk/pysvnmanager/tests/functional/test_authz.py
r16 r21 1 ## -*- coding: utf-8 -*- 2 1 3 from pysvnmanager.tests import * 2 4 from pysvnmanager.controllers import authz … … 30 32 31 33 def test_init_repos_list(self): 34 # authn test 35 res = self.app.get(url_for(controller='authz', action='init_repos_list')) 36 assert res.status == 302 37 self.assertEqual(res.header('location'), '/security') 38 39 # authz test 40 self.login('nobody') 41 res = self.app.get(url_for(controller='authz', action='init_repos_list')) 42 assert res.status == 200, res.status 43 self.assert_('Permission denied.' in res.body, res.body) 44 32 45 # Login as superuser 33 46 self.login('root') … … 45 58 46 59 def test_repos_changed(self): 60 # authn test 61 res = self.app.get(url_for(controller='authz', action='repos_changed')) 62 assert res.status == 302 63 self.assertEqual(res.header('location'), '/security') 64 65 # authz test 66 self.login('nobody') 67 res = self.app.get(url_for(controller='authz', action='repos_changed')) 68 assert res.status == 200, res.status 69 self.assert_('Permission denied.' in res.body, res.body) 70 47 71 # Login as superuser 48 72 self.login('root') … … 73 97 ''' == res.body, res.body 74 98 75 def test_delete_admin(self): 99 def test_path_changed(self): 100 params={} 101 # authn test 102 res = self.app.get(url_for(controller='authz', action='path_changed')) 103 assert res.status == 302 104 self.assertEqual(res.header('location'), '/security') 105 106 # authz test 107 self.login('nobody') 108 res = self.app.get(url_for(controller='authz', action='path_changed')) 109 assert res.status == 200, res.status 110 self.assert_('Permission denied.' in res.body, res.body) 111 112 self.login('root') 113 params = {'reposname':'/', 'path':u'/tags//'} 114 res = self.app.get(url_for(controller='authz', action='path_changed'), params) 115 assert res.status == 200 116 assert '''user[0]="&pm"; 117 rights[0]="rw"; 118 user[1]="$authenticated"; 119 rights[1]="r"; 120 total=2; 121 revision="0.2.1"; 122 ''' == res.body, res.body 123 124 self.login('root') 125 params = {'reposname':'document', 'path':'/trunk/商务部'} 126 res = self.app.get(url_for(controller='authz', action='path_changed'), params) 127 assert res.status == 200 128 assert '''user[0]="*"; 129 rights[0]=""; 130 user[1]="@admin"; 131 rights[1]="rw"; 132 user[2]="@biz"; 133 rights[2]="rw"; 134 total=3; 135 revision="0.2.1"; 136 ''' == res.body, res.body 137 138 self.login('root') 139 params = {'reposname':'/', 'path':'/noexist'} 140 res = self.app.get(url_for(controller='authz', action='path_changed'), params) 141 assert res.status == 200 142 assert '' == res.body, res.body 143 144 145 def test_save_authz(self): 146 # authn test 147 res = self.app.get(url_for(controller='authz', action='save_authz')) 148 assert res.status == 302 149 self.assertEqual(res.header('location'), '/security') 150 151 # authz test 152 self.login('nobody') 153 res = self.app.get(url_for(controller='authz', action='save_authz')) 154 assert res.status == 200, res.status 155 self.assert_('Permission denied.' in res.body, res.body) 156 76 157 # Login as superuser 77 158 self.login('root') … … 95 176 self.rollback() 96 177 178 self.login('jiangxin') 97 179 params = {'reposname':'/', 'admins':'root'} 98 180 res = self.app.get(url_for(controller='authz', action='save_authz'), params) … … 101 183 self.rollback() 102 184 103 104 105 106 185 self.login('root') 107 186 params = {'reposname':'/repos1', 'admins':'user1'} 108 187 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 109 #assert res.status == 200110 #assert "" == res.body, res.body188 assert res.status == 200 189 assert "" == res.body, res.body 111 190 self.rollback() 112 191 … … 114 193 params = {'reposname':'/repos1', 'admins':'user1, root'} 115 194 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 116 #assert res.status == 200117 #assert "" == res.body, res.body195 assert res.status == 200 196 assert "" == res.body, res.body 118 197 self.rollback() 119 198 … … 121 200 params = {'reposname':'/repos1', 'admins':'user1, root'} 122 201 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 123 #assert res.status == 200124 #assert "You can not delete yourself from admin list." == res.body, res.body202 assert res.status == 200 203 assert "You can not delete yourself from admin list." == res.body, res.body 125 204 126 205 self.login('admin1') 127 206 params = {'reposname':'/repos1', 'admins':'admin1, admin2'} 128 207 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 129 #assert res.status == 200 130 #assert "" == res.body, res.body 131 self.rollback() 132 133 134 def test_save_authz(self): 135 pass 208 assert res.status == 200 209 assert "" == res.body, res.body 210 self.rollback() 136 211 137 212 def test_delete_authz(self): 138 pass 139 213 # authn test 214 res = self.app.get(url_for(controller='authz', action='delete_authz')) 215 assert res.status == 302 216 self.assertEqual(res.header('location'), '/security') 217 218 # authz test 219 self.login('nobody') 220 res = self.app.get(url_for(controller='authz', action='delete_authz')) 221 assert res.status == 200, res.status 222 self.assert_('Permission denied.' in res.body, res.body) -
trunk/pysvnmanager/tests/functional/test_check.py
r17 r21 1 ## -*- coding: utf-8 -*- 2 1 3 from pysvnmanager.tests import * 2 4 from pysvnmanager.controllers import check … … 34 36 35 37 36 def test_path_authz(self): 38 def test_access_map(self): 39 # authn test 40 res = self.app.get(url_for(controller='check', action='access_map')) 41 assert res.status == 302 42 self.assertEqual(res.header('location'), '/security') 43 44 # authz test 45 self.login('nobody') 46 res = self.app.get(url_for(controller='check', action='access_map')) 47 assert res.status == 200, res.status 48 self.assert_('Permission denied.' in res.body, res.body) 49 37 50 # Login as superuser 38 51 self.login('root') … … 42 55 'reposinput':'select', 43 56 'reposselector':'///repos1', 44 'pathinput':' manual',45 'path name':'/trunk/src/test',57 'pathinput':'select', 58 'pathselector':'/trunk/src/test', 46 59 'abbr':'True', 47 60 } … … 50 63 assert '''<div id='acl_path_msg'>[repos1:/trunk/src/test] user1 =</div>''' in res.body, res.body 51 64 65 params['userinput'] = 'select' 66 params['reposinput'] = 'select' 67 params['pathinput'] = 'select' 52 68 params['userselector'] = 'user1' 53 69 params['reposselector'] = 'reposX' 54 params['path name'] = '/trunk/src/test'70 params['pathselector'] = '/trunk/src/test' 55 71 res = self.app.get(url_for(controller='check', action='access_map'), params) 56 72 assert '''<div id='acl_path_msg'>[reposX:/trunk/src/test] user1 = r</div>''' in res.body, res.body 57 73 58 params['userselector'] = 'user2' 59 params['reposselector'] = 'repos1' 74 params['userinput'] = 'manual' 75 params['reposinput'] = 'manual' 76 params['pathinput'] = 'manual' 77 params['username'] = 'user2' 78 params['reposname'] = 'repos1' 60 79 params['pathname'] = '/trunk/src/test' 61 80 res = self.app.get(url_for(controller='check', action='access_map'), params) 62 81 assert '''<div id='acl_path_msg'>[repos1:/trunk/src/test] user2 = r</div>''' in res.body, res.body 63 82 83 params['userinput'] = 'select' 84 params['reposinput'] = 'select' 85 params['pathinput'] = 'manual' 64 86 params['userselector'] = 'user2' 65 87 params['reposselector'] = 'reposX' … … 68 90 assert '''<div id='acl_path_msg'>[reposX:/trunk] user2 =</div>''' in res.body, res.body 69 91 92 params['userinput'] = 'select' 93 params['reposinput'] = 'select' 94 params['pathinput'] = 'select' 70 95 params['userselector'] = 'user3' 71 96 params['reposselector'] = 'repos1' 72 params['path name'] = '/trunk'97 params['pathselector'] = '/trunk' 73 98 res = self.app.get(url_for(controller='check', action='access_map'), params) 74 99 assert '''<div id='acl_path_msg'>[repos1:/trunk] user3 =</div>''' in res.body, res.body … … 76 101 params['userselector'] = 'user4' 77 102 params['reposselector'] = 'repos1' 78 params['path name'] = '/trunk'103 params['pathselector'] = '/trunk' 79 104 res = self.app.get(url_for(controller='check', action='access_map'), params) 80 105 assert '''<div id='acl_path_msg'>[repos1:/trunk] user4 = r</div>''' in res.body, res.body … … 82 107 params['userselector'] = 'user4' 83 108 params['reposselector'] = 'reposX' 84 params['path name'] = '/trunk'109 params['pathselector'] = '/trunk' 85 110 res = self.app.get(url_for(controller='check', action='access_map'), params) 86 111 assert '''<div id='acl_path_msg'>[reposX:/trunk] user4 = r</div>''' in res.body, res.body … … 88 113 params['userselector'] = 'user5' 89 114 params['reposselector'] = 'reposX' 90 params['path name'] = '/trunk'115 params['pathselector'] = '/trunk' 91 116 res = self.app.get(url_for(controller='check', action='access_map'), params) 92 117 assert '''<div id='acl_path_msg'>[reposX:/trunk] user5 =</div>''' in res.body, res.body 93 118 94 119 95 def test_a ccess_map(self):96 # Test redirect to login pange97 res = self.app.get(url_for(controller='check', action=' access_map'))120 def test_authz_path(self): 121 # authn test 122 res = self.app.get(url_for(controller='check', action='get_auth_path')) 98 123 assert res.status == 302 99 124 self.assertEqual(res.header('location'), '/security') 100 125 101 # Login as common user126 # authz test 102 127 self.login('nobody') 103 res = self.app.get(url_for(controller='check', action='access_map')) 128 res = self.app.get(url_for(controller='check', action='get_auth_path')) 129 assert res.status == 200, res.status 130 self.assert_('Permission denied.' in res.body, res.body) 131 132 self.login('root') 133 params = {} 134 params['repos'] = '/' 135 res = self.app.get(url_for(controller='check', action='get_auth_path'), params) 104 136 assert res.status == 200 105 assert 'Permission denied.' in res.body, res.body 137 assert '''id[0]="...";name[0]="Please choose..."; 138 id[1]="/trunk/src";name[1]="/trunk/src"; 139 id[2]="/trunk";name[2]="/trunk"; 140 id[3]="/";name[3]="/"; 141 id[4]="/tags";name[4]="/tags"; 142 id[5]="/branches";name[5]="/branches"; 143 total=6; 144 ''' == res.body, res.body 106 145 107 # Login as common user 108 self.login('admin1') 109 res = self.app.get(url_for(controller='check', action='access_map')) 146 params['repos'] = 'noexist' 147 res = self.app.get(url_for(controller='check', action='get_auth_path'), params) 110 148 assert res.status == 200 111 assert 'Permission denied.' == res.body, res.body 112 113 params = { 114 'userinput':'select', 115 'userselector':'user1', 116 'reposinput':'select', 117 'reposselector':'repos1', 118 'pathinput':'manual', 119 'pathname':'/trunk/src/test', 120 'abbr':'True', 121 } 122 res = self.app.get(url_for(controller='check', action='access_map'), params) 149 assert '' == res.body, res.body 150 151 params['repos'] = 'repos1' 152 res = self.app.get(url_for(controller='check', action='get_auth_path'), params) 123 153 assert res.status == 200 124 assert '''<div id='acl_path_msg'>[repos1:/trunk/src/test] user1 =</div>''' in res.body, res.body 154 assert '''id[0]="...";name[0]="Please choose..."; 155 id[1]="/trunk/src";name[1]="/trunk/src"; 156 id[2]="/trunk";name[2]="/trunk"; 157 id[3]="/";name[3]="/"; 158 total=4; 159 ''' == res.body, res.body 125 160 126 params['reposselector'] = 'reposX' 127 res = self.app.get(url_for(controller='check', action='access_map'), params) 128 assert 'Permission denied.' == res.body, res.body 161 params['repos'] = 'document' 162 res = self.app.get(url_for(controller='check', action='get_auth_path'), params) 163 assert res.status == 200 164 assert u'''id[0]="...";name[0]="Please choose..."; 165 id[1]="/branches";name[1]="/branches"; 166 id[2]="/tags";name[2]="/tags"; 167 id[3]="/trunk/.htgroup";name[3]="/trunk/.htgroup"; 168 id[4]="/trunk/tech";name[4]="/trunk/tech"; 169 id[5]="/trunk/tech/.htaccess";name[5]="/trunk/tech/.htaccess"; 170 id[6]="/trunk/商务部";name[6]="/trunk/商务部"; 171 id[7]="/trunk/商务部/.htaccess";name[7]="/trunk/商务部/.htaccess"; 172 id[8]="/trunk/行政部";name[8]="/trunk/行政部"; 173 id[9]="/trunk/行政部/.htaccess";name[9]="/trunk/行政部/.htaccess"; 174 total=10; 175 ''' == unicode(res.body, 'utf-8'), res.body -
trunk/pysvnmanager/tests/functional/test_login.py
r4 r21 1 ## -*- coding: utf-8 -*- 2 1 3 from pysvnmanager.tests import * 4 from pylons import config 2 5 3 6 class TestLoginController(TestController): 4 7 5 def test_index(self): 6 response = self.app.get(url_for(controller='login')) 7 # Test response... 8 def test_login_logout(self): 9 params={} 10 # login successful 11 params['username'] = 'root' 12 d = eval(config.get('test_users', {})) 13 password = d.get(params['username'],'') 14 params['password'] = password 15 res = self.app.get(url_for(controller='security', action='submit'), params) 16 self.assert_(res.status == 302) 17 self.assert_(res.all_headers('location') == ['/check']) 18 self.assert_(res.session['user'] == 'root', res.session) 19 20 # keep session test 21 res = self.app.get(url_for(controller='security', action='index')) 22 self.assert_('<h2>Login</h2>' in res.body, res.body) 23 self.assert_(res.session['user'] == 'root', res.session) 24 25 # login with wrong password 26 params['username'] = 'root' 27 params['password'] = 'wrong_passwd' 28 res = self.app.get(url_for(controller='security', action='submit'), params) 29 self.assert_(res.status == 200, res.status) 30 self.assert_('Login failed for user: root' in res.body, res.body) 31 self.assert_(res.session.get('user') == None, res.session.get('user')) 32 33 self.login('jiangxin') 34 res = self.app.get(url_for(controller='security', action='index')) 35 self.assert_(res.session.get('user') == 'jiangxin', res.session) 36 37 # logout 38 res = self.app.get(url_for(controller='security', action='logout')) 39 self.assert_(res.status == 302) 40 self.assert_(res.all_headers('location') == ['/security']) 41 self.assert_(res.session.get('user') == None, res.session.get('user')) -
trunk/pysvnmanager/tests/functional/test_role.py
r16 r21 1 ## -*- coding: utf-8 -*- 2 1 3 from pysvnmanager.tests import * 2 4 from pysvnmanager.controllers import role … … 29 31 30 32 def test_get_role_info(self): 33 # authn test 34 res = self.app.get(url_for(controller='role', action='get_role_info')) 35 assert res.status == 302 36 self.assertEqual(res.header('location'), '/security') 37 38 # authz test 39 self.login('nobody') 40 res = self.app.get(url_for(controller='role', action='get_role_info')) 41 assert res.status == 200, res.status 42 self.assert_('Permission denied.' in res.body, res.body) 43 31 44 # Login as superuser 32 45 self.login('root') … … 81 94 82 95 def test_save_group(self): 83 pass 96 # authn test 97 res = self.app.get(url_for(controller='role', action='save_group')) 98 assert res.status == 302 99 self.assertEqual(res.header('location'), '/security') 100 101 # authz test 102 self.login('nobody') 103 res = self.app.get(url_for(controller='role', action='save_group')) 104 assert res.status == 200, res.status 105 self.assert_('Permission denied.' in res.body, res.body) 84 106 85 107 def test_delete_group(self): 86 pass 108 # authn test 109 res = self.app.get(url_for(controller='role', action='delete_group')) 110 assert res.status == 302 111 self.assertEqual(res.header('location'), '/security') 112 113 # authz test 114 self.login('nobody') 115 res = self.app.get(url_for(controller='role', action='delete_group')) 116 assert res.status == 200, res.status 117 self.assert_('Permission denied.' in res.body, res.body) 87 118 88 119 def test_save_alias(self): 89 pass 120 # authn test 121 res = self.app.get(url_for(controller='role', action='save_alias')) 122 assert res.status == 302 123 self.assertEqual(res.header('location'), '/security') 124 125 # authz test 126 self.login('nobody') 127 res = self.app.get(url_for(controller='role', action='save_alias')) 128 assert res.status == 200, res.status 129 self.assert_('Permission denied.' in res.body, res.body) 90 130 91 131 def test_delete_alias(self): 92 pass 132 # authn test 133 res = self.app.get(url_for(controller='role', action='delete_alias')) 134 assert res.status == 302 135 self.assertEqual(res.header('location'), '/security') 93 136 137 # authz test 138 self.login('nobody') 139 res = self.app.get(url_for(controller='role', action='delete_alias')) 140 assert res.status == 200, res.status 141 self.assert_('Permission denied.' in res.body, res.body) -
trunk/pysvnmanager/tests/test_models.py
r19 r21 28 28 # admin : repos3 = admin3 29 29 # admin : reposx = 30 # admin : 版本库1 = @管理组1 30 31 31 32 [groups] … … 39 40 team3=user3,user33,@team1 40 41 all=@team1,user3,user4 42 组1=&别名1, 用户2 43 管理组1=&别名1, 蒋鑫 41 44 42 45 [aliases] 43 46 admin=jiangxin 44 47 007=james 48 别名1=用户1 45 49 46 50 [repos1:/trunk/src] … … 75 79 @all = r 76 80 @admins = rw 81 82 [版本库1:/] 83 * = 84 @管理组1 = rw 85 86 [版本库1:/项目1] 87 * = 88 @组1 = rw 89 用户3 = r 77 90 ''' 78 91 assert(self.f.tell()==0) … … 86 99 def testUser(self): 87 100 user1 = User('Tom') 88 self.assert_( str(user1) == 'Tom')101 self.assert_(unicode(user1) == 'Tom') 89 102 self.assertRaises(Exception, User, "") 90 103 user2 = User('Jerry') … … 105 118 alias1=Alias('admin') 106 119 alias1.user = user1 107 self.assert_( str(alias1) == 'admin = Tom', str(alias1))120 self.assert_(unicode(alias1) == 'admin = Tom', unicode(alias1)) 108 121 alias2=Alias('manager', user1) 109 self.assert_( str(alias2) == 'manager = Tom', str(alias1))122 self.assert_(unicode(alias2) == 'manager = Tom', unicode(alias1)) 110 123 111 124 self.assert_('&Manager' in alias2) … … 146 159 147 160 group1.append([group2, alias]) 148 self.assert_( str(group1) == 'team1 = &admin, @team2, user1, user2', str(group1))161 self.assert_(unicode(group1) == 'team1 = &admin, @team2, user1, user2', unicode(group1)) 149 162 self.assert_([m.uname for m in group1] == ['user1', 'user2', '@team2', '&admin'], [m.uname for m in group1]) 150 163 … … 186 199 187 200 g = Group('$authenticated') 188 self.assert_( str(g) == "# Built-in group: $authenticated")201 self.assert_(unicode(g) == "# Built-in group: $authenticated") 189 202 190 203 def testIsValidName(self): 191 self.assert _(check_valid_username('蒋,鑫')=="Name (蒋,鑫) contains invalid characters.")192 self.assert _(check_valid_username('jiang;xin')=="Name (jiang;xin) contains invalid characters.")193 self.assert _(check_valid_username('')=="Name is not given.", check_valid_username(''))194 self.assert _(check_valid_username(User('user'))=="Name is not string.")195 self.assert _(check_valid_reposname('my/repos')=="Name (my/repos) contains invalid characters.")196 self.assert_(check_valid_reposname('/')=="")204 self.assertRaises(Exception, check_valid_username, '蒋,鑫') 205 self.assertRaises(Exception, check_valid_username, 'jiang;xin') 206 self.assertRaises(Exception, check_valid_username, '') 207 self.assertRaises(Exception, check_valid_username, User('user')) 208 self.assertRaises(Exception, check_valid_reposname, 'my/repos') 209 check_valid_reposname('/') 197 210 198 211 def testUserList(self): … … 232 245 self.assert_([a.uname for a in alist] == ['&admin', '&root'], [a.uname for a in alist]) 233 246 234 self.assert_( str(alist)=="[aliases]\nadmin = \nroot = \n", repr(str(alist)))247 self.assert_(unicode(alist)=="[aliases]\nadmin = \nroot = \n", repr(unicode(alist))) 235 248 236 249 self.assert_(alist.get_or_set('')==None) … … 269 282 self.assert_([g.uname for g in glist] == ['@team1', '@team2'], [g.uname for g in glist]) 270 283 271 self.assert_( str(glist)=="[groups]\nteam1 = @team2, user1\nteam2 = &admin, user2\n", repr(str(glist)))284 self.assert_(unicode(glist)=="[groups]\nteam1 = @team2, user1\nteam2 = &admin, user2\n", repr(unicode(glist))) 272 285 273 286 self.assert_(glist.get_or_set('')==None) … … 282 295 self.assertRaises(Exception, glist.remove, '@team2') 283 296 self.assertRaises(Exception, glist.remove, g2) 284 self.assert_( str(glist)=='[groups]\nteam1 = @team2, user1\nteam2 = &admin, user2\n', repr(str(glist)))297 self.assert_(unicode(glist)=='[groups]\nteam1 = @team2, user1\nteam2 = &admin, user2\n', repr(unicode(glist))) 285 298 glist.remove('@team2',force=True) 286 299 glist.remove('notexist') 287 self.assert_( str(glist)=="[groups]\nteam1 = user1\n", repr(str(glist)))300 self.assert_(unicode(glist)=="[groups]\nteam1 = user1\n", repr(unicode(glist))) 288 301 289 302 def testRules(self): … … 302 315 rule1.rights = RIGHTS_ALL 303 316 self.assert_(rule1.rights == RIGHTS_R|RIGHTS_W) 304 self.assert_( str(rule1)=='@group1 = rw', repr(str(rule1)))317 self.assert_(unicode(rule1)=='@group1 = rw', repr(unicode(rule1))) 305 318 self.assert_(rule1.get_permission(group1) == (RIGHTS_ALL, RIGHTS_NONE)) 306 319 self.assert_(rule1.get_permission(user1) == (RIGHTS_ALL, RIGHTS_NONE)) … … 313 326 rulelist = [rule1, rule0] 314 327 rulelist.append('@choose...') 315 self.assert_([ str(r) for r in rulelist]==['@group1 = rw', '@group0 = ', '@choose...'], [str(r) for r in rulelist])316 self.assert_([ str(r) for r in sorted(rulelist)]==['@group0 = ', '@group1 = rw', '@choose...'], [str(r) for r in sorted(rulelist)])328 self.assert_([unicode(r) for r in rulelist]==['@group1 = rw', '@group0 = ', '@choose...'], [unicode(r) for r in rulelist]) 329 self.assert_([unicode(r) for r in sorted(rulelist)]==['@group0 = ', '@group1 = rw', '@choose...'], [unicode(r) for r in sorted(rulelist)]) 317 330 318 331 … … 321 334 self.assert_(module.path == '/trunk') 322 335 self.assert_(module.fullname == '/:/trunk') 323 self.assert_( str(module)=='')336 self.assert_(unicode(module)=='') 324 337 325 338 obj = Group('* ') … … 333 346 obj = Group(' $authenticated ') 334 347 module.update_rule(obj, 'r') 335 self.assert_( str(module) ==348 self.assert_(unicode(module) == 336 349 '''[/trunk] 337 350 $authenticated = r … … 339 352 @admins = rw 340 353 jiang = 341 ''', repr( str(module)))342 self.assert_([ str(r) for r in module]==['* = r', '@admins = rw', 'jiang = ', '$authenticated = r'], [str(r) for r in module])343 self.assert_([ str(r) for r in module.rules]==['* = r', '@admins = rw', 'jiang = ', '$authenticated = r'], [str(r) for r in module.rules])354 ''', repr(unicode(module))) 355 self.assert_([unicode(r) for r in module]==['* = r', '@admins = rw', 'jiang = ', '$authenticated = r'], [unicode(r) for r in module]) 356 self.assert_([unicode(r) for r in module.rules]==['* = r', '@admins = rw', 'jiang = ', '$authenticated = r'], [unicode(r) for r in module.rules]) 344 357 345 358 module.del_rule('@admins= rw') 346 self.assert_([ str(r) for r in module]==['* = r', 'jiang = ', '$authenticated = r'], [str(r) for r in module])359 self.assert_([unicode(r) for r in module]==['* = r', 'jiang = ', '$authenticated = r'], [unicode(r) for r in module]) 347 360 348 361 module = Module('myrepos', '') … … 357 370 groupauth = Group('$authenticated') 358 371 module.update_rule(groupauth,'r') 359 self.assert_( str(module) == '''[myrepos:/]372 self.assert_(unicode(module) == '''[myrepos:/] 360 373 $authenticated = r 361 374 * = 362 375 @team1 = rw 363 376 jiang = 364 ''', repr( str(module)))377 ''', repr(unicode(module))) 365 378 self.assert_(module.get_permit_bits(user1)==(RIGHTS_R, RIGHTS_ALL),module.get_permit_bits(user1)) 366 379 self.assert_(module.get_permit_str(user1)=='r',module.get_permit_str(user1)) … … 378 391 379 392 module.clean_rules() 380 self.assert_([ str(r) for r in module]==[], [str(r) for r in module])393 self.assert_([unicode(r) for r in module]==[], [unicode(r) for r in module]) 381 394 382 395 self.assert_(Module('repos1', '/trunk')>Module('repos0', '/trunk')) … … 428 441 mod2.update_rule(alias1,'rw') 429 442 430 self.assert_( str(repos1)=='[repos1:/tags]\n&alias1 = rw\n\n[repos1:/trunk]\nuser1 = r\n\n', repr(str(repos1)))443 self.assert_(unicode(repos1)=='[repos1:/tags]\n&alias1 = rw\n\n[repos1:/trunk]\nuser1 = r\n\n', repr(unicode(repos1))) 431 444 432 445 repos1.del_all_modules() … … 461 474 self.assertRaises(Exception, rlist.get_or_set, 'wrong/repos') 462 475 463 self.assert_( str(rlist)=='[repos2:/trunk]\nuser1 = r\n\n', repr(str(rlist)))476 self.assert_(unicode(rlist)=='[repos2:/trunk]\nuser1 = r\n\n', repr(unicode(rlist))) 464 477 465 478 self.assert_([r.name for r in rlist] == ['/', 'repos1', 'repos2'], [r.name for r in rlist]) … … 486 499 admin = authz.add_alias('admin', 'u1') 487 500 team1 = authz.add_group('team1') 488 self.assert_( str(team1)=='team1 = ', str(team1))501 self.assert_(unicode(team1)=='team1 = ', unicode(team1)) 489 502 team1 = authz.set_group('team1', None) 490 self.assert_( str(team1)=='team1 = ', str(team1))503 self.assert_(unicode(team1)=='team1 = ', unicode(team1)) 491 504 team1 = authz.set_group('team1', 'u2, u3') 492 self.assert_( str(team1)=='team1 = u2, u3', str(team1))505 self.assert_(unicode(team1)=='team1 = u2, u3', unicode(team1)) 493 506 team1 = authz.add_group_member('team1', u4) 494 self.assert_( str(team1)=='team1 = u2, u3, u4', str(team1))507 self.assert_(unicode(team1)=='team1 = u2, u3, u4', unicode(team1)) 495 508 repos1 = authz.add_repos('repos1') 496 509 … … 522 535 self.assert_(rl.get('repos2').admins == 'admin2', rl.get('repos2').admins) 523 536 self.assert_(self.authz.compose_acl() == 524 '''# admin : / = &admin, root537 u'''# admin : / = &admin, root 525 538 # admin : repos1 = @admin 526 539 # admin : repos2 = admin2 527 540 # admin : repos3 = admin3 528 ''', self.authz.compose_acl()) 541 # admin : 版本库1 = @管理组1 542 ''', repr(self.authz.compose_acl())) 529 543 pass 530 544 531 545 def testAuthzConfAliases(self): 532 546 al = self.authz.aliaslist 533 self.assert_(al.get('admin').username == 'jiangxin', str(al.get('admin')))534 self.assert_( str(al) == '[aliases]\n007 = james\nadmin = jiangxin\n', repr(str(al)))547 self.assert_(al.get('admin').username == 'jiangxin', unicode(al.get('admin'))) 548 self.assert_(unicode(al) == u'[aliases]\n007 = james\nadmin = jiangxin\n别名1 = 用户1\n', repr(unicode(al))) 535 549 pass 536 550 … … 545 559 ['@team1', 'user3', 'user4'], 546 560 sorted(gl.get('all').membernames)) 547 self.assert_( str(gl) ==548 '''[groups]561 self.assert_(unicode(gl) == 562 u'''[groups] 549 563 admin = &admin, admin1, admin2, admin3 550 564 admins = &007, &admin … … 553 567 team2 = @team3, user2, user22 554 568 team3 = user3, user33 555 ''', repr(str(gl))) 569 管理组1 = &别名1, 蒋鑫 570 组1 = &别名1, 用户2 571 ''', repr(unicode(gl))) 556 572 557 573 … … 622 638 self.assert_(isinstance(self.authz.add_alias('superuser', user), Alias)) 623 639 self.assert_(isinstance(self.authz.add_alias('root', user), Alias)) 624 self.assert_( str(self.authz.aliaslist) == '[aliases]\nroot = jiangxin\nsuperuser = jiangxin\n', repr(str(self.authz.aliaslist)))640 self.assert_(unicode(self.authz.aliaslist) == '[aliases]\nroot = jiangxin\nsuperuser = jiangxin\n', repr(unicode(self.authz.aliaslist))) 625 641 self.assert_(','.join(map(lambda x:x.name, self.authz.aliaslist)) == 626 642 'superuser,root', ','.join(map(lambda x:x.name, … … 628 644 629 645 # add_group 630 self.assert_( str(self.authz.grouplist) == '[groups]\n', repr(str(self.authz.grouplist)))646 self.assert_(unicode(self.authz.grouplist) == '[groups]\n', repr(unicode(self.authz.grouplist))) 631 647 self.assert_(isinstance(self.authz.add_group('myteam','user1'), Group)) 632 self.assert_( str(self.authz.grouplist) == '[groups]\nmyteam = user1\n', repr(str(self.authz.grouplist)))648 self.assert_(unicode(self.authz.grouplist) == '[groups]\nmyteam = user1\n', repr(unicode(self.authz.grouplist))) 633 649 self.assert_(isinstance(self.authz.add_group_member('myteam','user2,user3'), Group)) 634 650 self.assert_(isinstance(self.authz.add_group_member('myteam','user2,user3'), Group)) 635 self.assert_( str(self.authz.grouplist) == '[groups]\nmyteam = user1, user2, user3\n', repr(str(self.authz.grouplist)))651 self.assert_(unicode(self.authz.grouplist) == '[groups]\nmyteam = user1, user2, user3\n', repr(unicode(self.authz.grouplist))) 636 652 self.assert_(','.join(map(lambda x:x.name, self.authz.grouplist)) == 637 653 'myteam', ','.join(map(lambda x:x.name, … … 643 659 self.assert_(isinstance(self.authz.add_group_member('team4','@myteam'),Group)) 644 660 self.assertRaises(Exception, self.authz.add_group_member, 'myteam','@team3, @team4, @team5') 645 self.assert_( str(self.authz.grouplist.get('@myteam')) ==661 self.assert_(unicode(self.authz.grouplist.get('@myteam')) == 646 662 'myteam = $authenticated, *, @team1, @team2, user1, user2, user3', 647 repr( str(self.authz.grouplist.get('@myteam'))))663 repr(unicode(self.authz.grouplist.get('@myteam')))) 648 664 self.assert_(isinstance(self.authz.add_group_member('myteam','@team3, @team4, @team5', True),Group)) 649 self.assert_( str(self.authz.grouplist.get('@myteam')) ==665 self.assert_(unicode(self.authz.grouplist.get('@myteam')) == 650 666 'myteam = $authenticated, *, @team1, @team2, @team5, user1, user2, user3', 651 repr( str(self.authz.grouplist.get('@myteam'))))667 repr(unicode(self.authz.grouplist.get('@myteam')))) 652 668 self.assertRaises(Exception, self.authz.del_group, '@team2') 653 self.assert_( str(self.authz.grouplist.get('@team2')) == 'team2 = $authenticated, *',669 self.assert_(unicode(self.authz.grouplist.get('@team2')) == 'team2 = $authenticated, *', 654 670 self.authz.grouplist.get('@team2')) 655 671 self.authz.del_group('@team2',force=True) 656 672 self.assert_(self.authz.grouplist.get('@team2') == None, 657 str(self.authz.grouplist.get('@team2')))658 self.assert_( str(self.authz.grouplist.get('@myteam')) ==673 unicode(self.authz.grouplist.get('@team2'))) 674 self.assert_(unicode(self.authz.grouplist.get('@myteam')) == 659 675 'myteam = $authenticated, *, @team1, @team5, user1, user2, user3', 660 repr( str(self.authz.grouplist.get('@myteam'))))661 self.assert_( str(self.authz.grouplist.get('@team1')) == 'team1 = ',662 repr( str(self.authz.grouplist.get('@team1'))))676 repr(unicode(self.authz.grouplist.get('@myteam')))) 677 self.assert_(unicode(self.authz.grouplist.get('@team1')) == 'team1 = ', 678 repr(unicode(self.authz.grouplist.get('@team1')))) 663 679 664 680 # add_rule … … 682 698 self.assert_(self.authz.add_rules('/', '/trunk/', '&superuser=r; *=rw') == True, self.authz.add_rules('/', '/trunk/', '&superuser=rw')) 683 699 self.assert_(self.authz.add_rules('/', '/trunk/', '&superuser=rw\n *=r') == True, self.authz.add_rules('/', '/trunk/', '&superuser=rw')) 684 self.assert_( str(self.authz.get_module('repos1', '/')) == '[repos1:/]\n* = r\n', repr(str(self.authz.get_module('repos1', '/'))))700 self.assert_(unicode(self.authz.get_module('repos1', '/')) == '[repos1:/]\n* = r\n', repr(unicode(self.authz.get_module('repos1', '/')))) 685 701 self.assert_(self.authz.add_rules('repos1', '/', ['*=', '@team1=rw']) == True) 686 self.assert_( str(self.authz.get_module('repos1', '/')) == '[repos1:/]\n* = \n@team1 = rw\n', repr(str(self.authz.get_module('repos1', '/'))))687 self.assert_(','.join(map(lambda x: str(x), self.authz.rulelist())) ==702 self.assert_(unicode(self.authz.get_module('repos1', '/')) == '[repos1:/]\n* = \n@team1 = rw\n', repr(unicode(self.authz.get_module('repos1', '/')))) 703 self.assert_(','.join(map(lambda x:unicode(x), self.authz.rulelist())) == 688 704 '&superuser = rw,* = r,* = ,@team1 = rw', ','.join(map(lambda 689 x: str(x),705 x:unicode(x), 690 706 self.authz.rulelist()))) 691 707 self.assertRaises(Exception, self.authz.chk_grp_ref_by_rules, '*') … … 695 711 self.assert_(self.authz.del_rule('norepos', '/nopath', ['*=rw']) == False) 696 712 self.assert_(self.authz.del_rule('repos1', '/', ['*=rw']) == True) 697 self.assert_( str(self.authz.get_module('repos1', '/')) == '[repos1:/]\n@team1 = rw\n', repr(str(self.authz.get_module('repos1', '/'))))713 self.assert_(unicode(self.authz.get_module('repos1', '/')) == '[repos1:/]\n@team1 = rw\n', repr(unicode(self.authz.get_module('repos1', '/')))) 698 714 self.assert_(','.join(map(lambda x:x.name, self.authz.grouplist)) == 699 715 'myteam,team1,*,$authenticated,team3,team4,team5', … … 727 743 self.assert_(isinstance(self.authz.add_group_member('myteam','user1,user2,user3'),Group)) 728 744 self.assert_(self.authz.del_group_member('myteam','user1,user3') == True) 729 self.assert_( str(self.authz.grouplist) ==745 self.assert_(unicode(self.authz.grouplist) == 730 746 '[groups]\nmyteam = user2\nteam1 = \nteam3 = @team4\nteam4 = \nteam5 = \n', 731 repr( str(self.authz.grouplist)))747 repr(unicode(self.authz.grouplist))) 732 748 733 749 # del_module … … 739 755 740 756 # del_repos 741 #self.assert_( str(self.authz) == '', str(self.authz))757 #self.assert_(unicode(self.authz) == '', unicode(self.authz)) 742 758 self.assert_(self.authz.get_repos('/').is_blank() == False) 743 759 self.assert_(self.authz.get_repos('repos2').is_blank() == True) … … 751 767 752 768 # output config from __str__ 753 self.assert_( str(self.authz) ==769 self.assert_(unicode(self.authz) == 754 770 '# version : 0.0\n# admin : / = admin1, admin2\n\n[groups]\nmyteam = user2\nteam1 = \nteam3 = @team4\nteam4 = \nteam5 = \n\n[aliases]\nsuperuser = jiangxin\n\n', 755 repr( str(self.authz)))771 repr(unicode(self.authz))) 756 772 757 773 def testAuthzConfDefault(self): … … 794 810 # SvnAuthz __str__ test 795 811 self.authz.update_revision() 796 self.assert_( str(self.authz) ==797 """# version : 0.1.3812 self.assert_(unicode(self.authz) == 813 u"""# version : 0.1.3 798 814 # admin : / = admin1, admin2 799 815 # admin : repos1 = admin1, admin2 800 816 # admin : repos2 = admin2 801 817 # admin : repos3 = admin3 818 # admin : 版本库1 = @管理组1 802 819 803 820 [groups] … … 808 825 team2 = @team3, user2, user22 809 826 team3 = user3, user33 827 管理组1 = &别名1, 蒋鑫 828 组1 = &别名1, 用户2 810 829 811 830 [aliases] 812 831 007 = james 813 832 admin = jiangxin 833 别名1 = 用户1 814 834 815 835 [/] … … 844 864 user1 = 845 865 846 """, (repr(str(self.authz)))) 866 [版本库1:/] 867 * = 868 @管理组1 = rw 869 870 [版本库1:/项目1] 871 * = 872 @组1 = rw 873 用户3 = r 874 875 """, (repr(unicode(self.authz)))) 847 876 848 877 self.assert_(self.authz.check_rights('*','/','/trunk/src/test','r') == False) … … 909 938 910 939 self.assert_(self.authz.get_access_map_msgs(' ', abbr=True) == 911 [ """940 [u""" 912 941 * => [/] 913 942 ---------------------------------------- … … 917 946 918 947 """, 919 """948 u""" 920 949 * => [repos1] 921 950 ---------------------------------------- … … 925 954 926 955 """, 927 """956 u""" 928 957 * => [repos2] 929 958 ---------------------------------------- … … 933 962 934 963 """, 935 """964 u""" 936 965 * => [repos3] 937 966 ---------------------------------------- … … 940 969 XX: /, /branches, /tags, /trunk, /trunk/src 941 970 971 """, 972 u""" 973 * => [版本库1] 974 ---------------------------------------- 975 RW: 976 RO: 977 XX: /, /branches, /tags, /trunk, /trunk/src, /项目1 978 942 979 """] 943 980 , repr(self.authz.get_access_map_msgs(' ', abbr=True))) 944 981 945 982 self.assert_(self.authz.get_path_access_msgs(' ', '*', '/trunk/src/mod1', abbr=True) == 946 [u'[/:/trunk/src/mod1] * =', u'[repos1:/trunk/src/mod1] * =', u'[repos2:/trunk/src/mod1] * =', u'[repos3:/trunk/src/mod1] * ='], 983 [u'[/:/trunk/src/mod1] * =', 984 u'[repos1:/trunk/src/mod1] * =', 985 u'[repos2:/trunk/src/mod1] * =', 986 u'[repos3:/trunk/src/mod1] * =', 987 u'[版本库1:/trunk/src/mod1] * =',], 947 988 self.authz.get_path_access_msgs(' ', '*', '/trunk/src/mod1', abbr=True)) 948 989 -
trunk/setup.cfg
r4 r21 64 64 with-pylons=test.ini 65 65 detailed-errors=1 66 #with-coverage=1 66 67 #with-doctest=1 67 68
![(please configure the [header_logo] section in trac.ini)](/trac/pysvnmanager/chrome/common/trac_banner.png)