Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
    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')
Ejemplo n.º 4
0
    def test_jut_jobs_list_with_no_running_jobs(self):
        """

        """
        process = jut('jobs', 'list')
        process.expect_status(0)
        process.expect_error('No running jobs')
Ejemplo n.º 5
0
    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')
Ejemplo n.º 6
0
    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()
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
    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}])
Ejemplo n.º 9
0
    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()
Ejemplo n.º 10
0
    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()
Ejemplo n.º 11
0
    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])
Ejemplo n.º 12
0
    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()
Ejemplo n.º 13
0
    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()
Ejemplo n.º 14
0
    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()
Ejemplo n.º 15
0
    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')
Ejemplo n.º 16
0
    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'}
                         ])