Make MANAGER_TEST_RUN_MINIMAL just allocate data structures
When running tests like test-unit-name, there is not point in setting up the cgroup and signals and interacting with the environment. Similarly when running fuzz testing of the parser. Add new MANAGER_TEST_RUN_BASIC which takes the role of MANAGER_TEST_RUN_MINIMAL, and redefine MANAGER_TEST_RUN_MINIMAL to just create the basic data structures.
This commit is contained in:
parent
dc409696cf
commit
e8112e67e4
|
@ -254,7 +254,8 @@ int verify_units(char **filenames, UnitFileScope scope, bool check_man, bool run
|
||||||
|
|
||||||
Unit *units[strv_length(filenames)];
|
Unit *units[strv_length(filenames)];
|
||||||
int i, count = 0;
|
int i, count = 0;
|
||||||
const uint8_t flags = MANAGER_TEST_RUN_ENV_GENERATORS |
|
const uint8_t flags = MANAGER_TEST_RUN_BASIC |
|
||||||
|
MANAGER_TEST_RUN_ENV_GENERATORS |
|
||||||
run_generators * MANAGER_TEST_RUN_GENERATORS;
|
run_generators * MANAGER_TEST_RUN_GENERATORS;
|
||||||
|
|
||||||
if (strv_isempty(filenames))
|
if (strv_isempty(filenames))
|
||||||
|
|
|
@ -747,6 +747,14 @@ int manager_new(UnitFileScope scope, unsigned test_run_flags, Manager **_m) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
r = manager_setup_prefix(m);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
m->udev = udev_new();
|
||||||
|
if (!m->udev)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
r = sd_event_default(&m->event);
|
r = sd_event_default(&m->event);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -755,29 +763,27 @@ int manager_new(UnitFileScope scope, unsigned test_run_flags, Manager **_m) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
r = manager_setup_signals(m);
|
if (test_run_flags == MANAGER_TEST_RUN_MINIMAL) {
|
||||||
if (r < 0)
|
m->cgroup_root = strdup("");
|
||||||
return r;
|
if (!m->cgroup_root)
|
||||||
|
return -ENOMEM;
|
||||||
|
} else {
|
||||||
|
r = manager_setup_signals(m);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
r = manager_setup_cgroup(m);
|
r = manager_setup_cgroup(m);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
r = manager_setup_time_change(m);
|
r = manager_setup_time_change(m);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
r = manager_setup_sigchld_event_source(m);
|
r = manager_setup_sigchld_event_source(m);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
}
|
||||||
m->udev = udev_new();
|
|
||||||
if (!m->udev)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
r = manager_setup_prefix(m);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
if (MANAGER_IS_SYSTEM(m) && test_run_flags == 0) {
|
if (MANAGER_IS_SYSTEM(m) && test_run_flags == 0) {
|
||||||
r = mkdir_label("/run/systemd/units", 0755);
|
r = mkdir_label("/run/systemd/units", 0755);
|
||||||
|
|
|
@ -96,10 +96,11 @@ typedef enum ManagerTimestamp {
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
/* 0 = run normally */
|
/* 0 = run normally */
|
||||||
MANAGER_TEST_RUN_MINIMAL = 1, /* run test w/o generators */
|
MANAGER_TEST_RUN_MINIMAL = 1 << 1, /* create basic data structures */
|
||||||
MANAGER_TEST_RUN_ENV_GENERATORS = 2, /* also run env generators */
|
MANAGER_TEST_RUN_BASIC = 1 << 2, /* interact with the environment */
|
||||||
MANAGER_TEST_RUN_GENERATORS = 4, /* also run unit generators */
|
MANAGER_TEST_RUN_ENV_GENERATORS = 1 << 3, /* also run env generators */
|
||||||
MANAGER_TEST_FULL = MANAGER_TEST_RUN_ENV_GENERATORS | MANAGER_TEST_RUN_GENERATORS,
|
MANAGER_TEST_RUN_GENERATORS = 1 << 4, /* also run unit generators */
|
||||||
|
MANAGER_TEST_FULL = MANAGER_TEST_RUN_BASIC | MANAGER_TEST_RUN_ENV_GENERATORS | MANAGER_TEST_RUN_GENERATORS,
|
||||||
};
|
};
|
||||||
assert_cc((MANAGER_TEST_FULL & UINT8_MAX) == MANAGER_TEST_FULL);
|
assert_cc((MANAGER_TEST_FULL & UINT8_MAX) == MANAGER_TEST_FULL);
|
||||||
|
|
||||||
|
|
|
@ -85,8 +85,7 @@ _public_ void udev_set_userdata(struct udev *udev, void *userdata) {
|
||||||
/**
|
/**
|
||||||
* udev_new:
|
* udev_new:
|
||||||
*
|
*
|
||||||
* Create udev library context. This reads the udev configuration
|
* Create udev library context. This only allocates the basic data structure.
|
||||||
* file, and fills in the default values.
|
|
||||||
*
|
*
|
||||||
* The initial refcount is 1, and needs to be decremented to
|
* The initial refcount is 1, and needs to be decremented to
|
||||||
* release the resources of the udev library context.
|
* release the resources of the udev library context.
|
||||||
|
|
|
@ -45,7 +45,7 @@ static int test_cgroup_mask(void) {
|
||||||
/* Prepare the manager. */
|
/* Prepare the manager. */
|
||||||
assert_se(set_unit_path(get_testdata_dir("")) >= 0);
|
assert_se(set_unit_path(get_testdata_dir("")) >= 0);
|
||||||
assert_se(runtime_dir = setup_fake_runtime_dir());
|
assert_se(runtime_dir = setup_fake_runtime_dir());
|
||||||
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
|
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m);
|
||||||
if (IN_SET(r, -EPERM, -EACCES)) {
|
if (IN_SET(r, -EPERM, -EACCES)) {
|
||||||
puts("manager_new: Permission denied. Skipping test.");
|
puts("manager_new: Permission denied. Skipping test.");
|
||||||
return EXIT_TEST_SKIP;
|
return EXIT_TEST_SKIP;
|
||||||
|
|
|
@ -47,7 +47,7 @@ int main(int argc, char *argv[]) {
|
||||||
/* prepare the test */
|
/* prepare the test */
|
||||||
assert_se(set_unit_path(get_testdata_dir("")) >= 0);
|
assert_se(set_unit_path(get_testdata_dir("")) >= 0);
|
||||||
assert_se(runtime_dir = setup_fake_runtime_dir());
|
assert_se(runtime_dir = setup_fake_runtime_dir());
|
||||||
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
|
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m);
|
||||||
if (MANAGER_SKIP_TEST(r)) {
|
if (MANAGER_SKIP_TEST(r)) {
|
||||||
log_notice_errno(r, "Skipping test: manager_new: %m");
|
log_notice_errno(r, "Skipping test: manager_new: %m");
|
||||||
return EXIT_TEST_SKIP;
|
return EXIT_TEST_SKIP;
|
||||||
|
|
|
@ -628,7 +628,7 @@ static int run_tests(UnitFileScope scope, const test_function_t *tests) {
|
||||||
|
|
||||||
assert_se(tests);
|
assert_se(tests);
|
||||||
|
|
||||||
r = manager_new(scope, MANAGER_TEST_RUN_MINIMAL, &m);
|
r = manager_new(scope, MANAGER_TEST_RUN_BASIC, &m);
|
||||||
if (MANAGER_SKIP_TEST(r)) {
|
if (MANAGER_SKIP_TEST(r)) {
|
||||||
log_notice_errno(r, "Skipping test: manager_new: %m");
|
log_notice_errno(r, "Skipping test: manager_new: %m");
|
||||||
return EXIT_TEST_SKIP;
|
return EXIT_TEST_SKIP;
|
||||||
|
|
|
@ -52,7 +52,7 @@ static int setup_test(Manager **m) {
|
||||||
return -EXIT_TEST_SKIP;
|
return -EXIT_TEST_SKIP;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &tmp);
|
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &tmp);
|
||||||
if (MANAGER_SKIP_TEST(r)) {
|
if (MANAGER_SKIP_TEST(r)) {
|
||||||
log_notice_errno(r, "Skipping test: manager_new: %m");
|
log_notice_errno(r, "Skipping test: manager_new: %m");
|
||||||
return -EXIT_TEST_SKIP;
|
return -EXIT_TEST_SKIP;
|
||||||
|
|
|
@ -44,7 +44,7 @@ int main(int argc, char *argv[]) {
|
||||||
/* prepare the test */
|
/* prepare the test */
|
||||||
assert_se(set_unit_path(get_testdata_dir("")) >= 0);
|
assert_se(set_unit_path(get_testdata_dir("")) >= 0);
|
||||||
assert_se(runtime_dir = setup_fake_runtime_dir());
|
assert_se(runtime_dir = setup_fake_runtime_dir());
|
||||||
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
|
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m);
|
||||||
if (MANAGER_SKIP_TEST(r)) {
|
if (MANAGER_SKIP_TEST(r)) {
|
||||||
log_notice_errno(r, "Skipping test: manager_new: %m");
|
log_notice_errno(r, "Skipping test: manager_new: %m");
|
||||||
return EXIT_TEST_SKIP;
|
return EXIT_TEST_SKIP;
|
||||||
|
|
Loading…
Reference in a new issue