2019-11-14 10:57:10 -08:00
// SPDX-License-Identifier: GPL-2.0
/* Copyright (c) 2019 Facebook */
# include <test_progs.h>
2021-05-13 17:36:20 -07:00
# include "fexit_test.lskel.h"
2019-11-14 10:57:10 -08:00
2021-10-28 12:04:59 +05:30
static int fexit_test ( struct fexit_test_lskel * fexit_skel )
2019-11-14 10:57:10 -08:00
{
2020-03-04 20:18:52 +01:00
int err , prog_fd , i ;
2021-05-13 17:36:20 -07:00
int link_fd ;
2020-03-04 20:18:52 +01:00
__u64 * result ;
2022-02-02 15:54:20 -08:00
LIBBPF_OPTS ( bpf_test_run_opts , topts ) ;
2019-11-14 10:57:10 -08:00
2021-10-28 12:04:59 +05:30
err = fexit_test_lskel__attach ( fexit_skel ) ;
2021-04-14 21:51:44 +02:00
if ( ! ASSERT_OK ( err , " fexit_attach " ) )
return err ;
/* Check that already linked program can't be attached again. */
2021-10-28 12:04:59 +05:30
link_fd = fexit_test_lskel__test1__attach ( fexit_skel ) ;
2021-05-13 17:36:20 -07:00
if ( ! ASSERT_LT ( link_fd , 0 , " fexit_attach_link " ) )
2021-04-14 21:51:44 +02:00
return - 1 ;
2019-11-14 10:57:10 -08:00
2021-05-13 17:36:20 -07:00
prog_fd = fexit_skel - > progs . test1 . prog_fd ;
2022-02-02 15:54:20 -08:00
err = bpf_prog_test_run_opts ( prog_fd , & topts ) ;
2021-04-14 21:51:44 +02:00
ASSERT_OK ( err , " test_run " ) ;
2022-02-02 15:54:20 -08:00
ASSERT_EQ ( topts . retval , 0 , " test_run " ) ;
2019-11-14 10:57:10 -08:00
2020-03-04 20:18:52 +01:00
result = ( __u64 * ) fexit_skel - > bss ;
2021-04-14 21:51:44 +02:00
for ( i = 0 ; i < sizeof ( * fexit_skel - > bss ) / sizeof ( __u64 ) ; i + + ) {
if ( ! ASSERT_EQ ( result [ i ] , 1 , " fexit_result " ) )
return - 1 ;
2020-03-04 20:18:52 +01:00
}
2019-11-14 10:57:10 -08:00
2021-10-28 12:04:59 +05:30
fexit_test_lskel__detach ( fexit_skel ) ;
2021-04-14 21:51:44 +02:00
/* zero results for re-attach test */
memset ( fexit_skel - > bss , 0 , sizeof ( * fexit_skel - > bss ) ) ;
return 0 ;
}
void test_fexit_test ( void )
{
2021-10-28 12:04:59 +05:30
struct fexit_test_lskel * fexit_skel = NULL ;
2021-04-14 21:51:44 +02:00
int err ;
2021-10-28 12:04:59 +05:30
fexit_skel = fexit_test_lskel__open_and_load ( ) ;
2021-04-14 21:51:44 +02:00
if ( ! ASSERT_OK_PTR ( fexit_skel , " fexit_skel_load " ) )
goto cleanup ;
err = fexit_test ( fexit_skel ) ;
if ( ! ASSERT_OK ( err , " fexit_first_attach " ) )
goto cleanup ;
err = fexit_test ( fexit_skel ) ;
ASSERT_OK ( err , " fexit_second_attach " ) ;
2020-03-04 20:18:52 +01:00
cleanup :
2021-10-28 12:04:59 +05:30
fexit_test_lskel__destroy ( fexit_skel ) ;
2019-11-14 10:57:10 -08:00
}