示例#1
0
def export_stubs():
    parser = ArgumentParser(description="Export scenario stubs")
    parser.add_argument('-s',
                        '--scenario',
                        dest='scenario',
                        help="scenario name")
    parser.add_argument('-p',
                        '--static-path-dir',
                        dest='static_path',
                        default=None,
                        help="Path to static dir to export files. If not "
                        "specified the output will placed in a tmp dir.")

    args = parser.parse_args()
    scenario = args.scenario
    if args.static_path:
        request = DummyRequestHandler(static_path=args.static_path)
    else:
        request = DummyRequestHandler()
    init_mongo()
    slave, master = start_redis({})
    response = api.export_stubs(request, scenario)
    print json.dumps(response,
                     sort_keys=True,
                     indent=4,
                     separators=(',', ': '))
示例#2
0
    def test_get_tracks_with_args(self):
        from stubo.service.admin import get_tracks
        import datetime

        dt = datetime.datetime(2013, 12, 11, 13, 0, 0)
        response = get_tracks(DummyRequestHandler(), 'xyz',
                              'mangle', True, 50, 1000,
                              dt.strftime('%Y-%m-%d %H:%M:%S'), 200, True,
                              'get/response')
        self.assertEqual(
            response['_filter'], {
                'function': 'get/response',
                'scenario': {
                    '$regex': 'xyz'
                },
                'request_params.session': {
                    '$regex': 'mangle'
                },
                'start_time': {
                    '$lt': dt
                },
                'duration_ms': {
                    '$gt': 200
                },
                'return_code': {
                    '$ne': 200
                }
            })
        self.assertEqual(response['_skip'], 50)
        self.assertEqual(response['_limit'], 1000)
示例#3
0
    def test_missing_session_param(self):
        from stubo.exceptions import HTTPClientError
        from urlparse import urlparse

        cmds = self.make_one(DummyRequestHandler())
        with self.assertRaises(HTTPClientError):
            cmds.run_command(urlparse('put/stub'), 1)
示例#4
0
    def test_get_tracks_with_bad_dt(self):
        from stubo.service.admin import get_tracks
        from stubo.exceptions import HTTPClientError

        with self.assertRaises(HTTPClientError):
            get_tracks(DummyRequestHandler(), '', '', False, 50, 1000,
                       '13-12-11', 0, False, '')
示例#5
0
def latency_pcent():
    parser = ArgumentParser(
          description="Get response latency % > limit"
        )  
    parser.add_argument('-c', '--cluster', dest='cluster',
        help="cluster name", default='aws_cluster1')
    parser.add_argument('-p', '--percent_above_value', dest='percent_above_value',
        help="percent found above this value",
        default='50')
    parser.add_argument('-f', '--from', dest='from_str',
        help="from (relative or absolute time period to graph)",
        default="-1hours")
    parser.add_argument('-t', '--to', dest='to_str',
        help="to (relative or absolute time period to graph)",
        default="now")

    args = parser.parse_args()
    cluster = args.cluster 
    percent_above_value = args.percent_above_value
    args = {
        'cluster_name' :  args.cluster,
        'percent_above_value'  : args.percent_above_value,
        'from' : [args.from_str],
        'to'   : [args.to_str]       
    }
    handler = DummyRequestHandler(**args)
    try:
        response = get_stats(handler)
        print response
    except StuboException, e:    
        print e
示例#6
0
 def test_get_tracks(self):
     from stubo.service.admin import get_tracks
     response = get_tracks(DummyRequestHandler(), '', False, 0, 100, 
            '', 0, False, '')
     self.assertEqual(response['_filter'],  {'function': '', 
                     'host': 'localhost'})
     self.assertEqual(response['_skip'], 0)  
     self.assertEqual(response['_limit'], 100)  
示例#7
0
def list_stubs_core(host, scenario):
    init_mongo()
    response = api.list_stubs(DummyRequestHandler(), scenario, host)
    if response:
        result = json.dumps(response,
                            sort_keys=True,
                            indent=4,
                            separators=(',', ': '))
    else:
        result = 'no stubs found'
    return result
示例#8
0
    def test_put_stub_empty_response(self):
        cmds = self.make_one(DummyRequestHandler(), 'cmd_file_empty_response')

        response = cmds.run()
        self.assertTrue('executed_commands' in response)
        self.assertEqual(len(response['executed_commands']['commands']), 3)

        self.assertEqual(response['executed_commands']['commands'][1],
                         ('put/stub?session=xy, matcher_text, EMPTY_RESPONSE', 400,
                          '400: put/stub response text can not be empty.: The server could '
                          'not comply with the request since it is either malformed or otherwise incorrect.'))
示例#9
0
 def test_put_stub_with_response_urltext(self):
     cmds = self.make_one(DummyRequestHandler(), 'cmd_file4')
     cmds.run()
     self.assertTrue(len(self.requests.posts) == 4)
示例#10
0
 def test_get_response_no_session(self):
     cmds = self.make_one(DummyRequestHandler(), 'cmd_file6')
     responses = cmds.run()
     get_response_result = responses['executed_commands']['commands'][-1]
     self.assertEqual(get_response_result[:2], ('get/response', 400))
示例#11
0
 def test_get_response_no_session(self):
     from stubo.exceptions import HTTPClientError
     cmds = self.make_one(DummyRequestHandler(), 'cmd_file6')
     responses = cmds.run()
     get_response_result = responses['executed_commands']['commands'][-1]
     self.assertEqual(get_response_result[:2], ('get/response', 400))
示例#12
0
 def test_put_stub_with_text_param(self):
     cmds = self.make_one(DummyRequestHandler(), 'cmd_file2')
     cmds.run()
     self.assertTrue(len(self.requests.posts) == 4)
示例#13
0
    def test_file_not_provided(self):
        from stubo.exceptions import HTTPServerError

        cmds = self.make_one(DummyRequestHandler())
        with self.assertRaises(HTTPServerError):
            cmds.run()
示例#14
0
    def test_file_not_found(self):
        from stubo.exceptions import HTTPClientError

        cmds = self.make_one(DummyRequestHandler(), 'bogus')
        with self.assertRaises(HTTPClientError):
            cmds.run()
示例#15
0
 def test_cmdfile_with_spaces(self):
     cmds = self.make_one(DummyRequestHandler(), 'cmd_file_with_spaces')
     cmds.run()
     self.assertTrue(len(self.requests.posts) == 4)
示例#16
0
 def test_get_response_no_session(self):
     from stubo.exceptions import HTTPClientError
     cmds = self.make_one(DummyRequestHandler(), 'cmd_file6')  
     with self.assertRaises(HTTPClientError):
         cmds.run()   
示例#17
0
 def test_ctor(self):
     cmds = self.make_one(DummyRequestHandler(), "/a/b/c")
     self.assertEqual(cmds.location.get_base_url(), 'http://localhost:8001')
     self.assertEqual(cmds.cmd_file_url, '/a/b/c')
示例#18
0
 def test_get_response9(self):
     cmds = self.make_one(DummyRequestHandler(), 'cmd_file9')
     cmds.run()
     self.assertTrue(len(self.requests.posts) == 5)
示例#19
0
    def test_get_track(self):
        from stubo.service.admin import get_track

        response = get_track(DummyRequestHandler(), 123)
        self.assertEqual(response, None)
示例#20
0
 def test_parse(self):
     importer = self.make_one(DummyRequestHandler())
     payload = importer.parse(yaml1)
     self.assertTrue('commands' in payload)
     self.assertTrue('recording' in payload)
示例#21
0
 def test_rtz_exit_full(self):
     cmds = self.make_one(DummyRequestHandler(), 'rtz_exit_full')
     cmds.run()
     self.assertTrue(len(self.requests.posts) == 6)
示例#22
0
def purge_stubs():
    # importing helper handler from testing deps
    from stubo.testing import DummyRequestHandler
    parser = ArgumentParser(
        description="Purge stubs older than given expiry date."
    )
    parser.add_argument('-l', '--list', action='store_const', const=True,
                        dest='list_only', help="Just list the stubs to delete.")
    parser.add_argument('-e', '--expiry', default=14, dest='expiry',
                        help="expiry is number of days from now (default is 14).")
    parser.add_argument('--host', default='all', dest='host',
                        help="specify the host uri to use (defaults to all)")
    parser.add_argument('-c', '--config', dest='config',
                        help='Path to configuration file (defaults to $CWD/etc/dev.ini)',
                        metavar='FILE')

    args = parser.parse_args()
    list_only = args.list_only or False
    expiry_days = args.expiry
    expiry = datetime.today().date() - timedelta(int(expiry_days))
    host = args.host
    config = args.config or get_default_config()
    logging.config.fileConfig(config)

    settings = read_config(config)
    dbenv = default_env.copy()
    dbenv.update((k[6:], coerce_mongo_param(k[6:], v)) for k, v in \
                 settings.iteritems() if k.startswith('mongo.'))
    log.debug('mongo params: {0}'.format(dbenv))

    log.info('purge stubs whereby all sessions in the scenario were last used before {0}'.format(expiry))

    db_conn = init_mongo(dbenv).connection
    slave, master = start_redis(settings)
    response = list_scenarios(host)
    if 'error' in response:
        print response['error']
        sys.exit(-1)

    handler = DummyRequestHandler()
    session_handler = DummyRequestHandler()

    for scenario_key in response['data']['scenarios']:
        log.debug("*** scenario '{0}' ***".format(scenario_key))
        hostname, scenario = scenario_key.split(':')
        if host != 'all' and host != hostname:
            continue
        handler.host = hostname
        handler.request.host = '{0}:8001'.format(hostname)
        session_handler.host = hostname
        session_handler.request.host = '{0}:8001'.format(hostname)
        handler.request.arguments['scenario'] = [scenario]
        status = get_status(handler)
        if 'error' in status:
            log.warn('get_status error: {0}'.format(status['error']))
        else:
            scenario_last_used = []
            sessions = status['data']['sessions']
            for session in zip(*sessions)[0]:
                log.debug("*** -> session '{0}' ***".format(session))
                session_handler.request.arguments['session'] = [session]
                session_status = get_status(session_handler)
                if 'error' in session_status:
                    log.warn('get_status error: {0}'.format(status['error']))
                else:
                    last_used = session_status['data']['session'].get('last_used', '-')
                    if last_used != '-':
                        scenario_last_used.append(as_date(last_used[0:10]))

            if scenario_last_used and (max(scenario_last_used) < expiry):
                log.info("sessions in scenario '{0}' were last used '{1}' which"
                         " is before expiry date '{2}'".format(scenario_key,
                                                               max(scenario_last_used), expiry))
                if not list_only:
                    response = delete_stubs(handler, scenario_name=scenario,
                                            force=True)
                    if 'error' in response:
                        log.error('delete stubs error: {0}'.format(response['error']))
                    else:
                        log.info('deleted stubs: {0}'.format(response['data']))
示例#23
0
 def test_put_stub_empty_response(self):
     from stubo.exceptions import HTTPClientError
     cmds = self.make_one(DummyRequestHandler(), 'cmd_file_empty_response')
     with self.assertRaises(HTTPClientError):
         cmds.run()