Skip to content
Snippets Groups Projects
Commit ac6c50d6 authored by Ryan Gonzalez's avatar Ryan Gonzalez
Browse files

test-system-info-cli: Switch to shared functions for JSON & diff code


The last two commits extracted out the code for pretty printing JSON and
running diff on string changes, so switch over to those versions now.

Signed-off-by: default avatarRyan Gonzalez <ryan.gonzalez@collabora.com>
parent 986cd6d1
No related branches found
No related tags found
1 merge request!803Add shareable code for diff'ing JSON in tests
Pipeline #124019 passed
......@@ -43,6 +43,7 @@
#include <json-glib/json-glib.h>
#include "test-utils.h"
#include "test-json-utils.h"
#include "fake-home.h"
#if defined(__i386__) || defined(__x86_64__)
......@@ -737,34 +738,6 @@ static const JsonTest json_test[] =
},
};
static void
stdout_to_stderr_child_setup (gpointer nil)
{
if (dup2 (STDERR_FILENO, STDOUT_FILENO) != STDOUT_FILENO)
_srt_async_signal_safe_error ("test-system-info-cli",
"Unable to redirect stdout to stderr",
1);
}
static gchar *
pretty_print_json (const char *unformatted)
{
g_autoptr(JsonParser) parser = NULL;
JsonNode *node = NULL; /* not owned */
g_autoptr(JsonGenerator) generator = NULL;
g_autoptr(GError) error = NULL;
parser = json_parser_new ();
json_parser_load_from_data (parser, unformatted, -1, &error);
g_assert_no_error (error);
node = json_parser_get_root (parser);
g_assert_nonnull (node);
generator = json_generator_new ();
json_generator_set_root (generator, node);
json_generator_set_pretty (generator, TRUE);
return json_generator_to_data (generator, NULL);
}
static void
json_parsing (Fixture *f,
gconstpointer context)
......@@ -782,7 +755,6 @@ json_parsing (Fixture *f,
g_auto(GStrv) envp = NULL;
g_autoptr(GError) error = NULL;
const gchar *argv[] = { "steam-runtime-system-info", "--verbose", NULL };
gsize len;
g_test_message ("%s: input=%s output=%s", test->description, test->input_name, test->output_name);
......@@ -791,10 +763,7 @@ json_parsing (Fixture *f,
output_json = g_build_filename (f->srcdir, "json-report", multiarch_tuples[0],
test->output_name, NULL);
g_file_get_contents (output_json, &unformatted, &len, &error);
g_assert_no_error (error);
g_assert_cmpuint (len, ==, strlen (unformatted));
expectation = pretty_print_json (unformatted);
expectation = _srt_json_pretty_from_file (output_json);
g_clear_pointer (&unformatted, g_free);
envp = g_get_environ ();
......@@ -814,51 +783,9 @@ json_parsing (Fixture *f,
g_assert_true (result);
g_assert_cmpint (exit_status, ==, 0);
g_assert_nonnull (unformatted);
output = pretty_print_json (unformatted);
if (g_strcmp0 (output, expectation) != 0)
{
const char *artifacts = g_getenv ("AUTOPKGTEST_ARTIFACTS");
g_autofree gchar *tmpdir = NULL;
g_autofree gchar *expected_path = NULL;
g_autofree gchar *output_path = NULL;
const gchar *diff_argv[] = { "diff", "-u", "<expected>", "<output>", NULL };
if (artifacts == NULL)
{
tmpdir = g_dir_make_tmp ("srt-tests-XXXXXX", &error);
g_assert_no_error (error);
artifacts = tmpdir;
}
expected_path = g_build_filename (artifacts, "expected.json", NULL);
g_file_set_contents (expected_path, expectation, -1, &error);
g_assert_no_error (error);
output_path = g_build_filename (artifacts, "output.json", NULL);
g_file_set_contents (output_path, output, -1, &error);
g_assert_no_error (error);
g_assert_cmpstr (diff_argv[2], ==, "<expected>");
diff_argv[2] = expected_path;
g_assert_cmpstr (diff_argv[3], ==, "<output>");
diff_argv[3] = output_path;
g_assert_null (diff_argv[4]);
/* Ignore error from calling diff, if any: we're running it
* for its side-effect of producing output on our stderr. */
g_spawn_sync (NULL, (gchar **) diff_argv, NULL, G_SPAWN_SEARCH_PATH,
stdout_to_stderr_child_setup, NULL,
NULL, NULL, NULL, NULL);
g_test_message ("Output for comparison: %s %s",
expected_path, output_path);
if (tmpdir != NULL)
_srt_rm_rf (tmpdir);
}
output = _srt_json_pretty (unformatted);
g_assert_cmpstr (output, ==, expectation);
_srt_assert_streq_diff (expectation, output);
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment