/* The might_sleep extension doesn't work yet as sleepable calls are not * allowed, but preserve the check in case it's supported later and then * this particular combination can be enabled.
*/ if (!strcmp("might_sleep", replacement) && err) {
ASSERT_HAS_SUBSTR(log, "helper call might sleep in a non-sleepable prog", "error log");
ASSERT_EQ(err, -EINVAL, "err");
test__skip(); goto out;
}
/* There are two global subprograms in both summarization.skel.h: * - one changes packet data; * - another does not. * It is ok to freplace subprograms that change packet data with those * that either do or do not. It is only ok to freplace subprograms * that do not change packet data with those that do not as well. * The below tests check outcomes for each combination of such freplace. * Also test a case when main subprogram itself is replaced and is a single * subprogram in a program. * * This holds for might_sleep programs. It is ok to replace might_sleep with * might_sleep and with does_not_sleep, but does_not_sleep cannot be replaced * with might_sleep.
*/ void test_summarization_freplace(void)
{ struct { constchar *main; constchar *to_be_replaced; bool has_side_effect;
} mains[2][4] = {
{
{ "main_changes_with_subprogs", "changes_pkt_data", true },
{ "main_changes_with_subprogs", "does_not_change_pkt_data", false },
{ "main_changes", "main_changes", true },
{ "main_does_not_change", "main_does_not_change", false },
},
{
{ "main_might_sleep_with_subprogs", "might_sleep", true },
{ "main_might_sleep_with_subprogs", "does_not_sleep", false },
{ "main_might_sleep", "main_might_sleep", true },
{ "main_does_not_sleep", "main_does_not_sleep", false },
},
}; constchar *pkt_err = "Extension program changes packet data"; constchar *slp_err = "Extension program may sleep"; struct { constchar *func; bool has_side_effect; constchar *err_msg;
} replacements[2][2] = {
{
{ "changes_pkt_data", true, pkt_err },
{ "does_not_change_pkt_data", false, pkt_err },
},
{
{ "might_sleep", true, slp_err },
{ "does_not_sleep", false, slp_err },
},
}; char buf[64];
for (int t = 0; t < 2; t++) { for (int i = 0; i < ARRAY_SIZE(mains); ++i) { for (int j = 0; j < ARRAY_SIZE(replacements); ++j) {
snprintf(buf, sizeof(buf), "%s_with_%s",
mains[t][i].to_be_replaced, replacements[t][j].func); if (!test__start_subtest(buf)) continue;
test_aux(mains[t][i].main, mains[t][i].to_be_replaced, replacements[t][j].func,
mains[t][i].has_side_effect || !replacements[t][j].has_side_effect,
replacements[t][j].err_msg);
}
}
}
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.