1# Copyright (c) 2015 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4import json
5import os
6import unittest
7
8
9from catapult_build import dev_server
10from perf_insights_build import perf_insights_dev_server_config
11from tracing_build import tracing_dev_server_config
12import webapp2
13
14class DevServerTests(unittest.TestCase):
15
16  def setUp(self):
17    self.pds = [
18        perf_insights_dev_server_config.PerfInsightsDevServerConfig(),
19        tracing_dev_server_config.TracingDevServerConfig(),
20    ]
21
22    self.args = dev_server._AddCommandLineArguments(self.pds, [])
23
24  def testStaticDirectoryHandling(self):
25    app = dev_server.DevServerApp(self.pds, self.args)
26    request = webapp2.Request.blank('/tracing/tests.html')
27    response = request.get_response(app)
28
29    self.assertEqual(response.status_int, 200)
30
31  def testGetURLForAbsFilename(self):
32    app = dev_server.DevServerApp(self.pds, self.args)
33    class FakeServer(object):
34      pass
35    app.server = FakeServer()
36
37    cfg = tracing_dev_server_config.TracingDevServerConfig()
38    base_html_filename = os.path.join(cfg.project.tracing_src_path,
39                                      'base', 'base.html')
40    url = app.GetURLForAbsFilename(base_html_filename)
41    self.assertEqual(url, '/tracing/base/base.html')
42
43    url = app.GetURLForAbsFilename('/tmp/foo')
44    self.assertIsNone(url)
45
46  def testGetAbsFilenameForHref(self):
47    app = dev_server.DevServerApp(self.pds, self.args)
48
49    cfg = tracing_dev_server_config.TracingDevServerConfig()
50    base_html_filename = os.path.join(cfg.project.tracing_src_path,
51                                      'base', 'base.html')
52
53    filename = app.GetAbsFilenameForHref('/tracing/base/base.html')
54    self.assertEqual(base_html_filename, filename)
55
56    filename = app.GetAbsFilenameForHref('/etc/passwd')
57    self.assertIsNone(filename)
58
59  def testTestDataDirectory(self):
60    app = dev_server.DevServerApp(self.pds, self.args)
61    request = webapp2.Request.blank('/tracing/test_data/trivial_trace.json')
62    response = request.get_response(app)
63
64    self.assertEqual(response.status_int, 200)
65
66  def testTestDataDirectoryListing(self):
67    app = dev_server.DevServerApp(self.pds, self.args)
68    request = webapp2.Request.blank('/tracing/test_data/__file_list__')
69    response = request.get_response(app)
70
71    self.assertEqual(response.status_int, 200)
72    res = json.loads(response.body)
73    assert '/tracing/test_data/trivial_trace.json' in res
74
75  def testSkpDataDirectoryListing(self):
76    app = dev_server.DevServerApp(self.pds, self.args)
77    request = webapp2.Request.blank('/tracing/skp_data/__file_list__')
78    response = request.get_response(app)
79
80    self.assertEqual(response.status_int, 200)
81    res = json.loads(response.body)
82    assert '/tracing/skp_data/lthi_cats.skp' in res
83
84  def testTestListingHandler(self):
85    app = dev_server.DevServerApp(self.pds, self.args)
86    request = webapp2.Request.blank('/tracing/tests')
87    response = request.get_response(app)
88
89    self.assertEqual(response.status_int, 200)
90    res = json.loads(response.body)
91    self.assertTrue('test_relpaths' in res)
92    self.assertTrue(len(res['test_relpaths']) > 0)
93