Exemple #1
0
    def delete_caches(self, scenario_name):
        key = self.scenario_key_name(scenario_name)
        master = get_redis_master()
        deleted_responses = self.get_cache_backend()(master).remove(
            self.get_response_key(scenario_name))
        deleted_requests = self.get_cache_backend()(master).remove(
            self.get_request_key(scenario_name))

        # delete request indexes
        deleted_request_indexes = []
        for k in (self.get_request_index_key(scenario_name),
                  self.get_saved_request_index_key(scenario_name)):
            deleted_request_indexes.append(
                self.get_cache_backend()(master).remove(k))

        session_names = self.get_cache_backend()(master).keys(key)
        # log.debug('session_names: {0}'.format(session_names))
        deleted_sessions_map = 0
        if session_names:
            sessions_key = '{0}:sessions'.format(self.host)
            for k in session_names:
                deleted_sessions_map += self.get_cache_backend()(
                    master).delete(sessions_key, k)
        deleted_sessions = self.get_cache_backend()(master).remove(key)
        log.debug('deleted_response: {0}, deleted_requests: {1}, '
                  ', deleted_sessions_map: {2}, deleted_sessions: {3}, '
                  'deleted_request_indexes: {4}'.format(
                      deleted_responses, deleted_requests,
                      deleted_sessions_map, deleted_sessions,
                      deleted_request_indexes))
Exemple #2
0
    def delete_caches(self, scenario_name):
        key = self.scenario_key_name(scenario_name)
        master = get_redis_master()
        deleted_responses = self.get_cache_backend()(master).remove(self.get_response_key(
            scenario_name))
        deleted_requests = self.get_cache_backend()(master).remove(self.get_request_key(
            scenario_name))

        # delete request indexes
        deleted_request_indexes = []
        for k in (self.get_request_index_key(scenario_name),
                  self.get_saved_request_index_key(scenario_name)):
            deleted_request_indexes.append(self.get_cache_backend()(master).remove(k))

        session_names = self.get_cache_backend()(master).keys(key)
        # log.debug('session_names: {0}'.format(session_names))
        deleted_sessions_map = 0
        if session_names:
            sessions_key = '{0}:sessions'.format(self.host)
            for k in session_names:
                deleted_sessions_map += self.get_cache_backend()(master).delete(sessions_key, k)
        deleted_sessions = self.get_cache_backend()(master).remove(key)
        log.debug('deleted_response: {0}, deleted_requests: {1}, '
                  ', deleted_sessions_map: {2}, deleted_sessions: {3}, '
                  'deleted_request_indexes: {4}'.format(deleted_responses,
                                                        deleted_requests, deleted_sessions_map, deleted_sessions,
                                                        deleted_request_indexes))
Exemple #3
0
    def assert_valid_session(self, scenario_name, session_name):
        scenario_key = self.scenario_key_name(scenario_name)
        # if session exists it can only be dormant
        if self.exists(scenario_key, session_name):
            session = self.get_session(scenario_name,
                                       session_name,
                                       local=False)
            session_status = session['status']
            if session_status != 'dormant':
                raise exception_response(400,
                                         title='Session already exists '
                                         '- {0}:{1} in {2} mode.'.format(
                                             scenario_key, session_name,
                                             session_status))

                # Limitation: as the session name is not passed in as an arg to get/response
        # we need a mapping to find the session for a scenario.
        # host:sessions -> session_name->scenario_name
        # we can therefore only have one session name per host/scenario
        sessions_key = '{0}:sessions'.format(self.host)
        scenario_found = self.get_cache_backend()(get_redis_master()).get_raw(
            sessions_key, session_name)
        if scenario_found and scenario_found != scenario_name:
            raise exception_response(
                400,
                title='Session {0} can not be '
                'used for scenario: {1}. This session is already being used '
                'with another scenario: {2} on host: {3}.'.format(
                    session_name, scenario_name, scenario_found, self.host))
Exemple #4
0
    def assert_valid_session(self, scenario_name, session_name):
        scenario_key = self.scenario_key_name(scenario_name)
        # if session exists it can only be dormant
        if self.exists(scenario_key, session_name):
            session = self.get_session(scenario_name, session_name, local=False)
            session_status = session['status']
            if session_status != 'dormant':
                raise exception_response(400, title='Session already exists '
                                                    '- {0}:{1} in {2} mode.'.format(scenario_key, session_name,
                                                                                    session_status))

                # Limitation: as the session name is not passed in as an arg to get/response
        # we need a mapping to find the session for a scenario. 
        # host:sessions -> session_name->scenario_name
        # we can therefore only have one session name per host/scenario
        sessions_key = '{0}:sessions'.format(self.host)
        scenario_found = self.get_cache_backend()(get_redis_master()).get_raw(sessions_key,
                                                                     session_name)
        if scenario_found and scenario_found != scenario_name:
            raise exception_response(400, title='Session {0} can not be '
                                                'used for scenario: {1}. This session is already being used '
                                                'with another scenario: {2} on host: {3}.'.format(session_name,
                                                                                                  scenario_name,
                                                                                                  scenario_found,
                                                                                                  self.host))
Exemple #5
0
 def get_all_saved_request_index_data(self):
     master = get_redis_master()
     keys = master.keys('{0}:*:saved_request_index'.format(self.host))
     info = {}
     for key in keys:
         scenario_name = key.split(':')[1]
         info[scenario_name] = self.get_cache_backend()(master).get_all(key)
     return info
Exemple #6
0
 def get_all_saved_request_index_data(self):
     master = get_redis_master()
     keys = master.keys('{0}:*:saved_request_index'.format(self.host))
     info = {}
     for key in keys:
         scenario_name = key.split(':')[1]
         info[scenario_name] = self.get_cache_backend()(master).get_all(key)
     return info
Exemple #7
0
 def delete_session_data(self, scenario_name, session):
     master = get_redis_master()
     keys = (self.get_request_key(scenario_name),
             self.get_response_key(scenario_name),
             self.get_request_index_key(scenario_name))
     hashes = [x.format(self.scenario_key_name(scenario_name)) for x in keys]
     for _hash in hashes:
         keys = self.get_cache_backend()(master).keys(_hash)
         session_keys = [x for x in keys if x.startswith('{0}:'.format(
             session))]
         if session_keys:
             log.debug('deleting {0} from {1}'.format(session_keys, _hash))
             num_deleted = 0
             for k in session_keys:
                 num_deleted += self.get_cache_backend()(master).delete(_hash, k)
             log.debug('deleted {0}'.format(num_deleted))
Exemple #8
0
 def get_response(self, scenario_name, session_name, response_ids,
                  request_index_key):
     """
     returns response or None
     """
     num_responses = len(response_ids)
     index = 0
     if num_responses > 1:
         # stateful response: lookup the response index value stored on master
         master = get_redis_master()
         request_index_name = self.get_request_index_key(scenario_name)
         request_index_key = '{0}:{1}'.format(session_name, request_index_key)
         index = self.get(request_index_name, request_index_key)
         if not index or index < num_responses:
             index = self.get_cache_backend()(master).incr(request_index_name, request_index_key)
         index -= 1
     response_key = '{0}:{1}'.format(session_name, response_ids[index])
     return self.get(self.get_response_key(scenario_name), response_key,
                     local=True)
Exemple #9
0
 def delete_session_data(self, scenario_name, session):
     master = get_redis_master()
     keys = (self.get_request_key(scenario_name),
             self.get_response_key(scenario_name),
             self.get_request_index_key(scenario_name))
     hashes = [
         x.format(self.scenario_key_name(scenario_name)) for x in keys
     ]
     for _hash in hashes:
         keys = self.get_cache_backend()(master).keys(_hash)
         session_keys = [
             x for x in keys if x.startswith('{0}:'.format(session))
         ]
         if session_keys:
             log.debug('deleting {0} from {1}'.format(session_keys, _hash))
             num_deleted = 0
             for k in session_keys:
                 num_deleted += self.get_cache_backend()(master).delete(
                     _hash, k)
             log.debug('deleted {0}'.format(num_deleted))
Exemple #10
0
 def get_response(self, scenario_name, session_name, response_ids,
                  request_index_key):
     """
     returns response or None
     """
     num_responses = len(response_ids)
     index = 0
     if num_responses > 1:
         # stateful response: lookup the response index value stored on master
         master = get_redis_master()
         request_index_name = self.get_request_index_key(scenario_name)
         request_index_key = '{0}:{1}'.format(session_name,
                                              request_index_key)
         index = self.get(request_index_name, request_index_key)
         if not index or index < num_responses:
             index = self.get_cache_backend()(master).incr(
                 request_index_name, request_index_key)
         index -= 1
     response_key = '{0}:{1}'.format(session_name, response_ids[index])
     return self.get(self.get_response_key(scenario_name),
                     response_key,
                     local=True)
Exemple #11
0
def get_redis_server(local=True):
    return get_redis_slave() if local else get_redis_master()
Exemple #12
0
 def set_stubo_setting(self, setting, value, all_hosts=False):
     key = 'stubo_setting'
     if not all_hosts:
         key = '{0}:{1}'.format(self.host, key)
     return self.get_cache_backend()(get_redis_master()).set(key, setting, value)
Exemple #13
0
 def set_delay_policy(self, name, data):
     key = self.get_delay_policy_key()
     return self.get_cache_backend()(get_redis_master()).set(
         key, name, data)
Exemple #14
0
 def delete_saved_request_index(self, scenario_name, name):
     master = get_redis_master()
     return self.get_cache_backend()(master).delete(self.get_saved_request_index_key(
         scenario_name), name)
Exemple #15
0
 def get_request_index_data(self, scenario_name):
     master = get_redis_master()
     return self.get_cache_backend()(master).get_all_raw(self.get_request_index_key(
         scenario_name))
Exemple #16
0
 def set_delay_policy(self, name, data):
     key = self.get_delay_policy_key()
     return self.get_cache_backend()(get_redis_master()).set(key, name, data)
Exemple #17
0
 def get_request_index_data(self, scenario_name):
     master = get_redis_master()
     return self.get_cache_backend()(master).get_all_raw(
         self.get_request_index_key(scenario_name))
Exemple #18
0
 def delete_saved_request_index(self, scenario_name, name):
     master = get_redis_master()
     return self.get_cache_backend()(master).delete(
         self.get_saved_request_index_key(scenario_name), name)
Exemple #19
0
def get_redis_server(local=True):
    return get_redis_slave() if local else get_redis_master()
Exemple #20
0
 def set_stubo_setting(self, setting, value, all_hosts=False):
     key = 'stubo_setting'
     if not all_hosts:
         key = '{0}:{1}'.format(self.host, key)
     return self.get_cache_backend()(get_redis_master()).set(
         key, setting, value)