qaToolsForPublicGateway.py (5020B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\sys\qaToolsForPublicGateway.py 2 from uthread2 import Sleep 3 4 class MockResponsePrimitive(object): 5 6 def __init__(self, status_code): 7 self.status_code = status_code 8 self.status_message = 'Error: %s' % status_code 9 10 11 class MockResponseChannel(object): 12 13 def __init__(self, status_code): 14 self.status_code = status_code 15 16 def receive(self): 17 response_primitive = MockResponsePrimitive(self.status_code) 18 response_payload = None 19 return (response_primitive, response_payload) 20 21 22 class PublicGatewayRequestHijacker(object): 23 SETTING_PUBLIC_REQUEST_HIJACKER_ENABLED = 'public_request_hijacker_enabled' 24 SETTING_PUBLIC_REQUEST_HIJACKER_ERROR = 'public_request_hijacker_error' 25 SETTING_PUBLIC_REQUEST_HIJACKER_LATENCY = 'public_request_hijacker_latency' 26 27 def __init__(self, public_gateway): 28 self.public_gateway = public_gateway 29 self._original_user_sender = public_gateway.send_user_request 30 self._original_character_sender = public_gateway.send_character_request 31 self._original_user_blocking_sender = public_gateway.send_blocking_user_request_and_receive_response 32 self._original_character_blocking_sender = public_gateway.send_blocking_character_request_and_receive_response 33 self._is_enabled = None 34 self._error = None 35 self._latency = None 36 37 def load_data(self): 38 self._load_data_from_settings() 39 self._apply() 40 41 def get_data(self): 42 return (self._is_enabled, self._error, self._latency) 43 44 def enable(self, error, latency): 45 self._is_enabled = True 46 self._error = error 47 self._latency = latency 48 self._save_data_and_apply() 49 50 def disable(self): 51 self._is_enabled = False 52 self._error = None 53 self._latency = None 54 self._save_data_and_apply() 55 56 def _apply(self): 57 if self._is_enabled: 58 self._hijack_methods() 59 else: 60 self._revert_methods_to_original() 61 62 def _load_data_from_settings(self): 63 self._is_enabled = settings.user.ui.Get(self.SETTING_PUBLIC_REQUEST_HIJACKER_ENABLED, False) 64 self._error = settings.user.ui.Get(self.SETTING_PUBLIC_REQUEST_HIJACKER_ERROR, None) 65 self._latency = settings.user.ui.Get(self.SETTING_PUBLIC_REQUEST_HIJACKER_LATENCY, None) 66 67 def _save_data_and_apply(self): 68 self._save_data_in_settings() 69 self._apply() 70 71 def _save_data_in_settings(self): 72 settings.user.ui.Set(self.SETTING_PUBLIC_REQUEST_HIJACKER_ENABLED, self._is_enabled) 73 settings.user.ui.Set(self.SETTING_PUBLIC_REQUEST_HIJACKER_ERROR, self._error) 74 settings.user.ui.Set(self.SETTING_PUBLIC_REQUEST_HIJACKER_LATENCY, self._latency) 75 settings.user.WriteToDiskImmediate() 76 77 def _revert_methods_to_original(self): 78 self.public_gateway.send_user_request = self._original_user_sender 79 self.public_gateway.send_character_request = self._original_character_sender 80 self.public_gateway.send_blocking_user_request_and_receive_response = self._original_user_blocking_sender 81 self.public_gateway.send_blocking_character_request_and_receive_response = self._original_character_blocking_sender 82 83 def _hijack_methods(self): 84 self.public_gateway.send_user_request = lambda *args, **kwargs: self._hijacked_method(self._error, self._latency, self._original_user_sender, *args, **kwargs) 85 self.public_gateway.send_character_request = lambda *args, **kwargs: self._hijacked_method(self._error, self._latency, self._original_character_sender, *args, **kwargs) 86 self.public_gateway.send_blocking_user_request_and_receive_response = lambda *args, **kwargs: self._hijacked_blocking_method(self._error, self._latency, self._original_user_blocking_sender, *args, **kwargs) 87 self.public_gateway.send_blocking_character_request_and_receive_response = lambda *args, **kwargs: self._hijacked_blocking_method(self._error, self._latency, self._original_character_blocking_sender, *args, **kwargs) 88 89 def _hijacked_method(self, error, latency, original_method, *args, **kwargs): 90 if latency: 91 Sleep(latency) 92 if not error: 93 return original_method(*args, **kwargs) 94 if isinstance(error, type) and issubclass(error, Exception): 95 raise error() 96 request_primitive = None 97 response_channel = MockResponseChannel(error) 98 return (request_primitive, response_channel) 99 100 def _hijacked_blocking_method(self, error, latency, original_method, *args, **kwargs): 101 if latency: 102 Sleep(latency) 103 if not error: 104 return original_method(*args, **kwargs) 105 if isinstance(error, type) and issubclass(error, Exception): 106 raise error() 107 response_primitive = MockResponsePrimitive(error) 108 response_payload = None 109 return (response_primitive, response_payload)