| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 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 base64 | 5 import base64 |
| 6 import logging | 6 import logging |
| 7 import urlparse | 7 import urlparse |
| 8 | 8 |
| 9 from common import chrome_proxy_measurements as measurements | 9 from common import chrome_proxy_measurements as measurements |
| 10 from common.chrome_proxy_measurements import ChromeProxyValidation | 10 from common.chrome_proxy_measurements import ChromeProxyValidation |
| 11 from integration_tests import chrome_proxy_metrics as metrics | 11 from integration_tests import chrome_proxy_metrics as metrics |
| 12 from metrics import loading | 12 from metrics import loading |
| 13 from telemetry.core import exceptions, util | 13 from telemetry.core import exceptions, util |
| 14 from telemetry.page import page_test | 14 from telemetry.page import legacy_page_test |
| 15 | 15 |
| 16 class ChromeProxyBypassOnTimeout(ChromeProxyValidation): | 16 class ChromeProxyBypassOnTimeout(ChromeProxyValidation): |
| 17 """Checks the client bypasses when endpoint site times out.""" | 17 """Checks the client bypasses when endpoint site times out.""" |
| 18 | 18 |
| 19 def __init__(self): | 19 def __init__(self): |
| 20 super(ChromeProxyBypassOnTimeout, self).__init__( | 20 super(ChromeProxyBypassOnTimeout, self).__init__( |
| 21 restart_after_each_page=True, | 21 restart_after_each_page=True, |
| 22 metrics=metrics.ChromeProxyMetric()) | 22 metrics=metrics.ChromeProxyMetric()) |
| 23 | 23 |
| 24 def CustomizeBrowserOptions(self, options): | 24 def CustomizeBrowserOptions(self, options): |
| 25 super(ChromeProxyBypassOnTimeout, self).CustomizeBrowserOptions( | 25 super(ChromeProxyBypassOnTimeout, self).CustomizeBrowserOptions( |
| 26 options) | 26 options) |
| 27 | 27 |
| 28 def AddResults(self, tab, results): | 28 def AddResults(self, tab, results): |
| 29 self._metrics.AddResultsForBypassOnTimeout(tab, results) | 29 self._metrics.AddResultsForBypassOnTimeout(tab, results) |
| 30 | 30 |
| 31 class ChromeProxyDataSaving(page_test.PageTest): | 31 class ChromeProxyDataSaving(legacy_page_test.LegacyPageTest): |
| 32 """Chrome proxy data saving measurement.""" | 32 """Chrome proxy data saving measurement.""" |
| 33 def __init__(self, *args, **kwargs): | 33 def __init__(self, *args, **kwargs): |
| 34 super(ChromeProxyDataSaving, self).__init__(*args, **kwargs) | 34 super(ChromeProxyDataSaving, self).__init__(*args, **kwargs) |
| 35 self._metrics = metrics.ChromeProxyMetric() | 35 self._metrics = metrics.ChromeProxyMetric() |
| 36 self._enable_proxy = True | 36 self._enable_proxy = True |
| 37 | 37 |
| 38 def CustomizeBrowserOptions(self, options): | 38 def CustomizeBrowserOptions(self, options): |
| 39 if self._enable_proxy: | 39 if self._enable_proxy: |
| 40 options.AppendExtraBrowserArgs('--enable-spdy-proxy-auth') | 40 options.AppendExtraBrowserArgs('--enable-spdy-proxy-auth') |
| 41 | 41 |
| (...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 568 ], | 568 ], |
| 569 'bypass': [self._metrics.AddResultsForBypass], | 569 'bypass': [self._metrics.AddResultsForBypass], |
| 570 } | 570 } |
| 571 if not self._page.name in page_to_metrics: | 571 if not self._page.name in page_to_metrics: |
| 572 raise page_test.MeasurementFailure( | 572 raise page_test.MeasurementFailure( |
| 573 'Invalid page name (%s) in smoke. Page name must be one of:\n%s' % ( | 573 'Invalid page name (%s) in smoke. Page name must be one of:\n%s' % ( |
| 574 self._page.name, page_to_metrics.keys())) | 574 self._page.name, page_to_metrics.keys())) |
| 575 for add_result in page_to_metrics[self._page.name]: | 575 for add_result in page_to_metrics[self._page.name]: |
| 576 add_result(tab, results) | 576 add_result(tab, results) |
| 577 | 577 |
| 578 class ChromeProxyQuicSmoke(page_test.PageTest): | 578 class ChromeProxyQuicSmoke(legacy_page_test.LegacyPageTest): |
| 579 """Smoke measurement for basic chrome proxy correctness when using a | 579 """Smoke measurement for basic chrome proxy correctness when using a |
| 580 proxy that supports QUIC.""" | 580 proxy that supports QUIC.""" |
| 581 | 581 |
| 582 def __init__(self, *args, **kwargs): | 582 def __init__(self, *args, **kwargs): |
| 583 super(ChromeProxyQuicSmoke, self).__init__(*args, **kwargs) | 583 super(ChromeProxyQuicSmoke, self).__init__(*args, **kwargs) |
| 584 self._metrics = metrics.ChromeProxyMetric() | 584 self._metrics = metrics.ChromeProxyMetric() |
| 585 self._enable_proxy = True | 585 self._enable_proxy = True |
| 586 | 586 |
| 587 def CustomizeBrowserOptions(self, options): | 587 def CustomizeBrowserOptions(self, options): |
| 588 super(ChromeProxyQuicSmoke, self).CustomizeBrowserOptions(options) | 588 super(ChromeProxyQuicSmoke, self).CustomizeBrowserOptions(options) |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 641 | 641 |
| 642 def CustomizeBrowserOptions(self, options): | 642 def CustomizeBrowserOptions(self, options): |
| 643 super(ChromeProxyClientConfig, self).CustomizeBrowserOptions(options) | 643 super(ChromeProxyClientConfig, self).CustomizeBrowserOptions(options) |
| 644 options.AppendExtraBrowserArgs( | 644 options.AppendExtraBrowserArgs( |
| 645 '--enable-data-reduction-proxy-config-client') | 645 '--enable-data-reduction-proxy-config-client') |
| 646 options.AppendExtraBrowserArgs('--disable-quic') | 646 options.AppendExtraBrowserArgs('--disable-quic') |
| 647 | 647 |
| 648 def AddResults(self, tab, results): | 648 def AddResults(self, tab, results): |
| 649 self._metrics.AddResultsForClientConfig(tab, results) | 649 self._metrics.AddResultsForClientConfig(tab, results) |
| 650 | 650 |
| 651 class ChromeProxyVideoValidation(page_test.PageTest): | 651 class ChromeProxyVideoValidation(legacy_page_test.LegacyPageTest): |
| 652 """Validation for video pages. | 652 """Validation for video pages. |
| 653 | 653 |
| 654 Measures pages using metrics.ChromeProxyVideoMetric. Pages can be fetched | 654 Measures pages using metrics.ChromeProxyVideoMetric. Pages can be fetched |
| 655 either direct from the origin server or via the proxy. If a page is fetched | 655 either direct from the origin server or via the proxy. If a page is fetched |
| 656 both ways, then the PROXIED and DIRECT measurements are compared to ensure | 656 both ways, then the PROXIED and DIRECT measurements are compared to ensure |
| 657 the same video was loaded in both cases. | 657 the same video was loaded in both cases. |
| 658 """ | 658 """ |
| 659 | 659 |
| 660 def __init__(self): | 660 def __init__(self): |
| 661 super(ChromeProxyVideoValidation, self).__init__( | 661 super(ChromeProxyVideoValidation, self).__init__( |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 727 err('Mismatch for %s (proxied=%s direct=%s): %s' % | 727 err('Mismatch for %s (proxied=%s direct=%s): %s' % |
| 728 (x, str(pm[x]), str(dm[x]), page.url)) | 728 (x, str(pm[x]), str(dm[x]), page.url)) |
| 729 | 729 |
| 730 # Proxied XOCL should match direct CL. | 730 # Proxied XOCL should match direct CL. |
| 731 pxocl = pm['x_original_content_length_header'] | 731 pxocl = pm['x_original_content_length_header'] |
| 732 dcl = dm['content_length_header'] | 732 dcl = dm['content_length_header'] |
| 733 if pxocl != dcl: | 733 if pxocl != dcl: |
| 734 err('Mismatch for content length (proxied=%s direct=%s): %s' % | 734 err('Mismatch for content length (proxied=%s direct=%s): %s' % |
| 735 (str(pxocl), str(dcl), page.url)) | 735 (str(pxocl), str(dcl), page.url)) |
| 736 | 736 |
| 737 class ChromeProxyInstrumentedVideoValidation(page_test.PageTest): | 737 class ChromeProxyInstrumentedVideoValidation(legacy_page_test.LegacyPageTest): |
| 738 """Tests a specially instrumented page for correct video transcoding.""" | 738 """Tests a specially instrumented page for correct video transcoding.""" |
| 739 | 739 |
| 740 def __init__(self): | 740 def __init__(self): |
| 741 super(ChromeProxyInstrumentedVideoValidation, self).__init__( | 741 super(ChromeProxyInstrumentedVideoValidation, self).__init__( |
| 742 needs_browser_restart_after_each_page=True, | 742 needs_browser_restart_after_each_page=True, |
| 743 clear_cache_before_each_run=True) | 743 clear_cache_before_each_run=True) |
| 744 self._metrics = metrics.ChromeProxyInstrumentedVideoMetric() | 744 self._metrics = metrics.ChromeProxyInstrumentedVideoMetric() |
| 745 | 745 |
| 746 def CustomizeBrowserOptions(self, options): | 746 def CustomizeBrowserOptions(self, options): |
| 747 options.AppendExtraBrowserArgs('--enable-spdy-proxy-auth') | 747 options.AppendExtraBrowserArgs('--enable-spdy-proxy-auth') |
| (...skipping 17 matching lines...) Expand all Loading... |
| 765 def CustomizeBrowserOptions(self, options): | 765 def CustomizeBrowserOptions(self, options): |
| 766 super(ChromeProxyPingback, self).CustomizeBrowserOptions(options) | 766 super(ChromeProxyPingback, self).CustomizeBrowserOptions(options) |
| 767 options.AppendExtraBrowserArgs( | 767 options.AppendExtraBrowserArgs( |
| 768 '--enable-data-reduction-proxy-force-pingback') | 768 '--enable-data-reduction-proxy-force-pingback') |
| 769 options.AppendExtraBrowserArgs( | 769 options.AppendExtraBrowserArgs( |
| 770 '--enable-stats-collection-bindings') | 770 '--enable-stats-collection-bindings') |
| 771 | 771 |
| 772 def AddResults(self, tab, results): | 772 def AddResults(self, tab, results): |
| 773 self._metrics.AddResultsForPingback(tab, results) | 773 self._metrics.AddResultsForPingback(tab, results) |
| 774 | 774 |
| 775 class ChromeProxyQuicTransaction(page_test.PageTest): | 775 class ChromeProxyQuicTransaction(legacy_page_test.LegacyPageTest): |
| 776 """Chrome quic proxy usage validation when connecting to a proxy that | 776 """Chrome quic proxy usage validation when connecting to a proxy that |
| 777 supports QUIC.""" | 777 supports QUIC.""" |
| 778 | 778 |
| 779 def __init__(self, *args, **kwargs): | 779 def __init__(self, *args, **kwargs): |
| 780 super(ChromeProxyQuicTransaction, self).__init__(*args, **kwargs) | 780 super(ChromeProxyQuicTransaction, self).__init__(*args, **kwargs) |
| 781 self._metrics = metrics.ChromeProxyMetric() | 781 self._metrics = metrics.ChromeProxyMetric() |
| 782 self._enable_proxy = True | 782 self._enable_proxy = True |
| 783 | 783 |
| 784 def CustomizeBrowserOptions(self, options): | 784 def CustomizeBrowserOptions(self, options): |
| 785 options.AppendExtraBrowserArgs( | 785 options.AppendExtraBrowserArgs( |
| (...skipping 10 matching lines...) Expand all Loading... |
| 796 if self._enable_proxy: | 796 if self._enable_proxy: |
| 797 measurements.WaitForViaHeader(tab) | 797 measurements.WaitForViaHeader(tab) |
| 798 tab.ClearCache(force=True) | 798 tab.ClearCache(force=True) |
| 799 self._metrics.Start(page, tab) | 799 self._metrics.Start(page, tab) |
| 800 | 800 |
| 801 def ValidateAndMeasurePage(self, page, tab, results): | 801 def ValidateAndMeasurePage(self, page, tab, results): |
| 802 # Wait for the load event. | 802 # Wait for the load event. |
| 803 tab.WaitForJavaScriptExpression('performance.timing.loadEventStart', 300) | 803 tab.WaitForJavaScriptExpression('performance.timing.loadEventStart', 300) |
| 804 self._metrics.Stop(page, tab) | 804 self._metrics.Stop(page, tab) |
| 805 self._metrics.AddResultsForQuicTransaction(tab, results) | 805 self._metrics.AddResultsForQuicTransaction(tab, results) |
| OLD | NEW |