Remove github.com/google/uuid dependency and update module files
- Deleted the `github.com/google/uuid` dependency from `go.mod` to streamline the project and reduce unnecessary dependencies. - Updated `go.sum` to reflect the removal of the UUID package. - Enhanced the overall module management by ensuring only necessary dependencies are included.
This commit is contained in:
@@ -0,0 +1,350 @@
|
||||
# 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.*
|
||||
Reference in New Issue
Block a user