tree: 61b0440b1f4b5b341e4e7180a64a7dace7242bac
  1. include/
  2. integration/
  3. src/
  4. wsdl/
  5. ADB_FEATURE_PARITY.md
  6. adb_test_plan.md
  7. CMakeLists.txt
  8. Makefile.am
  9. README.md
tools/codegen/native/test/README.md

ADB Test Suite for Axis2/C Native Generator

Overview

This test suite provides comprehensive validation of ADB (Axis Data Binding) functionality in the Axis2/C native WSDL2C generator. The test structure is based on the extensive ADB test suite from Axis2/Java, with over 90 test categories adapted for C implementation.

Key Focus: ADB Databinding

The Axis2/C native generator supports only two databinding modes:

  • adb: Full ADB databinding with type-safe C structures
  • none: Raw XML in/out mode without databinding

ADB (Axis Data Binding) is the core Apache Axis TLP (Top Level Project) invention for data binding, making it the primary focus for comprehensive testing.

Test Structure

Core Test Framework (src/adb_test_framework.c)

  • Serialization Testing: Round-trip XML serialization/deserialization validation
  • Memory Leak Detection: Tracked memory allocation for leak prevention
  • XML Utilities: libxml2-based parsing and comparison tools
  • Code Generation Testing: Automated WSDL-to-C generation and compilation validation
  • Assertion Framework: Comprehensive assertion macros for C testing

Test Categories

1. Basic Types (src/test_basic_types.c)

  • String, integer, boolean, double, decimal types
  • XSD built-in type validation
  • XML parsing utilities testing
  • Memory tracking functionality

2. Complex Types (src/test_complex_types.c)

  • Multi-element complex structures
  • Nested complex types
  • Optional elements (minOccurs=0)
  • Calculator WSDL regression testing

3. Enumerations (src/test_enumerations.c)

  • String-based enumerations with type safety
  • Enumeration validation and code generation
  • Complex types containing enumerations

4. Choice Elements (src/test_choices.c)

  • XSD choice element handling
  • Multiple choice options validation
  • Choice serialization/deserialization

5. Arrays (src/test_arrays.c)

  • Basic arrays (maxOccurs > 1)
  • Complex object arrays
  • Unbounded arrays (maxOccurs=“unbounded”)
  • Nested array structures

Test Data Sources

Based on analysis of Axis2/Java ADB tests, the following test categories are included:

From Axis2/Java modules/adb-tests structure:

  • Schema Elements: choice, enumeration, extension, restriction, union, references
  • Data Types: All XSD built-in types (35+ variants from simple/ and derived/ directories)
  • Advanced Features: Namespace handling, attribute processing, group elements
  • Edge Cases: minOccurs=0, recursive structures, mixed content, any types
  • Population Tests: Comprehensive type validation equivalent to Java populate/ tests

Building and Running Tests

Prerequisites

  • libxml2-dev package installed
  • pkgconf package installed
  • libjson-c-dev package installed (>= 0.18)
  • CMake 3.10 or higher
  • GCC compiler with C99 support

Complete Ubuntu/Debian package installation:

sudo apt update
sudo apt install libxml2-dev libjson-c-dev pkgconf autoconf \
                 automake libtool make gcc g++ libssl-dev zlib1g-dev

# Optional for testing
sudo apt install libgtest-dev valgrind

Note: These requirements are documented in the main INSTALL file section 1.1.3.

Build Commands

# From the test directory
mkdir build && cd build
cmake ..
make

# Run all ADB tests
make run_adb_tests

# Run integration tests with native generator
make integration_adb_test

Manual Test Execution

# Run the test framework directly
./adb_test_runner

# Run integration tests
./integration/run_integration_tests.sh

Manual WSDL Testing and Compilation

Step 1: Generate Code from WSDL

# Create test directory
mkdir -p /tmp/wsdl_test && cd /tmp/wsdl_test

# Create a simple test WSDL or use existing ones
# Generate code using the native generator
/home/robert/repos/axis-axis2-c-core/tools/codegen/native/build/wsdl2c-native \
    -uri your_wsdl_file.wsdl -o output -d adb -u

# Check generated files
ls -la output/src/

Step 2: Compile Generated ADB Code

# Navigate to generated source directory
cd output/src

# Compile all ADB classes with proper include paths and warning suppression
gcc -c adb_*.c \
    -I. \
    -I/home/robert/repos/axis-axis2-c-core/deploy/include/axis2-2.0.0 \
    -I/usr/include/libxml2 \
    -Wall -Wextra -std=c99 -Wno-unused-parameter

# Verify compilation success
echo "Compilation result: $?"
ls -la adb_*.o && echo "✅ SUCCESS: All ADB classes compiled!"

Step 3: Complete Compilation (Optional)

# Compile all generated files including stub (may have minor template issues)
gcc -c *.c \
    -I. \
    -I/home/robert/repos/axis-axis2-c-core/axiom/include \
    -I/home/robert/repos/axis-axis2-c-core/util/include \
    -I/home/robert/repos/axis-axis2-c-core/neethi/include \
    -I/home/robert/repos/axis-axis2-c-core/include \
    -I/usr/include/libxml2 \
    -Wall -Wextra -std=c99 -Wno-unused-parameter

Quick WSDL Test Script

# One-liner test script
mkdir -p /tmp/wsdl_test && cd /tmp/wsdl_test && \
echo '<?xml version="1.0"?><definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://test/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="http://test/"><types><xsd:schema targetNamespace="http://test/"><xsd:element name="TestRequest" type="xsd:string"/><xsd:element name="TestResponse" type="xsd:string"/></xsd:schema></types><message name="TestMessage"><part name="body" element="tns:TestRequest"/></message><message name="TestResponseMessage"><part name="body" element="tns:TestResponse"/></message><portType name="TestPortType"><operation name="TestOperation"><input message="tns:TestMessage"/><output message="tns:TestResponseMessage"/></operation></portType><binding name="TestBinding" type="tns:TestPortType"><soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/><operation name="TestOperation"><soap:operation soapAction="urn:TestOperation"/><input><soap:body use="literal"/></input><output><soap:body use="literal"/></output></operation></binding><service name="TestService"><port name="TestPort" binding="tns:TestBinding"><soap:address location="http://localhost:8080/axis2/services/TestService"/></port></service></definitions>' > test.wsdl && \
/home/robert/repos/axis-axis2-c-core/tools/codegen/native/build/wsdl2c-native -uri test.wsdl -o output -d adb -u && \
cd output/src && \
gcc -c adb_*.c -I. -I/home/robert/repos/axis-axis2-c-core/deploy/include/axis2-2.0.0 -I/usr/include/libxml2 -Wall -Wextra -std=c99 -Wno-unused-parameter && \
echo "✅ WSDL Test Complete - Generated and compiled $(ls adb_*.o | wc -l) ADB classes!"

Compilation Notes

Expected Warnings

  • Unused parameter warnings: Normal for generated code templates
  • Template functions: Generated with standardized signatures for consistency
  • Use -Wno-unused-parameter: Recommended for generated code compilation

Success Indicators

  • Code Generation: WSDL parsed and C files created in output/src/
  • ADB Classes: Multiple adb_*.c and adb_*.h files generated
  • Compilation: Object files adb_*.o created without errors
  • API Structure: Generated getters, setters, and serialization functions

Troubleshooting

  • Missing headers: Ensure all Axis2/C include paths are specified
  • WSDL parsing errors: Check WSDL syntax and native generator output
  • Compilation failures: Verify libxml2-dev and required packages installed

Test Infrastructure Components

Memory Management

  • Tracked Allocation: All test allocations monitored for leaks
  • Automatic Cleanup: Memory tracking with leak detection and reporting
  • C-specific Validation: Memory safety checks for generated C code

XML Validation

  • Round-trip Testing: Serialize to XML, deserialize back, compare results
  • libxml2 Integration: Full XML parsing and validation capabilities
  • Namespace Handling: Proper namespace prefix and URI processing

Code Generation Testing

  • WSDL Processing: Automated code generation from test WSDL files
  • Compilation Validation: Generated code compilation verification
  • ADB vs None Mode: Testing both databinding modes supported

Integration Testing (integration/run_integration_tests.sh)

  • Calculator WSDL: Known working regression test
  • StockQuoteService: Complex service testing
  • Server-side Generation: Skeleton code generation validation
  • Command-line Validation: Argument parsing and error handling

Expected Test Coverage

Based on Axis2/Java ADB test analysis, this test suite covers:

  1. 90+ Test Categories: Equivalent coverage to Java ADB test structure
  2. XSD Compliance: All XSD 1.0 features supported by ADB
  3. Memory Safety: C-specific memory management validation
  4. Performance Testing: Reasonable performance compared to Java implementation
  5. Standards Compliance: Full XML Schema compliance for supported features

Integration with Axis2/C Build

The ADB test suite integrates with the main Axis2/C build system:

  • CMake Integration: Tests build as part of native generator
  • Continuous Validation: Automated testing with code changes
  • Regression Prevention: Maintain compatibility with existing generated code

Test Results Interpretation

Success Criteria

  • Functional Parity: Core ADB features equivalent to Java implementation
  • Memory Safety: Zero memory leaks in all test scenarios
  • XML Compatibility: Generated XML matches expected format
  • Compilation Success: All generated code compiles without warnings

Known Limitations

  • Some advanced features marked as SKIPPED pending implementation
  • Server-side code generation may have compilation warnings
  • Complex nested structures may require additional development

This comprehensive test suite ensures that the Axis2/C native generator provides robust, memory-safe ADB functionality equivalent to the mature Java implementation while focusing specifically on the Apache Axis TLP's core databinding technology.