docs: reorganize and update all documentation to reflect production readiness
- Move all documentation to docs/ directory for better organization - Update ANALYSIS.md with current production status and resolved issues - Completely rewrite IMPLEMENTATION_COMPARISON.md with feature parity matrix - Update TODO.md to reflect completed milestones and future roadmap - Create comprehensive docs/README.md as documentation index - Update main README.md with project status and documentation links - All documentation now reflects August 2025 production-ready status - Both implementations verified as feature-complete with identical output 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
6c387abfbb
commit
f80f89cdd5
11 changed files with 1086 additions and 0 deletions
154
docs/test-config-comparison.md
Normal file
154
docs/test-config-comparison.md
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
# Test Configuration Comparison: Rust vs Go
|
||||
|
||||
## Overview
|
||||
|
||||
Two identical test configurations have been created for testing both Rust and Go implementations with the test environment:
|
||||
|
||||
- **Rust**: `/home/olemd/src/mail2couch/rust/config-test-rust.json`
|
||||
- **Go**: `/home/olemd/src/mail2couch/go/config-test-go.json`
|
||||
|
||||
## Configuration Details
|
||||
|
||||
Both configurations use the **same test environment** from `/home/olemd/src/mail2couch/test/` with:
|
||||
|
||||
### Database Connection
|
||||
- **CouchDB URL**: `http://localhost:5984`
|
||||
- **Admin Credentials**: `admin` / `password`
|
||||
|
||||
### IMAP Test Server
|
||||
- **Host**: `localhost`
|
||||
- **Port**: `3143` (GreenMail test server)
|
||||
- **Connection**: Plain (no TLS for testing)
|
||||
|
||||
### Test Accounts
|
||||
|
||||
Both configurations use the **same IMAP test accounts**:
|
||||
|
||||
| Username | Password | Purpose |
|
||||
|----------|----------|---------|
|
||||
| `testuser1` | `password123` | Wildcard all folders test |
|
||||
| `syncuser` | `syncpass` | Work pattern test (sync mode) |
|
||||
| `archiveuser` | `archivepass` | Specific folders test |
|
||||
| `testuser2` | `password456` | Subfolder pattern test (disabled) |
|
||||
|
||||
### Mail Sources Configuration
|
||||
|
||||
Both configurations define **identical mail sources** with only the account names differing:
|
||||
|
||||
#### 1. Wildcard All Folders Test
|
||||
- **Account Name**: "**Rust** Wildcard All Folders Test" vs "**Go** Wildcard All Folders Test"
|
||||
- **Mode**: `archive`
|
||||
- **Folders**: All folders (`*`) except `Drafts` and `Trash`
|
||||
- **Filters**: Subject keywords: `["meeting", "important"]`, Sender keywords: `["@company.com"]`
|
||||
|
||||
#### 2. Work Pattern Test
|
||||
- **Account Name**: "**Rust** Work Pattern Test" vs "**Go** Work Pattern Test"
|
||||
- **Mode**: `sync` (delete removed emails)
|
||||
- **Folders**: `Work*`, `Important*`, `INBOX` (exclude `*Temp*`)
|
||||
- **Filters**: Recipient keywords: `["support@", "team@"]`
|
||||
|
||||
#### 3. Specific Folders Only
|
||||
- **Account Name**: "**Rust** Specific Folders Only" vs "**Go** Specific Folders Only"
|
||||
- **Mode**: `archive`
|
||||
- **Folders**: Exactly `INBOX`, `Sent`, `Personal`
|
||||
- **Filters**: None
|
||||
|
||||
#### 4. Subfolder Pattern Test (Disabled)
|
||||
- **Account Name**: "**Rust** Subfolder Pattern Test" vs "**Go** Subfolder Pattern Test"
|
||||
- **Mode**: `archive`
|
||||
- **Folders**: `Work/*`, `Archive/*` (exclude `*/Drafts`)
|
||||
- **Status**: `enabled: false`
|
||||
|
||||
## Expected Database Names
|
||||
|
||||
When run, each implementation will create **different databases** due to the account name differences:
|
||||
|
||||
### Rust Implementation Databases
|
||||
- `m2c_rust_wildcard_all_folders_test`
|
||||
- `m2c_rust_work_pattern_test`
|
||||
- `m2c_rust_specific_folders_only`
|
||||
- `m2c_rust_subfolder_pattern_test` (disabled)
|
||||
|
||||
### Go Implementation Databases
|
||||
- `m2c_go_wildcard_all_folders_test`
|
||||
- `m2c_go_work_pattern_test`
|
||||
- `m2c_go_specific_folders_only`
|
||||
- `m2c_go_subfolder_pattern_test` (disabled)
|
||||
|
||||
## Testing Commands
|
||||
|
||||
### Start Test Environment
|
||||
```bash
|
||||
cd /home/olemd/src/mail2couch/test
|
||||
./start-test-env.sh
|
||||
```
|
||||
|
||||
### Run Rust Implementation
|
||||
```bash
|
||||
cd /home/olemd/src/mail2couch/rust
|
||||
cargo build --release
|
||||
./target/release/mail2couch -c config-test-rust.json
|
||||
```
|
||||
|
||||
### Run Go Implementation
|
||||
```bash
|
||||
cd /home/olemd/src/mail2couch/go
|
||||
go build -o mail2couch .
|
||||
./mail2couch -c config-test-go.json
|
||||
```
|
||||
|
||||
### Verify Results
|
||||
```bash
|
||||
# List all databases
|
||||
curl http://localhost:5984/_all_dbs
|
||||
|
||||
# Check Rust databases
|
||||
curl http://localhost:5984/m2c_rust_wildcard_all_folders_test
|
||||
curl http://localhost:5984/m2c_rust_work_pattern_test
|
||||
curl http://localhost:5984/m2c_rust_specific_folders_only
|
||||
|
||||
# Check Go databases
|
||||
curl http://localhost:5984/m2c_go_wildcard_all_folders_test
|
||||
curl http://localhost:5984/m2c_go_work_pattern_test
|
||||
curl http://localhost:5984/m2c_go_specific_folders_only
|
||||
```
|
||||
|
||||
### Stop Test Environment
|
||||
```bash
|
||||
cd /home/olemd/src/mail2couch/test
|
||||
./stop-test-env.sh
|
||||
```
|
||||
|
||||
## Validation Points
|
||||
|
||||
Both implementations should produce **identical results** when processing the same IMAP accounts:
|
||||
|
||||
1. **Database Structure**: Same document schemas and field names
|
||||
2. **Message Processing**: Same email parsing and storage logic
|
||||
3. **Folder Filtering**: Same wildcard pattern matching
|
||||
4. **Message Filtering**: Same keyword filtering behavior
|
||||
5. **Sync Behavior**: Same incremental sync and deletion handling
|
||||
6. **Error Handling**: Same retry logic and error recovery
|
||||
|
||||
The only differences should be:
|
||||
- Database names (due to account name prefixes)
|
||||
- Timestamp precision (implementation-specific)
|
||||
- Internal document IDs format (if any)
|
||||
|
||||
## Use Cases
|
||||
|
||||
### Feature Parity Testing
|
||||
Run both implementations with the same configuration to verify identical behavior:
|
||||
```bash
|
||||
# Run both implementations
|
||||
./test-both-implementations.sh
|
||||
|
||||
# Compare database contents
|
||||
./compare-database-results.sh
|
||||
```
|
||||
|
||||
### Performance Comparison
|
||||
Use identical configurations to benchmark performance differences between Rust and Go implementations.
|
||||
|
||||
### Development Testing
|
||||
Use separate configurations during development to avoid database conflicts when testing both implementations simultaneously.
|
||||
Loading…
Add table
Add a link
Reference in a new issue