]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Make MANAGER_TEST_RUN_MINIMAL just allocate data structures
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 10 Mar 2018 10:02:18 +0000 (11:02 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 11 Mar 2018 15:33:59 +0000 (16:33 +0100)
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.

src/analyze/analyze-verify.c
src/core/manager.c
src/core/manager.h
src/libudev/libudev.c
src/test/test-cgroup-mask.c
src/test/test-engine.c
src/test/test-execute.c
src/test/test-path.c
src/test/test-sched-prio.c

index f475b6598c6719c4c9fed4903e2ba3f4d6fd7cc7..4cdf6325524feb493bb6dddb43a4eded61e8eed6 100644 (file)
@@ -254,7 +254,8 @@ int verify_units(char **filenames, UnitFileScope scope, bool check_man, bool run
 
         Unit *units[strv_length(filenames)];
         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;
 
         if (strv_isempty(filenames))
index fb0743b3d7628ade994736ff30266f6481fcbbb3..6140d06a7f7f77130bfa67a4f57d3301a3655227 100644 (file)
@@ -747,37 +747,43 @@ int manager_new(UnitFileScope scope, unsigned test_run_flags, Manager **_m) {
         if (r < 0)
                 return r;
 
-        r = sd_event_default(&m->event);
+        r = manager_setup_prefix(m);
         if (r < 0)
                 return r;
 
-        r = manager_setup_run_queue(m);
-        if (r < 0)
-                return r;
+        m->udev = udev_new();
+        if (!m->udev)
+                return -ENOMEM;
 
-        r = manager_setup_signals(m);
+        r = sd_event_default(&m->event);
         if (r < 0)
                 return r;
 
-        r = manager_setup_cgroup(m);
+        r = manager_setup_run_queue(m);
         if (r < 0)
                 return r;
 
-        r = manager_setup_time_change(m);
-        if (r < 0)
-                return r;
+        if (test_run_flags == MANAGER_TEST_RUN_MINIMAL) {
+                m->cgroup_root = strdup("");
+                if (!m->cgroup_root)
+                        return -ENOMEM;
+        } else {
+                r = manager_setup_signals(m);
+                if (r < 0)
+                        return r;
 
-        r = manager_setup_sigchld_event_source(m);
-        if (r < 0)
-                return r;
+                r = manager_setup_cgroup(m);
+                if (r < 0)
+                        return r;
 
-        m->udev = udev_new();
-        if (!m->udev)
-                return -ENOMEM;
+                r = manager_setup_time_change(m);
+                if (r < 0)
+                        return r;
 
-        r = manager_setup_prefix(m);
-        if (r < 0)
-                return r;
+                r = manager_setup_sigchld_event_source(m);
+                if (r < 0)
+                        return r;
+        }
 
         if (MANAGER_IS_SYSTEM(m) && test_run_flags == 0) {
                 r = mkdir_label("/run/systemd/units", 0755);
index 93a29417dfb94e002f9c4ef4583e3bab2609dcfe..80304a4010ce615d9ab4046a9499f9c6796e6fe3 100644 (file)
@@ -96,10 +96,11 @@ typedef enum ManagerTimestamp {
 
 enum {
         /* 0 = run normally */
-        MANAGER_TEST_RUN_MINIMAL = 1,        /* run test w/o generators */
-        MANAGER_TEST_RUN_ENV_GENERATORS = 2, /* also run env generators  */
-        MANAGER_TEST_RUN_GENERATORS = 4,     /* also run unit generators */
-        MANAGER_TEST_FULL = MANAGER_TEST_RUN_ENV_GENERATORS | MANAGER_TEST_RUN_GENERATORS,
+        MANAGER_TEST_RUN_MINIMAL        = 1 << 1,  /* create basic data structures */
+        MANAGER_TEST_RUN_BASIC          = 1 << 2,  /* interact with the environment */
+        MANAGER_TEST_RUN_ENV_GENERATORS = 1 << 3,  /* also run env 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);
 
index 64904c5ffaceb2a50b056d7ae0d53f8a1a743b46..4af0f1e1c67ae4039b4149f78cf315bd22418ed4 100644 (file)
@@ -85,8 +85,7 @@ _public_ void udev_set_userdata(struct udev *udev, void *userdata) {
 /**
  * udev_new:
  *
- * Create udev library context. This reads the udev configuration
- * file, and fills in the default values.
+ * Create udev library context. This only allocates the basic data structure.
  *
  * The initial refcount is 1, and needs to be decremented to
  * release the resources of the udev library context.
index 88032e6e128af3ccec18a6ea372b05b215f427ba..907531b045c630d7b739e239ce1ec4a8913a02ed 100644 (file)
@@ -45,7 +45,7 @@ static int test_cgroup_mask(void) {
         /* Prepare the manager. */
         assert_se(set_unit_path(get_testdata_dir("")) >= 0);
         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)) {
                 puts("manager_new: Permission denied. Skipping test.");
                 return EXIT_TEST_SKIP;
index fb6f404a65e3eb5a830ea0297241209435ec718d..5d7cd8cfd53e9c61719bff6e3008103a800c39f5 100644 (file)
@@ -47,7 +47,7 @@ int main(int argc, char *argv[]) {
         /* prepare the test */
         assert_se(set_unit_path(get_testdata_dir("")) >= 0);
         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)) {
                 log_notice_errno(r, "Skipping test: manager_new: %m");
                 return EXIT_TEST_SKIP;
index 02902205697f1c13b8e3b98f186199a97eb037d9..954080df361b306ce10c7aaffbbb9f0a82b206cc 100644 (file)
@@ -628,7 +628,7 @@ static int run_tests(UnitFileScope scope, const test_function_t *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)) {
                 log_notice_errno(r, "Skipping test: manager_new: %m");
                 return EXIT_TEST_SKIP;
index 3f579b064de131e75b50af49dab3aab5fc57766a..880e54d81c2fb02560a02cfcfb6fd258bf82d6da 100644 (file)
@@ -52,7 +52,7 @@ static int setup_test(Manager **m) {
                 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)) {
                 log_notice_errno(r, "Skipping test: manager_new: %m");
                 return -EXIT_TEST_SKIP;
index 819c8e8ebf7d488acf2e23b68cb3ca7e21b23f0c..abcda4dab50c7c8b58220bb88da3a3e03ce49007 100644 (file)
@@ -44,7 +44,7 @@ int main(int argc, char *argv[]) {
         /* prepare the test */
         assert_se(set_unit_path(get_testdata_dir("")) >= 0);
         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)) {
                 log_notice_errno(r, "Skipping test: manager_new: %m");
                 return EXIT_TEST_SKIP;