2019-12-12 04:35:58 +03:00
// SPDX-License-Identifier: GPL-2.0
# include <test_progs.h>
# include <bpf/btf.h>
2020-01-20 16:06:45 +03:00
# include "bpf/libbpf_internal.h"
2019-12-12 04:35:58 +03:00
static int duration = 0 ;
static void validate_mask ( int case_nr , const char * exp , bool * mask , int n )
{
int i ;
for ( i = 0 ; exp [ i ] ; i + + ) {
if ( exp [ i ] = = ' 1 ' ) {
if ( CHECK ( i + 1 > n , " mask_short " ,
" case #%d: mask too short, got n=%d, need at least %d \n " ,
case_nr , n , i + 1 ) )
return ;
CHECK ( ! mask [ i ] , " cpu_not_set " ,
" case #%d: mask differs, expected cpu#%d SET \n " ,
case_nr , i ) ;
} else {
CHECK ( i < n & & mask [ i ] , " cpu_set " ,
" case #%d: mask differs, expected cpu#%d UNSET \n " ,
case_nr , i ) ;
}
}
CHECK ( i < n , " mask_long " ,
" case #%d: mask too long, got n=%d, expected at most %d \n " ,
case_nr , n , i ) ;
}
static struct {
const char * cpu_mask ;
const char * expect ;
bool fails ;
} test_cases [ ] = {
{ " 0 \n " , " 1 " , false } ,
{ " 0,2 \n " , " 101 " , false } ,
{ " 0-2 \n " , " 111 " , false } ,
{ " 0-2,3-4 \n " , " 11111 " , false } ,
{ " 0 " , " 1 " , false } ,
{ " 0-2 " , " 111 " , false } ,
{ " 0,2 " , " 101 " , false } ,
{ " 0,1-3 " , " 1111 " , false } ,
{ " 0,1,2,3 " , " 1111 " , false } ,
{ " 0,2-3,5 " , " 101101 " , false } ,
{ " 3-3 " , " 0001 " , false } ,
{ " 2-4,6,9-10 " , " 00111010011 " , false } ,
/* failure cases */
{ " " , " " , true } ,
{ " 0- " , " " , true } ,
{ " 0 " , " " , true } ,
{ " 0_1 " , " " , true } ,
{ " 1-0 " , " " , true } ,
{ " -1 " , " " , true } ,
} ;
void test_cpu_mask ( )
{
int i , err , n ;
bool * mask ;
for ( i = 0 ; i < ARRAY_SIZE ( test_cases ) ; i + + ) {
mask = NULL ;
err = parse_cpu_mask_str ( test_cases [ i ] . cpu_mask , & mask , & n ) ;
if ( test_cases [ i ] . fails ) {
CHECK ( ! err , " should_fail " ,
" case #%d: parsing should fail! \n " , i + 1 ) ;
} else {
if ( CHECK ( err , " parse_err " ,
" case #%d: cpu mask parsing failed: %d \n " ,
i + 1 , err ) )
continue ;
validate_mask ( i + 1 , test_cases [ i ] . expect , mask , n ) ;
}
free ( mask ) ;
}
}