Changeset be07995 in mainline for uspace/srv/sysman/test/job_closure.c


Ignore:
Timestamp:
2019-08-17T13:54:09Z (6 years ago)
Author:
Matthieu Riolo <matthieu.riolo@…>
Children:
8d74fdd
Parents:
015b147
git-author:
Michal Koutný <xm.koutny+hos@…> (2016-01-10 23:36:33)
git-committer:
Matthieu Riolo <matthieu.riolo@…> (2019-08-17 13:54:09)
Message:

sysman: Add support for closure creation with CLOSURE_ISOLATE flag

Now can create closures, that contain start jobs for all transitively dependent
jobs and stop for all others. (Next step: enqueue and execute.)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/sysman/test/job_closure.c

    r015b147 rbe07995  
    3232
    3333#include "../job_closure.h"
     34#include "../repo.h"
    3435
    3536#include "mock_unit.h"
     
    5051{
    5152        if (expected->size != actual->size) {
    52                 printf("%s: |expected| - |actual| = %u\n",
    53                     __func__, expected->size - actual->size);
     53                printf("%s: |expected|, |actual| = %u, %u\n",
     54                    __func__, expected->size, actual->size);
    5455                return false;
    5556        }
     
    119120        rc = dyn_array_reserve(&act_closure, MAX_TYPES * MAX_UNITS);
    120121        assert(rc == EOK);
     122
     123        repo_init();
    121124}
    122125
     
    148151        assert(main_job);
    149152
    150         int rc = job_create_closure(main_job, &act_closure);
     153        int rc = job_create_closure(main_job, &act_closure, 0);
    151154        PCUT_ASSERT_INT_EQUALS(EOK, rc);
    152155
     
    179182        assert(main_job);
    180183
    181         int rc = job_create_closure(main_job, &act_closure);
     184        int rc = job_create_closure(main_job, &act_closure, 0);
    182185        PCUT_ASSERT_INT_EQUALS(EOK, rc);
    183186
     
    212215        assert(main_job);
    213216
    214         int rc = job_create_closure(main_job, &act_closure);
     217        int rc = job_create_closure(main_job, &act_closure, 0);
    215218        PCUT_ASSERT_INT_EQUALS(EOK, rc);
    216219
     
    227230}
    228231
     232PCUT_TEST(job_closure_isolate_linears) {
     233        unit_t *u0 = mock_units[UNIT_SERVICE][0];
     234        unit_t *u1 = mock_units[UNIT_SERVICE][1];
     235        unit_t *u2 = mock_units[UNIT_SERVICE][2];
     236        unit_t *u3 = mock_units[UNIT_SERVICE][3];
     237        unit_t *u4 = mock_units[UNIT_SERVICE][4];
     238        unit_t *u5 = mock_units[UNIT_SERVICE][5];
     239        unit_t *u6 = mock_units[UNIT_SERVICE][6];
     240        repo_begin_update();
     241        for (int i = 0; i < 7; ++i) {
     242                repo_add_unit(mock_units[UNIT_SERVICE][i]);
     243        }
     244        repo_commit();
     245
     246        /*
     247         *
     248         * u0 -> u1 -> u2
     249         *
     250         * u3 -> u4 -> u5
     251         *
     252         * u6
     253         */
     254        mock_add_edge(u0, u1);
     255        mock_add_edge(u1, u2);
     256
     257        mock_add_edge(u3, u4);
     258        mock_add_edge(u4, u5);
     259
     260        job_t *main_job = job_create(u1, STATE_STARTED);
     261        assert(main_job);
     262
     263        int rc = job_create_closure(main_job, &act_closure, CLOSURE_ISOLATE);
     264        PCUT_ASSERT_INT_EQUALS(EOK, rc);
     265
     266        dyn_array_append(&exp_closure, job_t *, dummy_job(u0, STATE_STOPPED));
     267        dyn_array_append(&exp_closure, job_t *, dummy_job(u1, STATE_STARTED));
     268        dyn_array_append(&exp_closure, job_t *, dummy_job(u2, STATE_STARTED));
     269        dyn_array_append(&exp_closure, job_t *, dummy_job(u3, STATE_STOPPED));
     270        dyn_array_append(&exp_closure, job_t *, dummy_job(u4, STATE_STOPPED));
     271        dyn_array_append(&exp_closure, job_t *, dummy_job(u5, STATE_STOPPED));
     272        dyn_array_append(&exp_closure, job_t *, dummy_job(u6, STATE_STOPPED));
     273
     274        dummy_add_closure(&act_closure);
     275
     276        PCUT_ASSERT_TRUE(same_jobs(&exp_closure, &act_closure));
     277        PCUT_ASSERT_TRUE(job_blocked(u1->job, u2->job));
     278
     279        PCUT_ASSERT_TRUE(job_blocked(u5->job, u4->job));
     280        PCUT_ASSERT_TRUE(job_blocked(u4->job, u3->job));
     281
     282        PCUT_ASSERT_INT_EQUALS(0, u6->job->blocking_jobs);
     283        PCUT_ASSERT_INT_EQUALS(0, u0->job->blocking_jobs);
     284}
    229285
    230286PCUT_EXPORT(job_closure);
Note: See TracChangeset for help on using the changeset viewer.