79 lines · c
1// SPDX-License-Identifier: GPL-2.02#include <test_progs.h>3#include <bpf/btf.h>4#include "bpf/libbpf_internal.h"5 6static int duration = 0;7 8static void validate_mask(int case_nr, const char *exp, bool *mask, int n)9{10 int i;11 12 for (i = 0; exp[i]; i++) {13 if (exp[i] == '1') {14 if (CHECK(i + 1 > n, "mask_short",15 "case #%d: mask too short, got n=%d, need at least %d\n",16 case_nr, n, i + 1))17 return;18 CHECK(!mask[i], "cpu_not_set",19 "case #%d: mask differs, expected cpu#%d SET\n",20 case_nr, i);21 } else {22 CHECK(i < n && mask[i], "cpu_set",23 "case #%d: mask differs, expected cpu#%d UNSET\n",24 case_nr, i);25 }26 }27 CHECK(i < n, "mask_long",28 "case #%d: mask too long, got n=%d, expected at most %d\n",29 case_nr, n, i);30}31 32static struct {33 const char *cpu_mask;34 const char *expect;35 bool fails;36} test_cases[] = {37 { "0\n", "1", false },38 { "0,2\n", "101", false },39 { "0-2\n", "111", false },40 { "0-2,3-4\n", "11111", false },41 { "0", "1", false },42 { "0-2", "111", false },43 { "0,2", "101", false },44 { "0,1-3", "1111", false },45 { "0,1,2,3", "1111", false },46 { "0,2-3,5", "101101", false },47 { "3-3", "0001", false },48 { "2-4,6,9-10", "00111010011", false },49 /* failure cases */50 { "", "", true },51 { "0-", "", true },52 { "0 ", "", true },53 { "0_1", "", true },54 { "1-0", "", true },55 { "-1", "", true },56};57 58void test_cpu_mask()59{60 int i, err, n;61 bool *mask;62 63 for (i = 0; i < ARRAY_SIZE(test_cases); i++) {64 mask = NULL;65 err = parse_cpu_mask_str(test_cases[i].cpu_mask, &mask, &n);66 if (test_cases[i].fails) {67 CHECK(!err, "should_fail",68 "case #%d: parsing should fail!\n", i + 1);69 } else {70 if (CHECK(err, "parse_err",71 "case #%d: cpu mask parsing failed: %d\n",72 i + 1, err))73 continue;74 validate_mask(i + 1, test_cases[i].expect, mask, n);75 }76 free(mask);77 }78}79