Application Fault Injector (AFI) is a simple com- puter program for testing the fault tolerance of other programs. AFI is a library of subroutines designed to inject faults into memory, data structures, and registers. The library is modular, can easily be extended, and can easily be ported to different computer hardware architectures. AFI is not designed to run fault-injection campaigns on complete application programs: instead, it is designed to test fault-tolerant algorithms, subroutines, and data structures. AFI is easy to use. The application programmer has complete control of fault injection.
This program was written by Thomas Wolfe of Caltech for NASA’s Jet Propulsion Laboratory.
This software is available for commercial licensing. Please contact Don Hart of the California Institute of Technology at (818) 393- 3425. Refer to NPO-30344.
This Brief includes a Technical Support Package (TSP).

Application Fault Injector
(reference NPO-30344) is currently available for download from the TSP library.
Don't have an account?
Overview
The document provides an overview of the Application Fault Injector (AFI), a software tool developed by Thomas L. Wolfe at NASA's Jet Propulsion Laboratory. AFI is designed to test the fault tolerance of computer programs by injecting faults into memory, data structures, and registers. It serves as a library of subroutines that can be easily extended and ported across different computer hardware architectures. Unlike tools that run fault-injection campaigns on complete applications, AFI focuses on testing fault-tolerant algorithms, subroutines, and data structures, giving application programmers complete control over the fault injection process.
The document outlines various functionalities of AFI, including the ability to create fault injection regions and define callback routines that execute when a fault is injected. For instance, it describes how to create a data region for a variable and set up a callback to display the variable's value before and after a fault is injected. This feature allows developers to observe the effects of faults in real-time, enhancing their understanding of how their applications respond to errors.
Additionally, the document discusses compile-time options for adding or removing AFI code, allowing users to wrap AFI calls in conditional directives. This flexibility enables developers to easily manage the inclusion of fault injection in their codebase. It also provides an example of injecting faults randomly within a loop, demonstrating how AFI can be used to simulate various fault scenarios during testing.
The document emphasizes that AFI is not intended for general application testing but is specifically tailored for evaluating fault tolerance in algorithms and data structures. It highlights the ease of use and the control it offers to programmers, making it a valuable tool for those working on fault-tolerant systems.
Finally, the document includes a notice regarding the liability and endorsement of the information contained within, clarifying that the U.S. Government and NASA do not assume liability for its use. It also mentions that the work was carried out under contract with NASA, reinforcing the credibility and significance of the tool in the context of aerospace and critical systems development. Overall, AFI represents a significant advancement in the field of fault tolerance testing, providing essential capabilities for developers and researchers.

