# XML Parser Test Suite This document describes the comprehensive test suite for the `xmlparser` package and related TED XML models. ## ๐Ÿ“ Test Files Overview ### Core Package Tests (`pkg/xmlparser/`) - **`interfaces_test.go`** - Tests for interfaces, types, and basic structures - **`parser_test.go`** - Tests for XML parsing functionality and core parser logic - **`utils_test.go`** - Tests for utility functions and error handling - **`benchmark_test.go`** - Performance benchmarks and memory allocation tests ### TED Models Tests (`ted/`) - **`ted_test.go`** - Tests for TED XML models and validation logic ### Test Infrastructure - **`run_tests.sh`** - Comprehensive test runner script with coverage analysis - **`TEST_SUITE.md`** - This documentation file ## ๐Ÿงช Test Categories ### 1. Interface and Type Tests (`interfaces_test.go`) - **Default Parser Options**: Validates default configuration values - **XML Metadata**: Tests metadata extraction and structure - **Parse Results**: Validates result structure and error handling - **Mock Implementation**: Tests the `MockParseable` test helper - **Parser Interface**: Ensures interface compliance and method availability **Key Test Functions:** - `TestDefaultParserOptions()` - `TestXMLMetadata()` - `TestParseResult()` - `TestMockParseable()` - `TestParserInterface()` ### 2. Parser Functionality Tests (`parser_test.go`) - **Parser Creation**: Tests parser instantiation with various options - **XML Parsing**: Tests parsing from string, bytes, and readers - **Validation**: Tests XML structure validation and depth limits - **Size Constraints**: Tests parsing with size and depth limitations - **Error Scenarios**: Tests handling of malformed XML and validation failures - **Metadata Extraction**: Tests XML metadata extraction (version, encoding, namespace) - **Concurrent Parsing**: Tests thread safety and concurrent access **Key Test Functions:** - `TestNewParser()` - `TestParseString()` / `TestParseBytes()` / `TestParse()` - `TestValidate()` - `TestParseWithResult()` - `TestConcurrentParsing()` ### 3. Utility Function Tests (`utils_test.go`) - **Validation Errors**: Tests error structures and formatting - **XML Sanitization**: Tests removal of invalid XML characters - **XML Name Validation**: Tests XML element name validation rules - **Namespace Validation**: Tests XML namespace URI validation - **String Utilities**: Tests whitespace normalization and string truncation - **Error Types**: Tests error interface implementations **Key Test Functions:** - `TestValidationError()` / `TestValidationErrors()` - `TestXMLParseError()` - `TestSanitizeXMLString()` - `TestValidateXMLName()` - `TestIsValidNamespace()` - `TestNormalizeWhitespace()` - `TestTruncateString()` ### 4. TED Model Tests (`ted/ted_test.go`) - **Contract Notice Validation**: Tests validation rules and business logic - **Getter Methods**: Tests all getter methods for extracting data from XML - **Extension Handling**: Tests handling of UBL extensions and eForms data - **Complex Scenarios**: Tests nested structures and edge cases - **Date/Time Validation**: Tests various date format validations - **Currency and Duration**: Tests validation of currency codes and duration units **Key Test Functions:** - `TestContractNoticeValidation()` - `TestContractNoticeBasicGetters()` - `TestContractNoticeExtensionGetters()` - `TestContractNoticeProcurementDetails()` - `TestValidDateFormats()` ### 5. Performance Benchmarks (`benchmark_test.go`) - **Parsing Performance**: Benchmarks for different XML sizes (small, medium, large) - **Memory Allocation**: Tests memory usage patterns during parsing - **Utility Performance**: Benchmarks for utility functions - **Concurrent Performance**: Tests performance under concurrent load - **Validation Performance**: Benchmarks for different validation scenarios **Key Benchmark Functions:** - `BenchmarkParseString()` / `BenchmarkParseBytes()` - `BenchmarkParseSmallXML()` / `BenchmarkParseMediumXML()` / `BenchmarkParseLargeXML()` - `BenchmarkConcurrentParsing()` - `BenchmarkMemoryAllocation()` ## ๐Ÿš€ Running Tests ### Quick Test Run ```bash # Run all tests go test -v ./... # Run tests with coverage go test -v -cover ./... # Run specific test category go test -v -run=TestParser go test -v -run=TestValidation go test -v -run=TestUtils ``` ### Comprehensive Test Suite ```bash # Run the complete test suite with coverage and benchmarks cd pkg/xmlparser ./run_tests.sh ``` ### Benchmark Tests ```bash # Run all benchmarks go test -bench=. -benchmem # Run specific benchmarks go test -bench=BenchmarkParse -benchmem go test -bench=BenchmarkConcurrent -benchmem # Run benchmarks with profiling go test -bench=. -cpuprofile=cpu.prof -memprofile=mem.prof ``` ### Coverage Analysis ```bash # Generate coverage report go test -coverprofile=coverage.out go tool cover -html=coverage.out -o coverage.html # View coverage in terminal go tool cover -func=coverage.out ``` ## ๐Ÿ“Š Test Statistics ### Coverage Targets - **Overall Coverage**: โ‰ฅ 80% - **Critical Paths**: โ‰ฅ 95% - **Error Scenarios**: โ‰ฅ 90% - **Utility Functions**: โ‰ฅ 95% ### Test Counts (Approximate) - **Unit Tests**: 50+ test functions - **Benchmarks**: 20+ benchmark functions - **Test Cases**: 200+ individual test scenarios - **Mock Objects**: Full `MockParseable` implementation ## ๐Ÿ”ง Test Infrastructure ### Mock Objects **`MockParseable`**: Test implementation of the `Parseable` interface - Supports both valid and invalid states for testing validation - Includes all required XML structure elements - Implements proper validation logic for testing error scenarios ### Test Utilities - **Error Readers**: For testing I/O error scenarios - **XML Test Data**: Various XML samples for different test cases - **Concurrent Test Helpers**: For testing thread safety ### Test Configuration - **Parallel Execution**: Concurrent tests are properly isolated - **Race Detection**: All tests pass with `-race` flag - **Memory Testing**: Benchmarks include memory allocation tracking - **Timeout Handling**: Long-running tests have appropriate timeouts ## ๐Ÿšจ Common Test Scenarios ### Success Cases - Valid XML parsing with all data types - Proper validation of business rules - Correct metadata extraction - Successful error handling and recovery ### Error Cases - Malformed XML structure - Invalid business data (missing required fields) - Size and depth limit violations - I/O errors during reading - Validation failures ### Edge Cases - Empty XML documents - Very large XML documents - Deeply nested structures - Unicode and special characters - Concurrent access patterns ## ๐Ÿ“ˆ Performance Expectations ### Parsing Performance - **Small XML** (< 1KB): < 10ฮผs per operation - **Medium XML** (1-10KB): < 100ฮผs per operation - **Large XML** (10-100KB): < 1ms per operation ### Memory Usage - **Parsing Overhead**: < 3KB per operation - **Memory Allocations**: < 100 allocations per parse - **No Memory Leaks**: All tests pass memory leak detection ### Concurrent Performance - **Thread Safety**: All operations are thread-safe - **Scalability**: Performance scales linearly with CPU cores - **Resource Sharing**: Parsers can be safely shared between goroutines ## ๐Ÿ” Debugging Tests ### Running Individual Tests ```bash # Run specific test with verbose output go test -v -run=TestSpecificFunction # Run test with race detection go test -race -run=TestConcurrent # Run test with memory profiling go test -run=TestMemory -memprofile=mem.prof ``` ### Test Debugging Tips 1. **Use `-v` flag** for verbose output to see individual test progress 2. **Use `-race` flag** to detect race conditions in concurrent tests 3. **Use `-count=1`** to disable test caching for consistent results 4. **Use `-timeout`** to prevent hanging tests in CI environments 5. **Check coverage reports** to identify untested code paths ## ๐Ÿ“ Adding New Tests ### Guidelines for New Tests 1. **Follow naming conventions**: `TestFunctionName` for unit tests, `BenchmarkFunctionName` for benchmarks 2. **Use table-driven tests** for multiple test cases 3. **Include both success and failure scenarios** 4. **Add appropriate benchmarks** for performance-critical code 5. **Update this documentation** when adding new test categories ### Test Structure Template ```go func TestNewFeature(t *testing.T) { tests := []struct { name string input InputType expected ExpectedType expectError bool }{ { name: "Valid case", input: validInput, expected: expectedOutput, expectError: false, }, { name: "Error case", input: invalidInput, expected: nil, expectError: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := FunctionUnderTest(tt.input) if tt.expectError { if err == nil { t.Errorf("Expected error but got none") } return } if err != nil { t.Errorf("Unexpected error: %v", err) return } if !reflect.DeepEqual(result, tt.expected) { t.Errorf("Expected %v, got %v", tt.expected, result) } }) } } ``` ## ๐ŸŽฏ Continuous Integration ### CI Pipeline Tests 1. **Unit Tests**: All unit tests must pass 2. **Race Detection**: Tests must pass with `-race` flag 3. **Coverage Check**: Coverage must meet minimum thresholds 4. **Benchmark Regression**: Performance must not regress significantly 5. **Lint Checks**: Code must pass all linting rules ### Quality Gates - โœ… All tests pass - โœ… Coverage โ‰ฅ 80% - โœ… No race conditions detected - โœ… Benchmarks within acceptable range - โœ… No critical linting errors --- ## ๐Ÿ“ž Support For questions about the test suite or adding new tests, please refer to: 1. **Code Comments**: Inline documentation in test files 2. **README.md**: Main package documentation 3. **Architecture Documentation**: Project-wide coding standards 4. **Team Knowledge Base**: Internal development guidelines --- *This test suite ensures the reliability, performance, and maintainability of the XML parser package and related TED models.*