8818
8826
nih_free (err);
8829
#ifdef ENABLE_CGROUPS
8832
test_stanza_cgroup (void)
8838
CGroupSetting *setting;
8845
TEST_FUNCTION ("stanza_cgroup");
8847
TEST_FEATURE ("no arguments rejected");
8851
len = sprintf (buf, "cgroup\n");
8853
job = parse_job (NULL, NULL, NULL, "test", buf, len, &pos, &lineno);
8854
TEST_EQ_P (job, NULL);
8856
err = nih_error_get ();
8857
TEST_EQ (err->number, NIH_CONFIG_EXPECTED_TOKEN);
8859
/* Don't count NL */
8860
TEST_EQ (pos, (size_t)len-1);
8862
TEST_EQ (lineno, 1);
8865
TEST_FEATURE ("single argument (controller) accepted");
8870
len = sprintf (buf, "cgroup perf_event\n");
8871
job = parse_job (NULL, NULL, NULL, "test", buf, len, &pos, &lineno);
8873
if (test_alloc_failed) {
8874
TEST_EQ_P (job, NULL);
8876
err = nih_error_get ();
8877
TEST_EQ (err->number, ENOMEM);
8883
TEST_NE_P (job, NULL);
8885
TEST_LIST_NOT_EMPTY (&job->cgroups);
8886
count = test_list_count (&job->cgroups);
8889
cgroup = (CGroup *)test_list_get_index (&job->cgroups, 0);
8890
TEST_NE_P (cgroup, NULL);
8891
TEST_ALLOC_PARENT (cgroup, job);
8892
TEST_ALLOC_SIZE (cgroup, sizeof (CGroup));
8893
TEST_EQ_STR (cgroup->controller, "perf_event");
8894
TEST_ALLOC_PARENT (cgroup->controller, cgroup);
8895
TEST_ALLOC_SIZE (cgroup->controller, 1+strlen ("perf_event"));
8897
count = test_list_count (&cgroup->names);
8900
cgname = (CGroupName *)test_list_get_index (&cgroup->names, 0);
8901
TEST_NE_P (cgname, NULL);
8903
TEST_ALLOC_PARENT (cgname, cgroup);
8904
TEST_ALLOC_SIZE (cgname, sizeof (CGroupName));
8905
TEST_EQ_STR (cgname->name, "$UPSTART_CGROUP");
8906
TEST_ALLOC_PARENT (cgname->name, cgname);
8907
TEST_ALLOC_SIZE (cgname->name, 1+strlen ("$UPSTART_CGROUP"));
8909
TEST_LIST_EMPTY (&cgname->settings);
8910
TEST_EQ (pos, (size_t)len);
8911
TEST_EQ (lineno, 2);
8916
TEST_FEATURE ("2 arguments (controller + unquoted name) accepted");
8921
len = sprintf (buf, "cgroup perf_event foo\n");
8923
job = parse_job (NULL, NULL, NULL, "test", buf, len, &pos, &lineno);
8925
if (test_alloc_failed) {
8926
TEST_EQ_P (job, NULL);
8928
err = nih_error_get ();
8929
TEST_EQ (err->number, ENOMEM);
8935
TEST_NE_P (job, NULL);
8936
TEST_LIST_NOT_EMPTY (&job->cgroups);
8937
count = test_list_count (&job->cgroups);
8940
cgroup = (CGroup *)test_list_get_index (&job->cgroups, 0);
8941
TEST_NE_P (cgroup, NULL);
8942
TEST_ALLOC_PARENT (cgroup, job);
8943
TEST_ALLOC_SIZE (cgroup, sizeof (CGroup));
8944
TEST_EQ_STR (cgroup->controller, "perf_event");
8945
TEST_ALLOC_PARENT (cgroup->controller, cgroup);
8946
TEST_ALLOC_SIZE (cgroup->controller, 1+strlen ("perf_event"));
8948
count = test_list_count (&cgroup->names);
8951
cgname = (CGroupName *)test_list_get_index (&cgroup->names, 0);
8952
TEST_NE_P (cgname, NULL);
8954
TEST_ALLOC_PARENT (cgname, cgroup);
8955
TEST_ALLOC_SIZE (cgname, sizeof (CGroupName));
8956
TEST_EQ_STR (cgname->name, "foo");
8957
TEST_ALLOC_PARENT (cgname->name, cgname);
8958
TEST_ALLOC_SIZE (cgname->name, 1+strlen ("foo"));
8960
TEST_LIST_EMPTY (&cgname->settings);
8961
TEST_EQ (pos, (size_t)len);
8962
TEST_EQ (lineno, 2);
8967
TEST_FEATURE ("2 arguments (controller + quoted name) accepted");
8972
len = sprintf (buf, "cgroup perf_event \"foo bar\"\n");
8974
job = parse_job (NULL, NULL, NULL, "test", buf, len, &pos, &lineno);
8976
if (test_alloc_failed) {
8977
TEST_EQ_P (job, NULL);
8979
err = nih_error_get ();
8980
TEST_EQ (err->number, ENOMEM);
8986
TEST_NE_P (job, NULL);
8987
TEST_LIST_NOT_EMPTY (&job->cgroups);
8988
count = test_list_count (&job->cgroups);
8991
cgroup = (CGroup *)test_list_get_index (&job->cgroups, 0);
8992
TEST_NE_P (cgroup, NULL);
8993
TEST_ALLOC_PARENT (cgroup, job);
8994
TEST_ALLOC_SIZE (cgroup, sizeof (CGroup));
8995
TEST_EQ_STR (cgroup->controller, "perf_event");
8996
TEST_ALLOC_PARENT (cgroup->controller, cgroup);
8997
TEST_ALLOC_SIZE (cgroup->controller, 1+strlen ("perf_event"));
8999
count = test_list_count (&cgroup->names);
9002
cgname = (CGroupName *)test_list_get_index (&cgroup->names, 0);
9003
TEST_NE_P (cgname, NULL);
9005
TEST_ALLOC_PARENT (cgname, cgroup);
9006
TEST_ALLOC_SIZE (cgname, sizeof (CGroupName));
9007
TEST_EQ_STR (cgname->name, "foo bar");
9008
TEST_ALLOC_PARENT (cgname->name, cgname);
9009
TEST_ALLOC_SIZE (cgname->name, 1+strlen ("foo bar"));
9011
TEST_LIST_EMPTY (&cgname->settings);
9012
TEST_EQ (pos, (size_t)len);
9013
TEST_EQ (lineno, 2);
9018
TEST_FEATURE ("3 arguments (controller, key and value) accepted");
9023
len = sprintf (buf, "cgroup perf_event key1 value1\n");
9025
job = parse_job (NULL, NULL, NULL, "test", buf, len, &pos, &lineno);
9027
if (test_alloc_failed) {
9028
TEST_EQ_P (job, NULL);
9030
err = nih_error_get ();
9031
TEST_EQ (err->number, ENOMEM);
9037
TEST_NE_P (job, NULL);
9038
TEST_LIST_NOT_EMPTY (&job->cgroups);
9039
count = test_list_count (&job->cgroups);
9042
cgroup = (CGroup *)test_list_get_index (&job->cgroups, 0);
9043
TEST_NE_P (cgroup, NULL);
9044
TEST_ALLOC_PARENT (cgroup, job);
9045
TEST_ALLOC_SIZE (cgroup, sizeof (CGroup));
9046
TEST_EQ_STR (cgroup->controller, "perf_event");
9047
TEST_ALLOC_PARENT (cgroup->controller, cgroup);
9048
TEST_ALLOC_SIZE (cgroup->controller, 1+strlen ("perf_event"));
9050
count = test_list_count (&cgroup->names);
9053
cgname = (CGroupName *)test_list_get_index (&cgroup->names, 0);
9054
TEST_NE_P (cgname, NULL);
9056
TEST_ALLOC_PARENT (cgname, cgroup);
9057
TEST_ALLOC_SIZE (cgname, sizeof (CGroupName));
9058
TEST_EQ_STR (cgname->name, "$UPSTART_CGROUP");
9059
TEST_ALLOC_PARENT (cgname->name, cgname);
9060
TEST_ALLOC_SIZE (cgname->name, 1+strlen ("$UPSTART_CGROUP"));
9062
TEST_LIST_NOT_EMPTY (&cgname->settings);
9064
count = test_list_count (&cgname->settings);
9067
setting = (CGroupSetting *)test_list_get_index (&cgname->settings, 0);
9068
TEST_NE_P (setting, NULL);
9070
TEST_ALLOC_PARENT (setting, cgname);
9071
TEST_ALLOC_SIZE (setting, sizeof (CGroupSetting));
9073
TEST_EQ_STR (setting->key, "key1");
9074
TEST_ALLOC_PARENT (setting->key, setting);
9075
TEST_ALLOC_SIZE (setting->key, 1+strlen ("key1"));
9077
TEST_EQ_STR (setting->value, "value1");
9078
TEST_ALLOC_PARENT (setting->value, setting);
9079
TEST_ALLOC_SIZE (setting->value, 1+strlen ("value1"));
9081
TEST_EQ (pos, (size_t)len);
9082
TEST_EQ (lineno, 2);
9087
TEST_FEATURE ("4 arguments (controller + unquoted name, key and value) accepted");
9092
len = sprintf (buf, "cgroup perf_event foo key1 value1\n");
9094
job = parse_job (NULL, NULL, NULL, "test", buf, len, &pos, &lineno);
9096
if (test_alloc_failed) {
9097
TEST_EQ_P (job, NULL);
9099
err = nih_error_get ();
9100
TEST_EQ (err->number, ENOMEM);
9106
TEST_NE_P (job, NULL);
9107
TEST_LIST_NOT_EMPTY (&job->cgroups);
9108
count = test_list_count (&job->cgroups);
9111
cgroup = (CGroup *)test_list_get_index (&job->cgroups, 0);
9112
TEST_NE_P (cgroup, NULL);
9113
TEST_ALLOC_PARENT (cgroup, job);
9114
TEST_ALLOC_SIZE (cgroup, sizeof (CGroup));
9115
TEST_EQ_STR (cgroup->controller, "perf_event");
9116
TEST_ALLOC_PARENT (cgroup->controller, cgroup);
9117
TEST_ALLOC_SIZE (cgroup->controller, 1+strlen ("perf_event"));
9119
count = test_list_count (&cgroup->names);
9122
cgname = (CGroupName *)test_list_get_index (&cgroup->names, 0);
9123
TEST_NE_P (cgname, NULL);
9125
TEST_ALLOC_PARENT (cgname, cgroup);
9126
TEST_ALLOC_SIZE (cgname, sizeof (CGroupName));
9127
TEST_EQ_STR (cgname->name, "foo");
9128
TEST_ALLOC_PARENT (cgname->name, cgname);
9129
TEST_ALLOC_SIZE (cgname->name, 1+strlen ("foo"));
9131
TEST_LIST_NOT_EMPTY (&cgname->settings);
9133
count = test_list_count (&cgname->settings);
9136
setting = (CGroupSetting *)test_list_get_index (&cgname->settings, 0);
9137
TEST_NE_P (setting, NULL);
9139
TEST_ALLOC_PARENT (setting, cgname);
9140
TEST_ALLOC_SIZE (setting, sizeof (CGroupSetting));
9142
TEST_EQ_STR (setting->key, "key1");
9143
TEST_ALLOC_PARENT (setting->key, setting);
9144
TEST_ALLOC_SIZE (setting->key, 1+strlen ("key1"));
9146
TEST_EQ_STR (setting->value, "value1");
9147
TEST_ALLOC_PARENT (setting->value, setting);
9148
TEST_ALLOC_SIZE (setting->value, 1+strlen ("value1"));
9150
TEST_EQ (pos, (size_t)len);
9151
TEST_EQ (lineno, 2);
9156
TEST_FEATURE ("4 arguments (controller + quoted name, unquoted key and quoted value) accepted");
9161
len = sprintf (buf, "cgroup perf_event \"a silly name\" key1 \"hello world\"\n");
9163
job = parse_job (NULL, NULL, NULL, "test", buf, len, &pos, &lineno);
9165
if (test_alloc_failed) {
9166
TEST_EQ_P (job, NULL);
9168
err = nih_error_get ();
9169
TEST_EQ (err->number, ENOMEM);
9175
TEST_NE_P (job, NULL);
9176
TEST_LIST_NOT_EMPTY (&job->cgroups);
9177
count = test_list_count (&job->cgroups);
9180
cgroup = (CGroup *)test_list_get_index (&job->cgroups, 0);
9181
TEST_NE_P (cgroup, NULL);
9182
TEST_ALLOC_PARENT (cgroup, job);
9183
TEST_ALLOC_SIZE (cgroup, sizeof (CGroup));
9184
TEST_EQ_STR (cgroup->controller, "perf_event");
9185
TEST_ALLOC_PARENT (cgroup->controller, cgroup);
9186
TEST_ALLOC_SIZE (cgroup->controller, 1+strlen ("perf_event"));
9188
count = test_list_count (&cgroup->names);
9191
cgname = (CGroupName *)test_list_get_index (&cgroup->names, 0);
9192
TEST_NE_P (cgname, NULL);
9194
TEST_ALLOC_PARENT (cgname, cgroup);
9195
TEST_ALLOC_SIZE (cgname, sizeof (CGroupName));
9196
TEST_EQ_STR (cgname->name, "a silly name");
9197
TEST_ALLOC_PARENT (cgname->name, cgname);
9198
TEST_ALLOC_SIZE (cgname->name, 1+strlen ("foo"));
9200
TEST_LIST_NOT_EMPTY (&cgname->settings);
9202
count = test_list_count (&cgname->settings);
9205
setting = (CGroupSetting *)test_list_get_index (&cgname->settings, 0);
9206
TEST_NE_P (setting, NULL);
9208
TEST_ALLOC_PARENT (setting, cgname);
9209
TEST_ALLOC_SIZE (setting, sizeof (CGroupSetting));
9211
TEST_EQ_STR (setting->key, "key1");
9212
TEST_ALLOC_PARENT (setting->key, setting);
9213
TEST_ALLOC_SIZE (setting->key, 1+strlen ("key1"));
9215
TEST_EQ_STR (setting->value, "hello world");
9216
TEST_ALLOC_PARENT (setting->value, setting);
9217
TEST_ALLOC_SIZE (setting->value, 1+strlen ("hello world"));
9219
TEST_EQ (pos, (size_t)len);
9220
TEST_EQ (lineno, 2);
9225
/* FIXME: variables are only expanded on job start so cannot
9228
TEST_FEATURE ("name with embedded variable is accepted");
9233
len = sprintf (buf, "cgroup perf_event \"$VARIABLE\" key value\n");
9235
job = parse_job (NULL, NULL, NULL, "test", buf, len, &pos, &lineno);
9237
if (test_alloc_failed) {
9238
TEST_EQ_P (job, NULL);
9240
err = nih_error_get ();
9241
TEST_EQ (err->number, ENOMEM);
9247
TEST_NE_P (job, NULL);
9248
TEST_LIST_NOT_EMPTY (&job->cgroups);
9249
count = test_list_count (&job->cgroups);
9252
cgroup = (CGroup *)test_list_get_index (&job->cgroups, 0);
9253
TEST_NE_P (cgroup, NULL);
9254
TEST_ALLOC_PARENT (cgroup, job);
9255
TEST_ALLOC_SIZE (cgroup, sizeof (CGroup));
9256
TEST_EQ_STR (cgroup->controller, "perf_event");
9257
TEST_ALLOC_PARENT (cgroup->controller, cgroup);
9258
TEST_ALLOC_SIZE (cgroup->controller, 1+strlen ("perf_event"));
9260
count = test_list_count (&cgroup->names);
9263
cgname = (CGroupName *)test_list_get_index (&cgroup->names, 0);
9264
TEST_NE_P (cgname, NULL);
9266
TEST_ALLOC_PARENT (cgname, cgroup);
9267
TEST_ALLOC_SIZE (cgname, sizeof (CGroupName));
9268
TEST_EQ_STR (cgname->name, "$VARIABLE");
9269
TEST_ALLOC_PARENT (cgname->name, cgname);
9270
TEST_ALLOC_SIZE (cgname->name, 1+strlen ("$VARIABLE"));
9272
TEST_LIST_NOT_EMPTY (&cgname->settings);
9274
count = test_list_count (&cgname->settings);
9277
setting = (CGroupSetting *)test_list_get_index (&cgname->settings, 0);
9278
TEST_NE_P (setting, NULL);
9280
TEST_ALLOC_PARENT (setting, cgname);
9281
TEST_ALLOC_SIZE (setting, sizeof (CGroupSetting));
9283
TEST_EQ_STR (setting->key, "key");
9284
TEST_ALLOC_PARENT (setting->key, setting);
9285
TEST_ALLOC_SIZE (setting->key, 1+strlen ("key"));
9287
TEST_EQ_STR (setting->value, "value");
9288
TEST_ALLOC_PARENT (setting->value, setting);
9289
TEST_ALLOC_SIZE (setting->value, 1+strlen ("value"));
9291
TEST_EQ (pos, (size_t)len);
9292
TEST_EQ (lineno, 2);
9297
TEST_FEATURE ("duplicate stanza is ignored");
9300
"cgroup perf_event foo key1 value1\n"
9301
"cgroup perf_event foo key1 value1\n");
9307
job = parse_job (NULL, NULL, NULL, "test", buf, len, &pos, &lineno);
9309
if (test_alloc_failed) {
9310
TEST_EQ_P (job, NULL);
9312
err = nih_error_get ();
9313
TEST_EQ (err->number, ENOMEM);
9319
TEST_NE_P (job, NULL);
9320
TEST_LIST_NOT_EMPTY (&job->cgroups);
9321
count = test_list_count (&job->cgroups);
9324
cgroup = (CGroup *)test_list_get_index (&job->cgroups, 0);
9325
TEST_NE_P (cgroup, NULL);
9326
TEST_ALLOC_PARENT (cgroup, job);
9327
TEST_ALLOC_SIZE (cgroup, sizeof (CGroup));
9328
TEST_EQ_STR (cgroup->controller, "perf_event");
9329
TEST_ALLOC_PARENT (cgroup->controller, cgroup);
9330
TEST_ALLOC_SIZE (cgroup->controller, 1+strlen ("perf_event"));
9332
count = test_list_count (&cgroup->names);
9335
cgname = (CGroupName *)test_list_get_index (&cgroup->names, 0);
9336
TEST_NE_P (cgname, NULL);
9338
TEST_ALLOC_PARENT (cgname, cgroup);
9339
TEST_ALLOC_SIZE (cgname, sizeof (CGroupName));
9340
TEST_EQ_STR (cgname->name, "foo");
9341
TEST_ALLOC_PARENT (cgname->name, cgname);
9342
TEST_ALLOC_SIZE (cgname->name, 1+strlen ("foo"));
9344
TEST_LIST_NOT_EMPTY (&cgname->settings);
9346
count = test_list_count (&cgname->settings);
9349
setting = (CGroupSetting *)test_list_get_index (&cgname->settings, 0);
9350
TEST_NE_P (setting, NULL);
9352
TEST_ALLOC_PARENT (setting, cgname);
9353
TEST_ALLOC_SIZE (setting, sizeof (CGroupSetting));
9355
TEST_EQ_STR (setting->key, "key1");
9356
TEST_ALLOC_PARENT (setting->key, setting);
9357
TEST_ALLOC_SIZE (setting->key, 1+strlen ("key1"));
9359
TEST_EQ_STR (setting->value, "value1");
9360
TEST_ALLOC_PARENT (setting->value, setting);
9361
TEST_ALLOC_SIZE (setting->value, 1+strlen ("value1"));
9363
TEST_EQ (pos, (size_t)len);
9364
TEST_EQ (lineno, 3);
9369
TEST_FEATURE ("duplicate equivalent stanza is ignored");
9372
"cgroup perf_event foo \"key1\" value1\n"
9373
"cgroup perf_event foo key1 \"value1\"\n");
9379
job = parse_job (NULL, NULL, NULL, "test", buf, len, &pos, &lineno);
9381
if (test_alloc_failed) {
9382
TEST_EQ_P (job, NULL);
9384
err = nih_error_get ();
9385
TEST_EQ (err->number, ENOMEM);
9391
TEST_NE_P (job, NULL);
9392
TEST_LIST_NOT_EMPTY (&job->cgroups);
9393
count = test_list_count (&job->cgroups);
9396
cgroup = (CGroup *)test_list_get_index (&job->cgroups, 0);
9397
TEST_NE_P (cgroup, NULL);
9398
TEST_ALLOC_PARENT (cgroup, job);
9399
TEST_ALLOC_SIZE (cgroup, sizeof (CGroup));
9400
TEST_EQ_STR (cgroup->controller, "perf_event");
9401
TEST_ALLOC_PARENT (cgroup->controller, cgroup);
9402
TEST_ALLOC_SIZE (cgroup->controller, 1+strlen ("perf_event"));
9404
count = test_list_count (&cgroup->names);
9407
cgname = (CGroupName *)test_list_get_index (&cgroup->names, 0);
9408
TEST_NE_P (cgname, NULL);
9410
TEST_ALLOC_PARENT (cgname, cgroup);
9411
TEST_ALLOC_SIZE (cgname, sizeof (CGroupName));
9412
TEST_EQ_STR (cgname->name, "foo");
9413
TEST_ALLOC_PARENT (cgname->name, cgname);
9414
TEST_ALLOC_SIZE (cgname->name, 1+strlen ("foo"));
9416
TEST_LIST_NOT_EMPTY (&cgname->settings);
9418
count = test_list_count (&cgname->settings);
9421
setting = (CGroupSetting *)test_list_get_index (&cgname->settings, 0);
9422
TEST_NE_P (setting, NULL);
9424
TEST_ALLOC_PARENT (setting, cgname);
9425
TEST_ALLOC_SIZE (setting, sizeof (CGroupSetting));
9427
TEST_EQ_STR (setting->key, "key1");
9428
TEST_ALLOC_PARENT (setting->key, setting);
9429
TEST_ALLOC_SIZE (setting->key, 1+strlen ("key1"));
9431
TEST_EQ_STR (setting->value, "value1");
9432
TEST_ALLOC_PARENT (setting->value, setting);
9433
TEST_ALLOC_SIZE (setting->value, 1+strlen ("value1"));
9435
TEST_EQ (pos, (size_t)len);
9436
TEST_EQ (lineno, 3);
9441
TEST_FEATURE ("multiple names per controller are accepted");
9444
"cgroup perf_event foo key1 value1\n"
9445
"cgroup perf_event bar key2 value2\n");
9451
job = parse_job (NULL, NULL, NULL, "test", buf, len, &pos, &lineno);
9453
if (test_alloc_failed) {
9454
TEST_EQ_P (job, NULL);
9456
err = nih_error_get ();
9457
TEST_EQ (err->number, ENOMEM);
9463
TEST_NE_P (job, NULL);
9464
TEST_LIST_NOT_EMPTY (&job->cgroups);
9465
count = test_list_count (&job->cgroups);
9468
cgroup = (CGroup *)test_list_get_index (&job->cgroups, 0);
9469
TEST_NE_P (cgroup, NULL);
9470
TEST_ALLOC_PARENT (cgroup, job);
9471
TEST_ALLOC_SIZE (cgroup, sizeof (CGroup));
9472
TEST_EQ_STR (cgroup->controller, "perf_event");
9473
TEST_ALLOC_PARENT (cgroup->controller, cgroup);
9474
TEST_ALLOC_SIZE (cgroup->controller, 1+strlen ("perf_event"));
9476
count = test_list_count (&cgroup->names);
9480
cgname = (CGroupName *)test_list_get_index (&cgroup->names, 0);
9481
TEST_NE_P (cgname, NULL);
9483
TEST_ALLOC_PARENT (cgname, cgroup);
9484
TEST_ALLOC_SIZE (cgname, sizeof (CGroupName));
9485
TEST_EQ_STR (cgname->name, "foo");
9486
TEST_ALLOC_PARENT (cgname->name, cgname);
9487
TEST_ALLOC_SIZE (cgname->name, 1+strlen ("foo"));
9489
TEST_LIST_NOT_EMPTY (&cgname->settings);
9491
count = test_list_count (&cgname->settings);
9494
setting = (CGroupSetting *)test_list_get_index (&cgname->settings, 0);
9495
TEST_NE_P (setting, NULL);
9497
TEST_ALLOC_PARENT (setting, cgname);
9498
TEST_ALLOC_SIZE (setting, sizeof (CGroupSetting));
9500
TEST_EQ_STR (setting->key, "key1");
9501
TEST_ALLOC_PARENT (setting->key, setting);
9502
TEST_ALLOC_SIZE (setting->key, 1+strlen ("key1"));
9504
TEST_EQ_STR (setting->value, "value1");
9505
TEST_ALLOC_PARENT (setting->value, setting);
9506
TEST_ALLOC_SIZE (setting->value, 1+strlen ("value1"));
9509
cgname = (CGroupName *)test_list_get_index (&cgroup->names, 1);
9510
TEST_NE_P (cgname, NULL);
9512
TEST_ALLOC_PARENT (cgname, cgroup);
9513
TEST_ALLOC_SIZE (cgname, sizeof (CGroupName));
9514
TEST_EQ_STR (cgname->name, "bar");
9515
TEST_ALLOC_PARENT (cgname->name, cgname);
9516
TEST_ALLOC_SIZE (cgname->name, 1+strlen ("bar"));
9518
TEST_LIST_NOT_EMPTY (&cgname->settings);
9520
count = test_list_count (&cgname->settings);
9523
setting = (CGroupSetting *)test_list_get_index (&cgname->settings, 0);
9524
TEST_NE_P (setting, NULL);
9526
TEST_ALLOC_PARENT (setting, cgname);
9527
TEST_ALLOC_SIZE (setting, sizeof (CGroupSetting));
9529
TEST_EQ_STR (setting->key, "key2");
9530
TEST_ALLOC_PARENT (setting->key, setting);
9531
TEST_ALLOC_SIZE (setting->key, 1+strlen ("key2"));
9533
TEST_EQ_STR (setting->value, "value2");
9534
TEST_ALLOC_PARENT (setting->value, setting);
9535
TEST_ALLOC_SIZE (setting->value, 1+strlen ("value2"));
9537
TEST_EQ (pos, (size_t)len);
9538
TEST_EQ (lineno, 3);
9543
TEST_FEATURE ("multiple keys per controller name are accepted");
9546
"cgroup perf_event foo key1 value1\n"
9547
"cgroup perf_event foo key2 \"value2\"\n");
9553
job = parse_job (NULL, NULL, NULL, "test", buf, len, &pos, &lineno);
9555
if (test_alloc_failed) {
9556
TEST_EQ_P (job, NULL);
9558
err = nih_error_get ();
9559
TEST_EQ (err->number, ENOMEM);
9565
TEST_NE_P (job, NULL);
9566
TEST_LIST_NOT_EMPTY (&job->cgroups);
9567
count = test_list_count (&job->cgroups);
9570
cgroup = (CGroup *)test_list_get_index (&job->cgroups, 0);
9571
TEST_NE_P (cgroup, NULL);
9572
TEST_ALLOC_PARENT (cgroup, job);
9573
TEST_ALLOC_SIZE (cgroup, sizeof (CGroup));
9574
TEST_EQ_STR (cgroup->controller, "perf_event");
9575
TEST_ALLOC_PARENT (cgroup->controller, cgroup);
9576
TEST_ALLOC_SIZE (cgroup->controller, 1+strlen ("perf_event"));
9578
count = test_list_count (&cgroup->names);
9581
cgname = (CGroupName *)test_list_get_index (&cgroup->names, 0);
9582
TEST_NE_P (cgname, NULL);
9584
TEST_ALLOC_PARENT (cgname, cgroup);
9585
TEST_ALLOC_SIZE (cgname, sizeof (CGroupName));
9586
TEST_EQ_STR (cgname->name, "foo");
9587
TEST_ALLOC_PARENT (cgname->name, cgname);
9588
TEST_ALLOC_SIZE (cgname->name, 1+strlen ("foo"));
9590
TEST_LIST_NOT_EMPTY (&cgname->settings);
9592
count = test_list_count (&cgname->settings);
9595
setting = (CGroupSetting *)test_list_get_index (&cgname->settings, 0);
9596
TEST_NE_P (setting, NULL);
9598
TEST_ALLOC_PARENT (setting, cgname);
9599
TEST_ALLOC_SIZE (setting, sizeof (CGroupSetting));
9601
TEST_EQ_STR (setting->key, "key1");
9602
TEST_ALLOC_PARENT (setting->key, setting);
9603
TEST_ALLOC_SIZE (setting->key, 1+strlen ("key1"));
9605
TEST_EQ_STR (setting->value, "value1");
9606
TEST_ALLOC_PARENT (setting->value, setting);
9607
TEST_ALLOC_SIZE (setting->value, 1+strlen ("value1"));
9609
setting = (CGroupSetting *)test_list_get_index (&cgname->settings, 1);
9610
TEST_NE_P (setting, NULL);
9612
TEST_ALLOC_PARENT (setting, cgname);
9613
TEST_ALLOC_SIZE (setting, sizeof (CGroupSetting));
9615
TEST_EQ_STR (setting->key, "key2");
9616
TEST_ALLOC_PARENT (setting->key, setting);
9617
TEST_ALLOC_SIZE (setting->key, 1+strlen ("key2"));
9619
TEST_EQ_STR (setting->value, "value2");
9620
TEST_ALLOC_PARENT (setting->value, setting);
9621
TEST_ALLOC_SIZE (setting->value, 1+strlen ("value2"));
9623
TEST_EQ (pos, (size_t)len);
9624
TEST_EQ (lineno, 3);
9629
TEST_FEATURE ("new stanza overrides old arguments");
9631
/* value saved for key1 should be "hello world", not "bar" */
9633
"cgroup perf_event foo key1 bar\n"
9634
"cgroup perf_event foo key1 \"hello world\"\n");
9640
job = parse_job (NULL, NULL, NULL, "test", buf, len, &pos, &lineno);
9642
if (test_alloc_failed) {
9643
TEST_EQ_P (job, NULL);
9645
err = nih_error_get ();
9646
TEST_EQ (err->number, ENOMEM);
9652
TEST_NE_P (job, NULL);
9653
TEST_LIST_NOT_EMPTY (&job->cgroups);
9654
count = test_list_count (&job->cgroups);
9657
cgroup = (CGroup *)test_list_get_index (&job->cgroups, 0);
9658
TEST_NE_P (cgroup, NULL);
9659
TEST_ALLOC_PARENT (cgroup, job);
9660
TEST_ALLOC_SIZE (cgroup, sizeof (CGroup));
9661
TEST_EQ_STR (cgroup->controller, "perf_event");
9662
TEST_ALLOC_PARENT (cgroup->controller, cgroup);
9663
TEST_ALLOC_SIZE (cgroup->controller, 1+strlen ("perf_event"));
9665
count = test_list_count (&cgroup->names);
9668
cgname = (CGroupName *)test_list_get_index (&cgroup->names, 0);
9669
TEST_NE_P (cgname, NULL);
9671
TEST_ALLOC_PARENT (cgname, cgroup);
9672
TEST_ALLOC_SIZE (cgname, sizeof (CGroupName));
9673
TEST_EQ_STR (cgname->name, "foo");
9674
TEST_ALLOC_PARENT (cgname->name, cgname);
9675
TEST_ALLOC_SIZE (cgname->name, 1+strlen ("foo"));
9677
TEST_LIST_NOT_EMPTY (&cgname->settings);
9679
count = test_list_count (&cgname->settings);
9682
setting = (CGroupSetting *)test_list_get_index (&cgname->settings, 0);
9683
TEST_NE_P (setting, NULL);
9685
TEST_ALLOC_PARENT (setting, cgname);
9686
TEST_ALLOC_SIZE (setting, sizeof (CGroupSetting));
9688
TEST_EQ_STR (setting->key, "key1");
9689
TEST_ALLOC_PARENT (setting->key, setting);
9690
TEST_ALLOC_SIZE (setting->key, 1+strlen ("key1"));
9692
TEST_EQ_STR (setting->value, "hello world");
9693
TEST_ALLOC_PARENT (setting->value, setting);
9694
TEST_ALLOC_SIZE (setting->value, 1+strlen ("hello world"));
9696
TEST_EQ (pos, (size_t)len);
9697
TEST_EQ (lineno, 3);
9703
#endif /* ENABLE_CGROUPS */
8822
9706
main (int argc,