util_unittest.py revision cedac228d2dd51db4b79ea1e72c7f249408ee061
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)import os
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import unittest
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)import shutil
7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)import tempfile
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.core import util
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestWait(unittest.TestCase):
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  @staticmethod
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testNonTimeout():
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    def test():
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return True
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    util.WaitFor(test, 0.1)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testTimeout(self):
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    def test():
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return False
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertRaises(util.TimeoutException, lambda: util.WaitFor(test, 0.1))
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  def testCallable(self):
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    """Test methods and anonymous functions, functions are tested elsewhere."""
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    class Test(object):
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      def Method(self):
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return 'test'
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    util.WaitFor(Test().Method, 0.1)
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    util.WaitFor(lambda: 1, 0.1)
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    # Test noncallable condition.
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    self.assertRaises(TypeError, lambda: util.WaitFor('test', 0.1))
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  def testReturn(self):
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    self.assertEquals('test', util.WaitFor(lambda: 'test', 0.1))
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class TestGetSequentialFileName(unittest.TestCase):
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def __init__(self, *args, **kwargs):
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    super(TestGetSequentialFileName, self).__init__(*args, **kwargs)
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.test_directory = None
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def setUp(self):
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.test_directory = tempfile.mkdtemp()
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def testGetSequentialFileNameNoOtherSequentialFile(self):
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    next_json_test_file_path = util.GetSequentialFileName(
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        os.path.join(self.test_directory, 'test'))
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.assertEquals(os.path.join(self.test_directory, 'test_000'),
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                      next_json_test_file_path)
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def testGetSequentialFileNameWithOtherSequentialFiles(self):
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    # Create test_000.json, test_001.json, test_002.json in test directory.
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    for i in xrange(3):
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      with open(
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          os.path.join(self.test_directory, 'test_%03d.json' % i), 'w') as _:
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        pass
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    next_json_test_file_path = util.GetSequentialFileName(
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        os.path.join(self.test_directory, 'test'))
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.assertEquals(os.path.join(self.test_directory, 'test_003'),
61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                      next_json_test_file_path)
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def tearDown(self):
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    shutil.rmtree(self.test_directory)
65