static void mock_installed_package(const char *package, const char *installed_version) { struct cork_buffer buf1 = CORK_BUFFER_INIT(); struct cork_buffer buf2 = CORK_BUFFER_INIT(); cork_buffer_printf(&buf1, "pacman -Q %s", package); cork_buffer_printf(&buf2, "%s %s\n", package, installed_version); bz_mock_subprocess(buf1.buf, buf2.buf, NULL, 0); cork_buffer_done(&buf1); cork_buffer_done(&buf2); }
static void mock_uninstalled_package(const char *package) { struct cork_buffer buf1 = CORK_BUFFER_INIT(); struct cork_buffer buf2 = CORK_BUFFER_INIT(); cork_buffer_printf(&buf1, "pacman -Q %s", package); cork_buffer_printf(&buf2, "error: package '%s' was not found\n", package); bz_mock_subprocess(buf1.buf, NULL, buf2.buf, 1); cork_buffer_done(&buf1); cork_buffer_done(&buf2); }
static void mock_available_package(const char *package, const char *available_version) { struct cork_buffer buf1 = CORK_BUFFER_INIT(); struct cork_buffer buf2 = CORK_BUFFER_INIT(); cork_buffer_printf(&buf1, "pacman -Sddp --print-format %%v %s", package); cork_buffer_printf(&buf2, "%s\n", available_version); bz_mock_subprocess(buf1.buf, buf2.buf, NULL, 0); cork_buffer_done(&buf1); cork_buffer_done(&buf2); }
static void mock_unavailable_package(const char *package) { struct cork_buffer buf1 = CORK_BUFFER_INIT(); struct cork_buffer buf2 = CORK_BUFFER_INIT(); cork_buffer_printf(&buf1, "pacman -Sddp --print-format %%v %s", package); cork_buffer_printf(&buf2, "error: target not found: %s\n", package); bz_mock_subprocess(buf1.buf, NULL, buf2.buf, 1); cork_buffer_done(&buf1); cork_buffer_done(&buf2); }
static void mock_unavailable_package(const char *package) { struct cork_buffer buf1 = CORK_BUFFER_INIT(); struct cork_buffer buf2 = CORK_BUFFER_INIT(); cork_buffer_printf(&buf1, "apt-cache show --no-all-versions %s", package); cork_buffer_printf(&buf2, "N: Unable to locate package %s\n", package); bz_mock_subprocess(buf1.buf, NULL, buf2.buf, 100); cork_buffer_done(&buf1); cork_buffer_done(&buf2); }
static void mock_available_package(const char *package, const char *available_version) { struct cork_buffer buf1 = CORK_BUFFER_INIT(); struct cork_buffer buf2 = CORK_BUFFER_INIT(); cork_buffer_printf(&buf1, "apt-cache show --no-all-versions %s", package); cork_buffer_printf(&buf2, "Version: %s\n", available_version); bz_mock_subprocess(buf1.buf, buf2.buf, NULL, 0); cork_buffer_done(&buf1); cork_buffer_done(&buf2); }
static void mock_installed_package(const char *package, const char *installed_version) { struct cork_buffer buf1 = CORK_BUFFER_INIT(); struct cork_buffer buf2 = CORK_BUFFER_INIT(); cork_buffer_printf (&buf1, "dpkg-query -W -f ${Status}\\n${Version} %s", package); cork_buffer_printf(&buf2, "install ok installed\n%s", installed_version); bz_mock_subprocess(buf1.buf, buf2.buf, NULL, 0); cork_buffer_done(&buf1); cork_buffer_done(&buf2); }
static void mock_uninstalled_package(const char *package) { struct cork_buffer buf1 = CORK_BUFFER_INIT(); struct cork_buffer buf2 = CORK_BUFFER_INIT(); cork_buffer_printf (&buf1, "dpkg-query -W -f ${Status}\\n${Version} %s", package); cork_buffer_printf (&buf2, "dpkg-query: no packages found match %s\n", package); bz_mock_subprocess(buf1.buf, NULL, buf2.buf, 1); cork_buffer_done(&buf1); cork_buffer_done(&buf2); }
static void mock_package_installation(const char *package, const char *version) { struct cork_buffer buf1 = CORK_BUFFER_INIT(); cork_buffer_printf(&buf1, "sudo pacman -S --noconfirm %s", package); bz_mock_subprocess(buf1.buf, NULL, NULL, 0); cork_buffer_done(&buf1); }
static void mock_deb_arch(const char *arch) { struct cork_buffer buf = CORK_BUFFER_INIT(); cork_buffer_printf(&buf, "%s\n", arch); bz_mock_subprocess("dpkg-architecture -qDEB_HOST_ARCH", buf.buf, NULL, 0); cork_buffer_done(&buf); }
static void mock_uninstalled_known_package(const char *package) { struct cork_buffer buf1 = CORK_BUFFER_INIT(); struct cork_buffer buf2 = CORK_BUFFER_INIT(); cork_buffer_printf (&buf1, "dpkg-query -W -f ${Status}\\n${Version} %s", package); cork_buffer_set_string(&buf2, "unknown ok not-installed\n"); bz_mock_subprocess(buf1.buf, buf2.buf, NULL, 0); cork_buffer_done(&buf1); cork_buffer_done(&buf2); }
static int write_terminal_dot(struct save_data *save_data, ipset_value terminal_value) { struct dot_data *dot_data = save_data->user_data; /* If this terminal has the default value, skip it. */ if (terminal_value == dot_data->default_value) { return 0; } /* Output a node for the terminal value. */ cork_buffer_printf (&dot_data->scratch, " t%d [shape=box, label=%d];\n", terminal_value, terminal_value); return write_string(save_data->stream, dot_data->scratch.buf); }
END_TEST /*----------------------------------------------------------------------- * Building deb packages */ /* Since we're mocking the subprocess commands for each of these test cases, the * tests can run on any platform; we don't need the Debian Linux packaging tools * to actually be installed. */ static void mock_dpkg_deb(const char *package_name, const char *version) { struct cork_buffer buf = CORK_BUFFER_INIT(); cork_buffer_printf(&buf, "dpkg-deb -b /tmp/staging ./%s_%s_amd64.deb", package_name, version ); bz_mock_subprocess(buf.buf, NULL, NULL, 0); cork_buffer_done(&buf); }
static int write_nonterminal_dot(struct save_data *save_data, serialized_id serialized_node, ipset_variable variable, serialized_id serialized_low, serialized_id serialized_high) { struct dot_data *dot_data = save_data->user_data; /* Include a node for the nonterminal value. */ cork_buffer_printf (&dot_data->scratch, " n%d [shape=circle,label=%u];\n", (-serialized_node), variable); /* Include an edge for the low pointer. */ if (serialized_low < 0) { /* The low pointer is a nonterminal. */ cork_buffer_append_printf (&dot_data->scratch, " n%d -> n%d", (-serialized_node), (-serialized_low)); } else { /* The low pointer is a terminal. */ ipset_value low_value = (ipset_value) serialized_low; if (low_value == dot_data->default_value) { /* The terminal is the default value, so instead of a real * terminal, connect this pointer to a dummy circle node. */ cork_buffer_append_printf (&dot_data->scratch, " low%d [shape=circle,label=\"\"]\n" " n%d -> low%d", (-serialized_node), (-serialized_node), (-serialized_node)); } else { /* The terminal isn't a default, so go ahead and output it. */ cork_buffer_append_printf (&dot_data->scratch, " n%d -> t%d", (-serialized_node), serialized_low); } } cork_buffer_append_printf (&dot_data->scratch, " [style=dashed,color=red]\n"); /* Include an edge for the high pointer. */ if (serialized_high < 0) { /* The high pointer is a nonterminal. */ cork_buffer_append_printf (&dot_data->scratch, " n%d -> n%d", (-serialized_node), (-serialized_high)); } else { /* The high pointer is a terminal. */ ipset_value high_value = (ipset_value) serialized_high; if (high_value == dot_data->default_value) { /* The terminal is the default value, so instead of a real * terminal, connect this pointer to a dummy circle node. */ cork_buffer_append_printf (&dot_data->scratch, " high%d " "[shape=circle," "fixedsize=true," "height=0.25," "width=0.25," "label=\"\"]\n" " n%d -> high%d", (-serialized_node), (-serialized_node), (-serialized_node)); } else { /* The terminal isn't a default, so go ahead and output it. */ cork_buffer_append_printf (&dot_data->scratch, " n%d -> t%d", (-serialized_node), serialized_high); } } cork_buffer_append_printf (&dot_data->scratch, " [style=solid,color=black]\n"); /* Output the clauses to the stream. */ return write_string(save_data->stream, dot_data->scratch.buf); }