github.com/anonymouse64/snapd@v0.0.0-20210824153203-04c4c42d842d/cmd/libsnap-confine-private/fault-injection-test.c (about)

     1  /*
     2   * Copyright (C) 2017 Canonical Ltd
     3   *
     4   * This program is free software: you can redistribute it and/or modify
     5   * it under the terms of the GNU General Public License version 3 as
     6   * published by the Free Software Foundation.
     7   *
     8   * This program is distributed in the hope that it will be useful,
     9   * but WITHOUT ANY WARRANTY; without even the implied warranty of
    10   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    11   * GNU General Public License for more details.
    12   *
    13   * You should have received a copy of the GNU General Public License
    14   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    15   *
    16   */
    17  
    18  #include "fault-injection.h"
    19  #include "fault-injection.c"
    20  
    21  #include <errno.h>
    22  #include <glib.h>
    23  
    24  static bool broken(struct sc_fault_state *state, void *ptr)
    25  {
    26  	return true;
    27  }
    28  
    29  static bool broken_alter_msg(struct sc_fault_state *state, void *ptr)
    30  {
    31  	char **s = ptr;
    32  	*s = "broken";
    33  	return true;
    34  }
    35  
    36  static void test_fault_injection(void)
    37  {
    38  	g_assert_false(sc_faulty("foo", NULL));
    39  
    40  	sc_break("foo", broken);
    41  	g_assert_true(sc_faulty("foo", NULL));
    42  
    43  	sc_reset_faults();
    44  	g_assert_false(sc_faulty("foo", NULL));
    45  
    46  	const char *msg = NULL;
    47  	if (!sc_faulty("foo", &msg)) {
    48  		msg = "working";
    49  	}
    50  	g_assert_cmpstr(msg, ==, "working");
    51  
    52  	sc_break("foo", broken_alter_msg);
    53  	if (!sc_faulty("foo", &msg)) {
    54  		msg = "working";
    55  	}
    56  	g_assert_cmpstr(msg, ==, "broken");
    57  	sc_reset_faults();
    58  }
    59  
    60  static void __attribute__((constructor)) init(void)
    61  {
    62  	g_test_add_func("/fault-injection", test_fault_injection);
    63  }