def test_long_query(tmp_filepath):
        """ Output large query using Python class instance. """
        query_str = "SELECT * FROM STRING_SPLIT(REPLICATE(CAST('X,' AS VARCHAR(MAX)), 1024), ',')"
        try:
            mssqlcli = create_mssql_cli(interactive_mode=False, output_file=tmp_filepath)
            output_query = '\n'.join(mssqlcli.execute_query(query_str))
            file_baseline = get_io_paths('big.txt')[1]
            output_baseline = get_file_contents(file_baseline)
            assert output_query == output_baseline

            # test output to file
            output_query_from_file = get_file_contents(tmp_filepath)
            assert output_query_from_file == output_baseline
        finally:
            shutdown(mssqlcli)
Exemplo n.º 2
0
    def test_mssqlcliclient_multiple_merge(client_with_db):
        """
        Tests query with multiple merges. Requires creation of temp db.
        """
        file_input, _ = get_io_paths('multiple_merge.txt')
        query_input = get_file_contents(file_input)

        for rows, _, status, _, is_error in client_with_db.execute_query(query_input):
            if is_error:
                raise AssertionError("Query execution failed: {}".format(status))
            assert () == rows
    def test_output_file(self, query_str, test_file, tmp_filepath):
        """ Tests -o (and ensures file overwrite works) """
        file_input, file_baseline = get_io_paths(test_file)
        output_baseline = get_file_contents(file_baseline)
        query_str = '-Q "{}"'.format(query_str)     # append -Q for non-interactive call

        # test with -Q
        output_query_for_Q = self.execute_query_via_subprocess(query_str, output_file=tmp_filepath)
        assert output_query_for_Q == output_baseline

        # test with -i
        output_query_for_i = self.execute_query_via_subprocess("-i %s" % file_input,
                                                               output_file=tmp_filepath)
        assert output_query_for_i == output_baseline
    def test_query(self, query_str, test_file):
        """ Tests query outputs to command-line, ensuring -Q and -i produce
        the same results. """
        file_input, file_baseline = get_io_paths(test_file)
        output_baseline = get_file_contents(file_baseline)
        query_str = '-Q "{}"'.format(query_str)     # append -Q for non-interactive call

        # test with -Q
        output_query_for_Q = self.execute_query_via_subprocess(query_str)
        assert output_query_for_Q == output_baseline

        # test with -i
        output_query_for_i = self.execute_query_via_subprocess("-i %s" % file_input)
        assert output_query_for_i == output_baseline
    def execute_query_via_subprocess(cls, query_str, output_file=None):
        """ Helper method for running a query. """
        cli_call = os.path.join(".", "mssql-cli %s" % query_str)
        if output_file is not None:
            cli_call += " -o %s" % output_file
        p = subprocess.Popen(cli_call, shell=True, stdin=subprocess.PIPE,
                             stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

        output, errs = p.communicate()
        if errs:
            print(errs)

        if output_file:
            # get file contents if we used -o
            return get_file_contents(output_file)
        return output.decode("utf-8").replace('\r', '').strip()
    def test_multiple_merge(self):
        """
        Tests query with multiple merges. Requires creation of temp db.
        """
        try:
            # create temporary db
            db_name = create_test_db()

            file_input, file_baseline = get_io_paths('multiple_merge.txt')
            text_baseline = get_file_contents(file_baseline)

            # test with -i
            output_query = self.execute_query_via_subprocess("-i {} -d {}"\
                                                             .format(file_input, db_name))
            assert output_query == text_baseline
        finally:
            clean_up_test_db(db_name)
Exemplo n.º 7
0
 def test_query(query_str, test_file, mssqlcli):
     _, file_baseline = get_io_paths(test_file)
     output_baseline = get_file_contents(file_baseline)
     output_query = '\n'.join(mssqlcli.execute_query(query_str)).replace(
         '\r', '')
     assert output_query == output_baseline