util_unittest.py revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)# Copyright 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