##// END OF EJS Templates
Updated test_crawler to scan paths in more sensible order using ordered tuple.
marcink -
r1338:bbfc3f30 beta
parent child Browse files
Show More
@@ -1,130 +1,139 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 rhodecode.tests.test_crawer
4 4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 5
6 6 Test for crawling a project for memory usage
7 7
8 8 watch -n1 ./rhodecode/tests/mem_watch
9 9
10 10 :created_on: Apr 21, 2010
11 11 :author: marcink
12 12 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
13 13 :license: GPLv3, see COPYING for more details.
14 14 """
15 15 # This program is free software: you can redistribute it and/or modify
16 16 # it under the terms of the GNU General Public License as published by
17 17 # the Free Software Foundation, either version 3 of the License, or
18 18 # (at your option) any later version.
19 19 #
20 20 # This program is distributed in the hope that it will be useful,
21 21 # but WITHOUT ANY WARRANTY; without even the implied warranty of
22 22 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 23 # GNU General Public License for more details.
24 24 #
25 25 # You should have received a copy of the GNU General Public License
26 26 # along with this program. If not, see <http://www.gnu.org/licenses/>.
27 27
28 28
29 29 import cookielib
30 30 import urllib
31 31 import urllib2
32 32 import vcs
33 33 import time
34 34
35 35 from os.path import join as jn
36 36
37 37
38 38 BASE_URI = 'http://127.0.0.1:5000/%s'
39 39 PROJECT = 'CPython'
40 40 PROJECT_PATH = jn('/', 'home', 'marcink', 'hg_repos')
41 41
42 42
43 43 cj = cookielib.FileCookieJar('/tmp/rc_test_cookie.txt')
44 44 o = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
45 45 o.addheaders = [
46 46 ('User-agent', 'rhodecode-crawler'),
47 47 ('Accept-Language', 'en - us, en;q = 0.5')
48 48 ]
49 49
50 50 urllib2.install_opener(o)
51 51
52 52
53 53
54 54 def test_changelog_walk(pages=100):
55 55 total_time = 0
56 56 for i in range(1, pages):
57 57
58 58 page = '/'.join((PROJECT, 'changelog',))
59 59
60 60 full_uri = (BASE_URI % page) + '?' + urllib.urlencode({'page':i})
61 61 s = time.time()
62 62 f = o.open(full_uri)
63 63 size = len(f.read())
64 64 e = time.time() - s
65 65 total_time += e
66 66 print 'visited %s size:%s req:%s ms' % (full_uri, size, e)
67 67
68 68
69 69 print 'total_time', total_time
70 70 print 'average on req', total_time / float(pages)
71 71
72 72
73 def test_changeset_walk():
74 print jn(PROJECT_PATH, PROJECT)
73 def test_changeset_walk(limit=None):
74 print 'processing', jn(PROJECT_PATH, PROJECT)
75 75 total_time = 0
76 76
77 77 repo = vcs.get_repo(jn(PROJECT_PATH, PROJECT))
78
78 cnt = 0
79 79 for i in repo:
80
80 cnt += 1
81 81 raw_cs = '/'.join((PROJECT, 'changeset', i.raw_id))
82 if limit and limit == cnt:
83 break
82 84
83 85 full_uri = (BASE_URI % raw_cs)
84 86 s = time.time()
85 87 f = o.open(full_uri)
86 88 size = len(f.read())
87 89 e = time.time() - s
88 90 total_time += e
89 91 print 'visited %s\%s size:%s req:%s ms' % (full_uri, i, size, e)
90 92
91 93 print 'total_time', total_time
92 print 'average on req', total_time / float(len(repo))
94 print 'average on req', total_time / float(cnt)
95
93 96
94 97 def test_files_walk():
95 print jn(PROJECT_PATH, PROJECT)
98 print 'processing', jn(PROJECT_PATH, PROJECT)
96 99 total_time = 0
97 100
98 101 repo = vcs.get_repo(jn(PROJECT_PATH, PROJECT))
99 102
100 paths_ = set()
103 from rhodecode.lib.oset import OrderedSet
104
105 paths_ = OrderedSet([''])
101 106 try:
102 107 tip = repo.get_changeset('tip')
103 108 for topnode, dirs, files in tip.walk('/'):
104 for f in files:
109
110 for dir in dirs:
111 paths_.add(dir.path)
112 for f in dir:
105 113 paths_.add(f.path)
106 for dir in dirs:
114
107 115 for f in files:
108 116 paths_.add(f.path)
109 117
110 118 except vcs.exception.RepositoryError, e:
111 119 pass
112 120
113 121 for f in paths_:
114 122 file_path = '/'.join((PROJECT, 'files', 'tip', f))
115 123
116 124 full_uri = (BASE_URI % file_path)
117 125 s = time.time()
118 126 f = o.open(full_uri)
119 127 size = len(f.read())
120 128 e = time.time() - s
121 129 total_time += e
122 130 print 'visited %s size:%s req:%s ms' % (full_uri, size, e)
123 131
124 132 print 'total_time', total_time
125 133 print 'average on req', total_time / float(len(repo))
126 134
127 135
128 #test_changelog_walk()
129 #test_changeset_walk()
130 136 test_files_walk()
137 test_changelog_walk(40)
138 test_changeset_walk(limit=100)
139
General Comments 0
You need to be logged in to leave comments. Login now