def test_config_add_interactive(self): """ verify that you can add a user interactively using `jut config add` """ with temp_jut_tools_home(): configuration = config.get_default() app_url = configuration["app_url"] # -s because getpass reads from the tty and screws up automated testing process = jut("config", "add", "-a", app_url, "-s") process.expect_output("Username: "******"jut-tools-user01\n") process.expect_output("Password: "******"bigdata\n") process.expect_status(0) # check the `jut config list` shows the right output process = jut("config", "list") process.expect_status(0) process.expect_output("Available jut configurations:\n") process.expect_output(confline(1, "jut-tools-user01", app_url, default=True)) process.expect_eof()
def test_config_rm_non_default_non_interactive(self): """ verify you can non interactively remove a non default configuration """ with temp_jut_tools_home(): jut_user = os.environ.get("JUT_USER") jut_pass = os.environ.get("JUT_PASS") configuration = config.get_default() app_url = configuration["app_url"] process = jut("config", "add", "-u", jut_user, "-p", jut_pass, "-a", app_url) process.expect_status(0) process = jut("config", "add", "-u", "jut-tools-user01", "-p", "bigdata", "-a", app_url) process.expect_status(0) process = jut("config", "list") process.expect_status(0) process.expect_output("Available jut configurations:\n") process.expect_output(confline(1, jut_user, app_url, default=True)) process.expect_output(confline(2, "jut-tools-user01", app_url, default=False)) process = jut("config", "rm", "-u", "jut-tools-user01", "-a", app_url) process.expect_status(0) process = jut("config", "list") process.expect_status(0) process.expect_output("Available jut configurations:\n") process.expect_output(confline(1, jut_user, app_url, default=True)) process.expect_eof()
def test_jut_jobs_connect_on_persistent_job(self): """ verify we can reconnect to a persistent job """ with temp_jut_tools_home(): configuration = config.get_default() app_url = configuration['app_url'] process = jut('config', 'add', '-u', 'jut-tools-user03', '-p', 'bigdata', '-a', app_url, '-d') process.expect_status(0) process = jut('run', '--name', 'Persistent Job #3', '-p', 'emit -limit 10000 ' '| put source_type="event", foo="bar"' '| (write -space "%s"; keep foo | pass)' % JutJobsTests.test_space) process.expect_status(0) job_id = process.read_output().strip() process = jut('jobs', 'connect', job_id, '-f', 'text') # verify that we output 'bar' a few times process.expect_output('bar\n') process.expect_output('bar\n') process.expect_output('bar\n') process.expect_output('bar\n') process.expect_output('bar\n') process.send_signal(signal.SIGTERM) process.expect_status(-signal.SIGTERM) process = jut('jobs', 'kill', job_id, '-y') process.expect_status(0) process.expect_eof() process = jut('jobs', 'list') process.expect_status(0) process.expect_error('No running jobs')
def test_jut_jobs_list_with_no_running_jobs(self): """ """ process = jut('jobs', 'list') process.expect_status(0) process.expect_error('No running jobs')
def test_jut_kill_on_persistent_job(self): """ verify that a persistent job can be killed using `jut jobs kill` """ with temp_jut_tools_home(): configuration = config.get_default() app_url = configuration['app_url'] process = jut('config', 'add', '-u', 'jut-tools-user02', '-p', 'bigdata', '-a', app_url, '-d') process.expect_status(0) process = jut('run', '--name', 'Persistent Job #1', '-p', 'emit -limit 10000 ' '| put source_type="event" ' '| write -space "%s"' % JutJobsTests.test_space) process.expect_status(0) job_id = process.read_output().strip() process = jut('jobs', 'list', '-f', 'text') process.expect_status(0) output = process.read_output() lines = output.split('\n') re.match(r'Job ID\w+Juttle Name\w+Owner\w+Start Date\w+Persistent', lines[0]) re.match(r'%s\w+Persistent Job #1\w+jut-tools-user02.*YES' % job_id, lines[1]) process = jut('jobs', 'kill', job_id, '-y') process.expect_status(0) process.expect_eof() process = jut('jobs', 'list') process.expect_status(0) process.expect_error('No running jobs')
def test_config_add_non_interactive(self): """ add a few tests accounts to the default configuration and then add those configurations to the current jut tools config """ with temp_jut_tools_home(): configuration = config.get_default() app_url = configuration["app_url"] process = jut("config", "add", "-u", "jut-tools-user01", "-p", "bigdata", "-a", app_url) process.expect_status(0) process = jut("config", "list") process.expect_status(0) process.expect_output("Available jut configurations:\n") process.expect_output(confline(1, "jut-tools-user01", app_url, default=True)) process.expect_eof()
def test_jut_run_syntatically_incorrect_program_reports_error_with_format_csv(self): """ verify an invalid program reports the failure correctly when using csv output format """ process = jut('run', BAD_PROGRAM, '-f', 'json') process.expect_status(255) process.expect_error(BAD_PROGRAM_ERROR)
def test_jut_upload_to_webhook_for_default_configuration(self): """ and verify the output is JSON format """ _, json_filename = tempfile.mkstemp(suffix='.json') tag = str(uuid.uuid1()) data = [] for index in range(0, 10): data.append({ "tag": tag, "index": index }) with open(json_filename, 'w') as json_file: json_file.write(json.dumps(data)) process = jut('upload', json_filename, '--space', JutUploadTests.test_space, stdin=None) process.expect_status(0) # read a few times till all the points appear as it takes a few seconds # before the data is committed permanently points = [] retry = 0 juttle = "read -space '%s' -last :5 minutes: tag='%s'" % \ (JutUploadTests.test_space, tag) while len(points) < 10 and retry < 10: process = jut('run', juttle) process.expect_status(0) points = json.loads(process.read_output()) process.expect_eof() retry += 1 process = jut('run', '%s | reduce count()' % juttle) process.expect_status(0) points = json.loads(process.read_output()) process.expect_eof() self.assertEqual(points, [{'count': 10}])
def test_negative_config_list(self): """ when calling `jut config list` if you haven't configured yet we should fail correctly and print the appropriate message """ with temp_jut_tools_home(): process = jut("config", "list") process.expect_error(NO_CONFIG_MESSAGE) process.expect_status(255) process.expect_eof()
def test_config_defaults_interactive(self): """ verify you can interactively modify the config default """ with temp_jut_tools_home() as home_dir: jut_user = os.environ.get("JUT_USER") jut_pass = os.environ.get("JUT_PASS") configuration = config.get_default() app_url = configuration["app_url"] process = jut("config", "add", "-u", jut_user, "-p", jut_pass, "-a", app_url) process.expect_status(0) process = jut("config", "add", "-u", "jut-tools-user01", "-p", "bigdata", "-a", app_url) process.expect_status(0) process = jut("config", "list") process.expect_status(0) process.expect_output("Available jut configurations:\n") process.expect_output(confline(1, jut_user, app_url, default=True)) process.expect_output(confline(2, "jut-tools-user01", app_url, default=False)) process = jut("config", "defaults") process.expect_output("Available jut configurations:\n") process.expect_output(confline(1, jut_user, app_url, default=True)) process.expect_output(confline(2, "jut-tools-user01", app_url, default=False)) process.expect_output("Set default configuration to: ") process.send("2\n") process.expect_output("Configuration updated at %s\n" % home_dir) process.expect_status(0) process.expect_eof() process = jut("config", "list") process.expect_status(0) process.expect_output("Available jut configurations:\n") process.expect_output(confline(1, jut_user, app_url, default=False)) process.expect_output(confline(2, "jut-tools-user01", app_url, default=True)) process.expect_eof()
def test_jut_jobs_with_running_jobs(self): """ verify that a simple long running program can be displayed correctly when running `jut jobs list` """ with temp_jut_tools_home(): configuration = config.get_default() app_url = configuration['app_url'] process = jut('config', 'add', '-u', 'jut-tools-user01', '-p', 'bigdata', '-a', app_url, '-d') process.expect_status(0) process = jut('run', '--name', 'Persistent Job #1', '-p', 'emit -limit 100 ' '| put source_type="event" ' '| write -space "%s"' % JutJobsTests.test_space) process.expect_status(0) job_id = process.read_output() process = jut('jobs', 'list', '-f', 'text') process.expect_status(0) output = process.read_output() lines = output.split('\n') re.match(r'Job ID\w+Juttle Name\w+Owner\w+Start Date\w+Persistent', lines[0]) re.match(r'%s\w+Persistent Job #1\w+jut-tools-user01.*YES' % job_id, lines[1])
def test_config_defaults_non_interactive(self): """ see that you can easily change the default configuration in use and that it switches back once you delete the default configuration """ with temp_jut_tools_home() as home_dir: jut_user = os.environ.get("JUT_USER") jut_pass = os.environ.get("JUT_PASS") configuration = config.get_default() app_url = configuration["app_url"] process = jut("config", "add", "-u", jut_user, "-p", jut_pass, "-a", app_url) process.expect_status(0) process = jut("config", "add", "-u", "jut-tools-user01", "-p", "bigdata", "-a", app_url) process.expect_status(0) process = jut("config", "list") process.expect_status(0) process.expect_output("Available jut configurations:\n") process.expect_output(confline(1, jut_user, app_url, default=True)) process.expect_output(confline(2, "jut-tools-user01", app_url, default=False)) process.expect_eof() process = jut("config", "defaults", "-u", "jut-tools-user01", "-a", app_url) process.expect_status(0) process.expect_output("Configuration updated at %s\n" % home_dir) process.expect_eof() process = jut("config", "list") process.expect_status(0) process.expect_output("Available jut configurations:\n") process.expect_output(confline(1, jut_user, app_url, default=False)) process.expect_output(confline(2, "jut-tools-user01", app_url, default=True)) process.expect_eof()
def test_config_list(self): """ list the saved configuration and verify it only contains the single test account with JUT_USER used by the jut unittests """ jut_user = os.environ.get("JUT_USER") configuration = config.get_default() app_url = configuration["app_url"] process = jut("config", "list") process.expect_status(0) process.expect_output("Available jut configurations:\n") process.expect_output(confline(1, jut_user, app_url, default=True)) process.expect_eof()
def test_config_rm_default_interactive(self): """ verify you can interactively remove a default configuration and be prompted to pick a new default """ with temp_jut_tools_home(): jut_user = os.environ.get("JUT_USER") jut_pass = os.environ.get("JUT_PASS") configuration = config.get_default() app_url = configuration["app_url"] process = jut("config", "add", "-u", jut_user, "-p", jut_pass, "-a", app_url) process.expect_status(0) process = jut("config", "add", "-u", "jut-tools-user01", "-p", "bigdata", "-a", app_url) process.expect_status(0) process = jut("config", "add", "-u", "jut-tools-user02", "-p", "bigdata", "-a", app_url) process.expect_status(0) process = jut("config", "list") process.expect_status(0) process.expect_output("Available jut configurations:\n") process.expect_output(confline(1, jut_user, app_url, default=True)) process.expect_output(confline(2, "jut-tools-user01", app_url, default=False)) process.expect_output(confline(3, "jut-tools-user02", app_url, default=False)) process = jut("config", "rm") process.expect_output("Available jut configurations:\n") process.expect_output(confline(1, jut_user, app_url, default=True)) process.expect_output(confline(2, "jut-tools-user01", app_url, default=False)) process.expect_output(confline(3, "jut-tools-user02", app_url, default=False)) process.expect_output("Which configuration to remove: ") process.send("1\n") process.expect_output("Pick a default configuration from the list below\n") process.expect_output("Available jut configurations:\n") process.expect_output(confline(1, "jut-tools-user01", app_url, default=False)) process.expect_output(confline(2, "jut-tools-user02", app_url, default=False)) process.expect_output("Set default configuration to: ") process.send("2\n") process.expect_status(0) process = jut("config", "list") process.expect_status(0) process.expect_output("Available jut configurations:\n") process.expect_output(confline(1, "jut-tools-user01", app_url, default=False)) process.expect_output(confline(2, "jut-tools-user02", app_url, default=True)) process.expect_eof()
def test_jut_run_emit_to_text(self): """ use jut to run the juttle program: emit -from :2014-01-01T00:00:00.000Z: -limit 5 and verify the output is in the expected text format """ process = jut('run', '--format', 'text', 'emit -from :2014-01-01T00:00:00.000Z: -limit 5') process.expect_status(0) stdout = process.read_output() process.expect_eof() self.assertEqual(stdout, '2014-01-01T00:00:00.000Z\n' '2014-01-01T00:00:01.000Z\n' '2014-01-01T00:00:02.000Z\n' '2014-01-01T00:00:03.000Z\n' '2014-01-01T00:00:04.000Z\n')
def test_jut_run_emit_to_json(self): """ use jut to run the juttle program: emit -from :2014-01-01T00:00:00.000Z: -limit 5 and verify the output is in the expected JSON format """ process = jut('run', 'emit -from :2014-01-01T00:00:00.000Z: -limit 5') process.expect_status(0) points = json.loads(process.read_output()) process.expect_eof() self.assertEqual(points, [ {'time': '2014-01-01T00:00:00.000Z'}, {'time': '2014-01-01T00:00:01.000Z'}, {'time': '2014-01-01T00:00:02.000Z'}, {'time': '2014-01-01T00:00:03.000Z'}, {'time': '2014-01-01T00:00:04.000Z'} ])