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