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 3# found in the LICENSE file. 4 5import copy 6import sets 7 8 9_global_test_context = None 10 11 12def GetCopy(): 13 return copy.deepcopy(_global_test_context) 14 15 16class TypTestContext(object): 17 """ The TestContext that is used for passing data from the main test process 18 to typ's subprocesses. Those includes: 19 _ client_configs: list of client configs that contain infos about binaries 20 to use. 21 _ finder_options: the commandline options object. This is an instance of 22 telemetry.internal.browser.browser_options.BrowserFinderOptions. 23 _ test_class: the name of the test class to be run. 24 _ test_case_ids_to_run: the ids of the test cases to be run. e.g: 25 foo.bar.Test1, foo.bar.Test2,.. 26 27 28 This object is designed to be pickle-able so that it can be easily pass from 29 the main process to test subprocesses. It also supports immutable mode to 30 ensure its data won't be changed by the subprocesses. 31 """ 32 def __init__(self): 33 self._client_configs = [] 34 self._finder_options = None 35 self._test_class = None 36 self._test_cases_ids_to_run = set() 37 self._frozen = False 38 39 def Freeze(self): 40 """ Makes the |self| object immutable. 41 42 Calling setter on |self|'s property will throw exception. 43 """ 44 assert self._finder_options 45 assert self._test_class 46 self._frozen = True 47 self._test_cases_ids_to_run = sets.ImmutableSet(self._test_cases_ids_to_run) 48 self._client_configs = tuple(self._client_configs) 49 50 @property 51 def finder_options(self): 52 return self._finder_options 53 54 @property 55 def client_configs(self): 56 return self._client_configs 57 58 @property 59 def test_class(self): 60 return self._test_class 61 62 @property 63 def test_case_ids_to_run(self): 64 return self._test_cases_ids_to_run 65 66 @finder_options.setter 67 def finder_options(self, value): 68 assert not self._frozen 69 self._finder_options = value 70 71 @test_class.setter 72 def test_class(self, value): 73 assert not self._test_class 74 self._test_class = value 75