Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Side by Side Diff: tools/android/loading/request_dependencies_lens_unittest.py

Issue 1813723002: clovis: Identify prefetchable resources from dependencies and tracing. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/android/loading/request_dependencies_lens.py ('k') | tools/android/loading/test_utils.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2016 The Chromium Authors. All rights reserved. 1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import unittest 5 import unittest
6 6
7 import devtools_monitor 7 import devtools_monitor
8 from loading_trace import LoadingTrace 8 from loading_trace import LoadingTrace
9 from request_dependencies_lens import RequestDependencyLens 9 from request_dependencies_lens import RequestDependencyLens
10 from request_track import (Request, TimingFromDict) 10 from request_track import (Request, TimingFromDict)
11 import test_utils 11 import test_utils
12 12
13 13
14 class RequestDependencyLensTestCase(unittest.TestCase): 14 class TestRequests(object):
15 _REDIRECT_REQUEST = Request.FromJsonDict( 15 FIRST_REDIRECT_REQUEST = Request.FromJsonDict(
16 {'url': 'http://bla.com', 'request_id': '1234.redirect.1', 16 {'url': 'http://bla.com', 'request_id': '1234.redirect.1',
17 'initiator': {'type': 'other'}, 17 'initiator': {'type': 'other'},
18 'timestamp': 0.5, 'timing': TimingFromDict({})})
19 SECOND_REDIRECT_REQUEST = Request.FromJsonDict(
20 {'url': 'http://bla.com/redirect1', 'request_id': '1234.redirect.2',
21 'initiator': {'type': 'redirect',
22 'initiating_request': '1234.redirect.1'},
18 'timestamp': 1, 'timing': TimingFromDict({})}) 23 'timestamp': 1, 'timing': TimingFromDict({})})
19 _REDIRECTED_REQUEST = Request.FromJsonDict({ 24 REDIRECTED_REQUEST = Request.FromJsonDict({
20 'url': 'http://bla.com', 25 'url': 'http://bla.com/index.html',
21 'request_id': '1234.1', 26 'request_id': '1234.1',
22 'frame_id': '123.1', 27 'frame_id': '123.1',
23 'initiator': {'type': 'redirect', 28 'initiator': {'type': 'redirect',
24 'initiating_request': '1234.redirect.1'}, 29 'initiating_request': '1234.redirect.2'},
25 'timestamp': 2, 30 'timestamp': 2,
26 'timing': TimingFromDict({})}) 31 'timing': TimingFromDict({})})
27 _REQUEST = Request.FromJsonDict({'url': 'http://bla.com', 32 REQUEST = Request.FromJsonDict({'url': 'http://bla.com/index.html',
28 'request_id': '1234.1', 33 'request_id': '1234.1',
29 'frame_id': '123.1', 34 'frame_id': '123.1',
30 'initiator': {'type': 'other'}, 35 'initiator': {'type': 'other'},
31 'timestamp': 2, 36 'timestamp': 2,
32 'timing': TimingFromDict({})}) 37 'timing': TimingFromDict({})})
33 _JS_REQUEST = Request.FromJsonDict({'url': 'http://bla.com/nyancat.js', 38 JS_REQUEST = Request.FromJsonDict({'url': 'http://bla.com/nyancat.js',
34 'request_id': '1234.12', 39 'request_id': '1234.12',
35 'frame_id': '123.1', 40 'frame_id': '123.123',
36 'initiator': {'type': 'parser', 41 'initiator': {
37 'url': 'http://bla.com'}, 42 'type': 'parser',
38 'timestamp': 3, 43 'url': 'http://bla.com/index.html'},
39 'timing': TimingFromDict({})}) 44 'timestamp': 3,
40 _JS_REQUEST_OTHER_FRAME = Request.FromJsonDict( 45 'timing': TimingFromDict({})})
46 JS_REQUEST_OTHER_FRAME = Request.FromJsonDict(
41 {'url': 'http://bla.com/nyancat.js', 47 {'url': 'http://bla.com/nyancat.js',
42 'request_id': '1234.42', 48 'request_id': '1234.42',
43 'frame_id': '123.13', 49 'frame_id': '123.13',
44 'initiator': {'type': 'parser', 50 'initiator': {'type': 'parser',
45 'url': 'http://bla.com'}, 51 'url': 'http://bla.com/index.html'},
46 'timestamp': 4, 'timing': TimingFromDict({})}) 52 'timestamp': 4, 'timing': TimingFromDict({})})
47 _JS_REQUEST_UNRELATED_FRAME = Request.FromJsonDict( 53 JS_REQUEST_UNRELATED_FRAME = Request.FromJsonDict(
48 {'url': 'http://bla.com/nyancat.js', 54 {'url': 'http://bla.com/nyancat.js',
49 'request_id': '1234.42', 55 'request_id': '1234.56',
50 'frame_id': '123.99', 56 'frame_id': '123.99',
51 'initiator': {'type': 'parser', 57 'initiator': {'type': 'parser',
52 'url': 'http://bla.com'}, 58 'url': 'http://bla.com/index.html'},
53 'timestamp': 5, 'timing': TimingFromDict({})}) 59 'timestamp': 5, 'timing': TimingFromDict({})})
54 _JS_REQUEST_2 = Request.FromJsonDict( 60 JS_REQUEST_2 = Request.FromJsonDict(
55 {'url': 'http://bla.com/cat.js', 'request_id': '1234.13', 61 {'url': 'http://bla.com/cat.js', 'request_id': '1234.13',
56 'frame_id': '123.1', 62 'frame_id': '123.123',
57 'initiator': {'type': 'script', 63 'initiator': {'type': 'script',
58 'stack': {'callFrames': [ 64 'stack': {'callFrames': [
59 {'url': 'unknown'}, 65 {'url': 'unknown'},
60 {'url': 'http://bla.com/nyancat.js'}]}}, 66 {'url': 'http://bla.com/nyancat.js'}]}},
61 'timestamp': 10, 'timing': TimingFromDict({})}) 67 'timestamp': 10, 'timing': TimingFromDict({})})
62 _PAGE_EVENTS = [{'method': 'Page.frameAttached', 68 PAGE_EVENTS = [{'method': 'Page.frameAttached',
63 'frame_id': '123.13', 'parent_frame_id': '123.1'}] 69 'frame_id': '123.13', 'parent_frame_id': '123.1'},
70 {'method': 'Page.frameAttached',
71 'frame_id': '123.123', 'parent_frame_id': '123.1'}]
64 72
73 @classmethod
74 def CreateLoadingTrace(cls, trace_events=None):
75 return test_utils.LoadingTraceFromEvents(
76 [cls.FIRST_REDIRECT_REQUEST, cls.SECOND_REDIRECT_REQUEST,
77 cls.REDIRECTED_REQUEST, cls.REQUEST, cls.JS_REQUEST, cls.JS_REQUEST_2,
78 cls.JS_REQUEST_OTHER_FRAME, cls.JS_REQUEST_UNRELATED_FRAME],
79 cls.PAGE_EVENTS, trace_events)
80
81
82 class RequestDependencyLensTestCase(unittest.TestCase):
65 def testRedirectDependency(self): 83 def testRedirectDependency(self):
66 loading_trace = test_utils.LoadingTraceFromEvents( 84 loading_trace = test_utils.LoadingTraceFromEvents(
67 [self._REDIRECT_REQUEST, self._REDIRECTED_REQUEST]) 85 [TestRequests.FIRST_REDIRECT_REQUEST,
86 TestRequests.SECOND_REDIRECT_REQUEST, TestRequests.REDIRECTED_REQUEST])
68 request_dependencies_lens = RequestDependencyLens(loading_trace) 87 request_dependencies_lens = RequestDependencyLens(loading_trace)
69 deps = request_dependencies_lens.GetRequestDependencies() 88 deps = request_dependencies_lens.GetRequestDependencies()
70 self.assertEquals(1, len(deps)) 89 self.assertEquals(2, len(deps))
71 (first, second, reason) = deps[0] 90 (first, second, reason) = deps[0]
72 self.assertEquals('redirect', reason) 91 self.assertEquals('redirect', reason)
73 self.assertEquals(self._REDIRECT_REQUEST.request_id, first.request_id) 92 self.assertEquals(TestRequests.FIRST_REDIRECT_REQUEST.request_id,
74 self.assertEquals(self._REQUEST.request_id, second.request_id) 93 first.request_id)
94 self.assertEquals(TestRequests.SECOND_REDIRECT_REQUEST.request_id,
95 second.request_id)
96 (first, second, reason) = deps[1]
97 self.assertEquals('redirect', reason)
98 self.assertEquals(TestRequests.SECOND_REDIRECT_REQUEST.request_id,
99 first.request_id)
100 self.assertEquals(TestRequests.REQUEST.request_id, second.request_id)
101
102 def testGetRedirectChain(self):
103 loading_trace = test_utils.LoadingTraceFromEvents(
104 [TestRequests.FIRST_REDIRECT_REQUEST,
105 TestRequests.SECOND_REDIRECT_REQUEST, TestRequests.REDIRECTED_REQUEST])
106 request_dependencies_lens = RequestDependencyLens(loading_trace)
107 whole_chain = [TestRequests.FIRST_REDIRECT_REQUEST,
108 TestRequests.SECOND_REDIRECT_REQUEST,
109 TestRequests.REDIRECTED_REQUEST]
110 chain = request_dependencies_lens.GetRedirectChain(
111 TestRequests.FIRST_REDIRECT_REQUEST)
112 self.assertListEqual(whole_chain, chain)
113 chain = request_dependencies_lens.GetRedirectChain(
114 TestRequests.SECOND_REDIRECT_REQUEST)
115 self.assertListEqual(whole_chain[1:], chain)
116 chain = request_dependencies_lens.GetRedirectChain(
117 TestRequests.REDIRECTED_REQUEST)
118 self.assertEquals(whole_chain[2:], chain)
75 119
76 def testScriptDependency(self): 120 def testScriptDependency(self):
77 loading_trace = test_utils.LoadingTraceFromEvents( 121 loading_trace = test_utils.LoadingTraceFromEvents(
78 [self._JS_REQUEST, self._JS_REQUEST_2]) 122 [TestRequests.JS_REQUEST, TestRequests.JS_REQUEST_2])
79 request_dependencies_lens = RequestDependencyLens(loading_trace) 123 request_dependencies_lens = RequestDependencyLens(loading_trace)
80 deps = request_dependencies_lens.GetRequestDependencies() 124 deps = request_dependencies_lens.GetRequestDependencies()
81 self.assertEquals(1, len(deps)) 125 self.assertEquals(1, len(deps))
82 self._AssertDependencyIs( 126 self._AssertDependencyIs(
83 deps[0], 127 deps[0],
84 self._JS_REQUEST.request_id, self._JS_REQUEST_2.request_id, 'script') 128 TestRequests.JS_REQUEST.request_id,
129 TestRequests.JS_REQUEST_2.request_id, 'script')
85 130
86 def testAsyncScriptDependency(self): 131 def testAsyncScriptDependency(self):
87 JS_REQUEST_WITH_ASYNC_STACK = Request.FromJsonDict( 132 JS_REQUEST_WITH_ASYNC_STACK = Request.FromJsonDict(
88 {'url': 'http://bla.com/cat.js', 'request_id': '1234.14', 133 {'url': 'http://bla.com/cat.js', 'request_id': '1234.14',
89 'initiator': { 134 'initiator': {
90 'type': 'script', 135 'type': 'script',
91 'stack': {'callFrames': [], 136 'stack': {'callFrames': [],
92 'parent': {'callFrames': [ 137 'parent': {'callFrames': [
93 {'url': 'http://bla.com/nyancat.js'}]}}}, 138 {'url': 'http://bla.com/nyancat.js'}]}}},
94 'timestamp': 10, 'timing': TimingFromDict({})}) 139 'timestamp': 10, 'timing': TimingFromDict({})})
95 loading_trace = test_utils.LoadingTraceFromEvents( 140 loading_trace = test_utils.LoadingTraceFromEvents(
96 [self._JS_REQUEST, JS_REQUEST_WITH_ASYNC_STACK]) 141 [TestRequests.JS_REQUEST, JS_REQUEST_WITH_ASYNC_STACK])
97 request_dependencies_lens = RequestDependencyLens(loading_trace) 142 request_dependencies_lens = RequestDependencyLens(loading_trace)
98 deps = request_dependencies_lens.GetRequestDependencies() 143 deps = request_dependencies_lens.GetRequestDependencies()
99 self.assertEquals(1, len(deps)) 144 self.assertEquals(1, len(deps))
100 self._AssertDependencyIs( 145 self._AssertDependencyIs(
101 deps[0], self._JS_REQUEST.request_id, 146 deps[0], TestRequests.JS_REQUEST.request_id,
102 JS_REQUEST_WITH_ASYNC_STACK.request_id, 'script') 147 JS_REQUEST_WITH_ASYNC_STACK.request_id, 'script')
103 148
104 def testParserDependency(self): 149 def testParserDependency(self):
105 loading_trace = test_utils.LoadingTraceFromEvents( 150 loading_trace = test_utils.LoadingTraceFromEvents(
106 [self._REQUEST, self._JS_REQUEST]) 151 [TestRequests.REQUEST, TestRequests.JS_REQUEST])
107 request_dependencies_lens = RequestDependencyLens(loading_trace) 152 request_dependencies_lens = RequestDependencyLens(loading_trace)
108 deps = request_dependencies_lens.GetRequestDependencies() 153 deps = request_dependencies_lens.GetRequestDependencies()
109 self.assertEquals(1, len(deps)) 154 self.assertEquals(1, len(deps))
110 self._AssertDependencyIs( 155 self._AssertDependencyIs(
111 deps[0], 156 deps[0],
112 self._REQUEST.request_id, self._JS_REQUEST.request_id, 'parser') 157 TestRequests.REQUEST.request_id, TestRequests.JS_REQUEST.request_id,
158 'parser')
113 159
114 def testSeveralDependencies(self): 160 def testSeveralDependencies(self):
115 loading_trace = test_utils.LoadingTraceFromEvents( 161 loading_trace = test_utils.LoadingTraceFromEvents(
116 [self._REDIRECT_REQUEST, self._REDIRECTED_REQUEST, self._JS_REQUEST, 162 [TestRequests.FIRST_REDIRECT_REQUEST,
117 self._JS_REQUEST_2]) 163 TestRequests.SECOND_REDIRECT_REQUEST,
164 TestRequests.REDIRECTED_REQUEST,
165 TestRequests.JS_REQUEST, TestRequests.JS_REQUEST_2])
118 request_dependencies_lens = RequestDependencyLens(loading_trace) 166 request_dependencies_lens = RequestDependencyLens(loading_trace)
119 deps = request_dependencies_lens.GetRequestDependencies() 167 deps = request_dependencies_lens.GetRequestDependencies()
120 self.assertEquals(3, len(deps)) 168 self.assertEquals(4, len(deps))
121 self._AssertDependencyIs( 169 self._AssertDependencyIs(
122 deps[0], self._REDIRECT_REQUEST.request_id, self._REQUEST.request_id, 170 deps[0], TestRequests.FIRST_REDIRECT_REQUEST.request_id,
123 'redirect') 171 TestRequests.SECOND_REDIRECT_REQUEST.request_id, 'redirect')
124 self._AssertDependencyIs( 172 self._AssertDependencyIs(
125 deps[1], 173 deps[1], TestRequests.SECOND_REDIRECT_REQUEST.request_id,
126 self._REQUEST.request_id, self._JS_REQUEST.request_id, 'parser') 174 TestRequests.REQUEST.request_id, 'redirect')
127 self._AssertDependencyIs( 175 self._AssertDependencyIs(
128 deps[2], 176 deps[2],
129 self._JS_REQUEST.request_id, self._JS_REQUEST_2.request_id, 'script') 177 TestRequests.REQUEST.request_id, TestRequests.JS_REQUEST.request_id,
178 'parser')
179 self._AssertDependencyIs(
180 deps[3],
181 TestRequests.JS_REQUEST.request_id,
182 TestRequests.JS_REQUEST_2.request_id, 'script')
130 183
131 def testDependencyDifferentFrame(self): 184 def testDependencyDifferentFrame(self):
132 """Checks that a more recent request from another frame is ignored.""" 185 """Checks that a more recent request from another frame is ignored."""
133 loading_trace = test_utils.LoadingTraceFromEvents( 186 loading_trace = test_utils.LoadingTraceFromEvents(
134 [self._JS_REQUEST, self._JS_REQUEST_OTHER_FRAME, self._JS_REQUEST_2]) 187 [TestRequests.JS_REQUEST, TestRequests.JS_REQUEST_OTHER_FRAME,
188 TestRequests.JS_REQUEST_2])
135 request_dependencies_lens = RequestDependencyLens(loading_trace) 189 request_dependencies_lens = RequestDependencyLens(loading_trace)
136 deps = request_dependencies_lens.GetRequestDependencies() 190 deps = request_dependencies_lens.GetRequestDependencies()
137 self.assertEquals(1, len(deps)) 191 self.assertEquals(1, len(deps))
138 self._AssertDependencyIs( 192 self._AssertDependencyIs(
139 deps[0], 193 deps[0],
140 self._JS_REQUEST.request_id, self._JS_REQUEST_2.request_id, 'script') 194 TestRequests.JS_REQUEST.request_id,
195 TestRequests.JS_REQUEST_2.request_id, 'script')
141 196
142 def testDependencySameParentFrame(self): 197 def testDependencySameParentFrame(self):
143 """Checks that a more recent request from an unrelated frame is ignored 198 """Checks that a more recent request from an unrelated frame is ignored
144 if there is one from a related frame.""" 199 if there is one from a related frame."""
145 loading_trace = test_utils.LoadingTraceFromEvents( 200 loading_trace = test_utils.LoadingTraceFromEvents(
146 [self._JS_REQUEST_OTHER_FRAME, self._JS_REQUEST_UNRELATED_FRAME, 201 [TestRequests.JS_REQUEST_OTHER_FRAME,
147 self._JS_REQUEST_2], self._PAGE_EVENTS) 202 TestRequests.JS_REQUEST_UNRELATED_FRAME, TestRequests.JS_REQUEST_2],
203 TestRequests.PAGE_EVENTS)
148 request_dependencies_lens = RequestDependencyLens(loading_trace) 204 request_dependencies_lens = RequestDependencyLens(loading_trace)
149 deps = request_dependencies_lens.GetRequestDependencies() 205 deps = request_dependencies_lens.GetRequestDependencies()
150 self.assertEquals(1, len(deps)) 206 self.assertEquals(1, len(deps))
151 self._AssertDependencyIs( 207 self._AssertDependencyIs(
152 deps[0], 208 deps[0],
153 self._JS_REQUEST_OTHER_FRAME.request_id, 209 TestRequests.JS_REQUEST_OTHER_FRAME.request_id,
154 self._JS_REQUEST_2.request_id, 'script') 210 TestRequests.JS_REQUEST_2.request_id, 'script')
155 211
156 def _AssertDependencyIs( 212 def _AssertDependencyIs(
157 self, dep, first_request_id, second_request_id, reason): 213 self, dep, first_request_id, second_request_id, reason):
158 (first, second, dependency_reason) = dep 214 (first, second, dependency_reason) = dep
159 self.assertEquals(reason, dependency_reason) 215 self.assertEquals(reason, dependency_reason)
160 self.assertEquals(first_request_id, first.request_id) 216 self.assertEquals(first_request_id, first.request_id)
161 self.assertEquals(second_request_id, second.request_id) 217 self.assertEquals(second_request_id, second.request_id)
162 218
163 219
164 if __name__ == '__main__': 220 if __name__ == '__main__':
165 unittest.main() 221 unittest.main()
OLDNEW
« no previous file with comments | « tools/android/loading/request_dependencies_lens.py ('k') | tools/android/loading/test_utils.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698