top of page
90s theme grid background
Writer's pictureGunashree RS

API Sanity Checker: Guide for Testing C/C++ Libraries

In the world of software development, testing APIs (Application Programming Interfaces) is a vital step to ensure the stability, reliability, and functionality of the software components you build. For developers working with C and C++ libraries, ensuring that your API functions correctly across various use cases is particularly challenging due to the complex nature of these languages.


This is where the API Sanity Checker comes in. It is a tool that automatically generates basic unit tests for C and C++ library APIs, simplifying the process of verifying API behavior. By analyzing function declarations in header files, API Sanity Checker automatically generates and executes "sanity" tests, detecting critical issues such as crashes, segmentation faults, and improper returns.


In this comprehensive guide, we will explore the functionality, usage, and benefits of the API Sanity Checker, and how it can help developers ensure that their C/C++ libraries are tested reliably.



What is API Sanity Checker?

API Sanity Checker is an open-source tool that helps developers test C and C++ library APIs by automatically generating simple, shallow-quality test cases. It was developed by Andrey Ponomarenko and is designed to assist developers in catching critical errors early in the development process. The tool focuses on creating input data for parameters and generating unit tests based on header file declarations.


Unlike traditional manual unit testing, where developers must write test cases for every function, API Sanity Checker automates this process. The tests generated by API Sanity Checker are basic in nature but sufficient to identify major issues like:

  • Crashes (e.g., segmentation faults)

  • Non-zero exit codes

  • Program hangs

  • Signals emitted by erroneous code


API Sanity Checker

Key Features of API Sanity Checker

  • Automated Test Generation: Automatically generates unit tests for every function in the API.

  • Crash Detection: Detects crashes such as segmentation faults and improper signal handling.

  • Test Execution: Builds and runs generated tests to validate API functions.

  • Supports Multiple Libraries: Works with various C/C++ libraries and APIs.

  • Basic Input Data: Generates reasonable input values for testing API functions.

  • Extensive Error Reporting: Provides detailed feedback on test outcomes, including non-zero program return codes and program hang detection.



Why Use API Sanity Checker?

Manually writing unit tests for a large C/C++ library can be extremely time-consuming and error-prone. API Sanity Checker automates this process, making it easier for developers to ensure that their libraries are free from major errors.


Here’s why you should consider using API Sanity Checker:

  1. Efficient Error Detection: It quickly identifies major issues like crashes and segmentation faults, which can be difficult to pinpoint manually.

  2. Saves Time: Automatically generating tests allows developers to focus on higher-level tasks instead of writing basic unit tests from scratch.

  3. Improves Software Quality: With automated testing, developers can detect potential problems earlier in the development cycle, leading to more reliable software.

  4. Reduces Manual Testing: Instead of manually creating test cases for each function, API Sanity Checker does the heavy lifting, allowing you to run automated tests and focus on more critical test scenarios.

  5. Easy Integration: The tool integrates with other C/C++ development tools like ABI Compliance Checker, which ensures backward compatibility of libraries.



How Does API Sanity Checker Work?

API Sanity Checker analyzes C/C++ header files and library files to extract function declarations and generate test cases. It then builds and runs these tests to ensure that the API behaves as expected.


Here is a simplified overview of the process:

  1. Analyzing API Declarations: The tool analyzes the declarations in the header files to understand the API's functions, arguments, and return types.

  2. Generating Test Cases: Based on the API declarations, the API Sanity Checker generates "sanity" test cases. These are basic test cases designed to ensure that the functions do not crash under normal conditions.

  3. Building the Test Suite: The tool builds the generated test cases using the appropriate libraries and tools (e.g., G++ and GNU Binutils).

  4. Running Tests: The API Sanity Checker runs the tests and monitors the behavior of the API, looking for crashes, invalid return values, signals, or program hangs.

  5. Reporting Results: Once the tests are executed, the tool provides a report detailing any issues encountered during the test runs, including segmentation faults or improper program exits.



Installing API Sanity Checker

Before installing API Sanity Checker, ensure that your system meets the following prerequisites:

Once these dependencies are in place, you can install API Sanity Checker by running the following command:

bash

sudo make install prefix=/usr

This will install the tool and make it available for use in your environment.


Requirements Recap

  • ABI Compliance Checker: Ensures backward compatibility and is required to verify the API.

  • Perl 5: Required for script execution and test case generation.

  • G++: Used to compile the generated tests.

  • GNU Binutils: A collection of programming tools needed for building binaries.

  • Ctags: Used for parsing and analyzing C/C++ code.



How to Use API Sanity Checker

Using API Sanity Checker is straightforward. After installation, you can generate, build, and run tests for your library API using the following command:

bash

api-sanity-checker -lib NAME -d VERSION.xml -gen -build -run

Understanding the Command

  • -lib NAME: Specifies the name of the library you are testing.

  • -d VERSION.xml: The XML descriptor containing information about the API version, header file locations, and library paths.

  • -gen: Instructs the tool to generate test cases based on the provided API declarations.

  • -build: Builds the generated test cases using the provided compiler (G++).

  • -run: Run the generated tests to validate the API functions.


Example of a Simple XML Descriptor

xml

<version>
    1.0
</version>

<headers>
    /path/to/headers/
</headers>

<libs>
    /path/to/libraries/
</libs>

This XML descriptor provides the necessary information about the API’s version, the location of header files, and the libraries being tested.


Advanced Usage

For advanced usage, including custom configurations, refer to the documentation or use the -help option to explore additional capabilities.



Test Suite

API Sanity Checker includes a small test suite that ensures the tool is functioning correctly within your environment. You can run the test suite by executing the following command:

bash

api-sanity-checker -test

This will validate that API Sanity Checker is properly installed and configured and that it can generate, build, and run test cases correctly.



Benefits of API Sanity Checker


1. Faster Development Cycles

By automating the generation of unit tests, API Sanity Checker speeds up the development process, allowing developers to focus on more complex test cases and code development.


2. Early Detection of Errors

The tool helps catch critical errors early in the development cycle, reducing the likelihood of serious bugs in production code.


3. Simplified API Testing

Testing APIs manually can be a tedious process, especially in large libraries. API Sanity Checker simplifies this by automatically generating sanity tests for each function in the API.


4. Enhanced Code Quality

With automatic testing, developers can ensure that their API functions are robust and free of critical errors, ultimately leading to higher-quality code.


5. Supports Continuous Integration

API Sanity Checker can be easily integrated into continuous integration (CI) pipelines, ensuring that API functionality is tested with each new commit or build.



Limitations of API Sanity Checker

While API Sanity Checker is a powerful tool, it is important to note that the tests it generates are basic in nature. These tests check for critical errors like crashes and segmentation faults but may not cover more nuanced edge cases or complex API behavior. For thorough testing, developers should complement API Sanity Checker with additional, manually written unit tests.



Conclusion

The API Sanity Checker is a valuable tool for any developer working with C or C++ libraries. It automates the tedious process of generating unit tests, detects crashes and major errors early, and ensures that your API is functioning as expected. By integrating API Sanity Checker into your development workflow, you can save time, improve code quality, and detect potential problems before they reach production.

Whether you are building a small library or a large-scale API, API Sanity Checker provides a fast and reliable way to ensure that your code is stable, safe, and ready for deployment.




FAQs


1. What is API Sanity Checker?

API Sanity Checker is a tool that automatically generates basic unit tests for C and C++ library APIs by analyzing function declarations and testing for crashes, segmentation faults, and improper return values.


2. How does API Sanity Checker work?

API Sanity Checker generates test cases based on function declarations in C/C++ header files, builds the tests, runs them, and checks for critical errors like crashes and program hangs.


3. What languages does API Sanity Checker support?

API Sanity Checker is designed to test APIs written in C and C++.


4. How do I install API Sanity Checker?

You can install API Sanity Checker using sudo make install prefix=/usr, assuming all the required dependencies are in place.


5. What are the main dependencies for API Sanity Checker?

Key dependencies include ABI Compliance Checker, Perl 5, G++, GNU Binutils, and Ctags.


6. Can API Sanity Checker detect segmentation faults?

Yes, the API Sanity Checker is capable of detecting segmentation faults, crashes, and other critical errors in the API.


7. Is API Sanity Checker suitable for large libraries?

Yes, API Sanity Checker is suitable for libraries of any size, though the tests it generates are basic and should be supplemented with more complex unit tests where necessary.


8. Can API Sanity Checker be integrated into CI/CD pipelines?

Yes, API Sanity Checker can be integrated into continuous integration workflows to automatically test API functions with each build or commit.



Key Takeaways

  • API Sanity Checker is a tool that automatically generates basic unit tests for C and C++ libraries.

  • It detects critical errors such as crashes, segmentation faults, and improper return codes.

  • The tool is efficient, easy to use, and can significantly reduce the manual effort required for API testing.

  • API Sanity Checker integrates well with CI pipelines and other tools like ABI Compliance Checker.



External Sources


Comments


bottom of page