Appendix F. Test Suite (Suite de tests)
Appendix F. Test Suite (Suite de tests)
Cette annexe fournit une suite de tests complète pour valider les implémentations SPF. Les tests couvrent divers scénarios pour s'assurer que les vérificateurs SPF fonctionnent correctement.
F.1 Basic Tests (Tests de base)
F.1.1 Tests IP4 simples
Test 1: Correspondance IP4 directe
Enregistrement SPF: v=spf1 ip4:192.0.2.1 -all
IP de test: 192.0.2.1
Résultat attendu: pass
Test 2: Correspondance CIDR IP4
Enregistrement SPF: v=spf1 ip4:192.0.2.0/24 -all
IP de test: 192.0.2.128
Résultat attendu: pass
Test 3: Non-correspondance IP4
Enregistrement SPF: v=spf1 ip4:192.0.2.0/24 -all
IP de test: 192.0.3.1
Résultat attendu: fail
F.1.2 Tests IP6 simples
Test 4: Correspondance IP6 directe
Enregistrement SPF: v=spf1 ip6:2001:db8::1 -all
IP de test: 2001:db8::1
Résultat attendu: pass
Test 5: Correspondance CIDR IP6
Enregistrement SPF: v=spf1 ip6:2001:db8::/32 -all
IP de test: 2001:db8::dead:beef
Résultat attendu: pass
Test 6: Non-correspondance IP6
Enregistrement SPF: v=spf1 ip6:2001:db8::/32 -all
IP de test: 2001:db9::1
Résultat attendu: fail
F.2 Mechanism Tests (Tests de mécanismes)
F.2.1 Tests du mécanisme A
Test 7: Mécanisme A - correspondance
Domaine: example.com
Enregistrement SPF: v=spf1 a -all
Enregistrement DNS A pour example.com: 192.0.2.1
IP de test: 192.0.2.1
Résultat attendu: pass
Test 8: Mécanisme A avec CIDR
Domaine: example.com
Enregistrement SPF: v=spf1 a/24 -all
Enregistrement DNS A pour example.com: 192.0.2.1
IP de test: 192.0.2.200
Résultat attendu: pass
Test 9: Mécanisme A avec spécification de domaine
Domaine: sender.example.com
Enregistrement SPF: v=spf1 a:mail.example.com -all
Enregistrement DNS A pour mail.example.com: 192.0.2.10
IP de test: 192.0.2.10
Résultat attendu: pass
F.2.2 Tests du mécanisme MX
Test 10: Mécanisme MX - correspondance
Domaine: example.com
Enregistrement SPF: v=spf1 mx -all
Enregistrement DNS MX pour example.com: 10 mail.example.com
Enregistrement DNS A pour mail.example.com: 192.0.2.1
IP de test: 192.0.2.1
Résultat attendu: pass
Test 11: Mécanisme MX avec plusieurs enregistrements MX
Domaine: example.com
Enregistrement SPF: v=spf1 mx -all
Enregistrements DNS MX:
10 mail1.example.com → 192.0.2.1
20 mail2.example.com → 192.0.2.2
IP de test: 192.0.2.2
Résultat attendu: pass
Test 12: Mécanisme MX avec CIDR
Domaine: example.com
Enregistrement SPF: v=spf1 mx/24 -all
Enregistrement DNS MX: 10 mail.example.com
Enregistrement DNS A pour mail.example.com: 192.0.2.1
IP de test: 192.0.2.200
Résultat attendu: pass
F.2.3 Tests du mécanisme PTR (NE PAS UTILISER)
Test 13: Mécanisme PTR - correspondance
Domaine: example.com
Enregistrement SPF: v=spf1 ptr -all
IP de test: 192.0.2.1
Enregistrement PTR pour 192.0.2.1: mail.example.com
Enregistrement A pour mail.example.com: 192.0.2.1
Résultat attendu: pass
Note: Le mécanisme PTR est obsolète et ne devrait pas être utilisé.
F.2.4 Tests du mécanisme EXISTS
Test 14: Mécanisme EXISTS - trouvé
Domaine: example.com
Enregistrement SPF: v=spf1 exists:%\{i}.whitelist.example.com -all
IP de test: 192.0.2.1
Requête DNS A pour 192.0.2.1.whitelist.example.com: 127.0.0.2
Résultat attendu: pass
Test 15: Mécanisme EXISTS - non trouvé
Domaine: example.com
Enregistrement SPF: v=spf1 exists:%\{i}.whitelist.example.com -all
IP de test: 192.0.2.99
Requête DNS A pour 192.0.2.99.whitelist.example.com: NXDOMAIN
Résultat attendu: fail
F.2.5 Tests du mécanisme INCLUDE
Test 16: INCLUDE - propagation simple de pass
Domaine: example.com
Enregistrement SPF: v=spf1 include:trusted.example.com -all
Enregistrement SPF pour trusted.example.com: v=spf1 ip4:192.0.2.1 -all
IP de test: 192.0.2.1
Résultat attendu: pass
Test 17: INCLUDE - fail n'est pas propagé
Domaine: example.com
Enregistrement SPF: v=spf1 include:trusted.example.com -all
Enregistrement SPF pour trusted.example.com: v=spf1 ip4:192.0.2.1 -all
IP de test: 192.0.2.99
Résultat attendu: fail (pas de include, mais de -all)
Test 18: INCLUDE - propagation de TempError
Domaine: example.com
Enregistrement SPF: v=spf1 include:trusted.example.com -all
Requête DNS pour trusted.example.com: serveur DNS indisponible
Résultat attendu: temperror
Test 19: INCLUDE - propagation de PermError
Domaine: example.com
Enregistrement SPF: v=spf1 include:trusted.example.com -all
Enregistrement SPF pour trusted.example.com: v=spf1 ip4:192.0.2.1 ip4:192.0.2.1 -all (invalide)
Résultat attendu: permerror
F.2.6 Tests du mécanisme ALL
Test 20: ALL avec différents qualificatifs
+all: pass
-all: fail
~all: softfail
?all: neutral
F.3 Qualifier Tests (Tests de qualificatifs)
Test 21: Qualificatif plus (+)
Enregistrement SPF: v=spf1 +ip4:192.0.2.1 -all
IP de test: 192.0.2.1
Résultat attendu: pass
Test 22: Qualificatif moins (-)
Enregistrement SPF: v=spf1 -ip4:192.0.2.1 ~all
IP de test: 192.0.2.1
Résultat attendu: fail
Test 23: Qualificatif tilde (~)
Enregistrement SPF: v=spf1 ~ip4:192.0.2.1 -all
IP de test: 192.0.2.1
Résultat attendu: softfail
Test 24: Qualificatif point d'interrogation (?)
Enregistrement SPF: v=spf1 ?ip4:192.0.2.1 -all
IP de test: 192.0.2.1
Résultat attendu: neutral
F.4 Modifier Tests (Tests de modificateurs)
F.4.1 Tests du modificateur REDIRECT
Test 25: REDIRECT - redirection de base
Domaine: example.com
Enregistrement SPF: v=spf1 redirect=_spf.example.com
Enregistrement SPF pour _spf.example.com: v=spf1 ip4:192.0.2.1 -all
IP de test: 192.0.2.1
Résultat attendu: pass
Test 26: REDIRECT - ignoré après mécanisme
Domaine: example.com
Enregistrement SPF: v=spf1 ip4:192.0.2.1 redirect=_spf.example.com
IP de test: 192.0.2.1
Résultat attendu: pass (mécanisme correspond, redirect ignoré)
Test 27: REDIRECT - pas de correspondance
Domaine: example.com
Enregistrement SPF: v=spf1 redirect=_spf.example.com
Enregistrement SPF pour _spf.example.com: v=spf1 ip4:192.0.2.1 -all
IP de test: 192.0.2.99
Résultat attendu: fail
F.4.2 Tests du modificateur EXP
Test 28: EXP - récupération de chaîne d'explication
Domaine: example.com
Enregistrement SPF: v=spf1 ip4:192.0.2.1 -all exp=explain.example.com
Enregistrement DNS TXT pour explain.example.com: "Mail from %\{i} not allowed"
IP de test: 192.0.2.99
Résultat attendu: fail
Explication attendue: "Mail from 192.0.2.99 not allowed"
F.5 Macro Tests (Tests de macros)
F.5.1 Expansion de macro de base
Test 29: %\{s} - expéditeur
Domaine: example.com
MAIL FROM: [email protected]
Enregistrement SPF: v=spf1 exists:%\{s}.whitelist.example.com -all
Étendu à: exists:[email protected]
Test 30: %\{l} - partie locale
Domaine: example.com
MAIL FROM: [email protected]
Enregistrement SPF: v=spf1 exists:%\{l}.whitelist.example.com -all
Étendu à: exists:sender.whitelist.example.com
Test 31: %\{o} - domaine
Domaine: example.com
MAIL FROM: [email protected]
Enregistrement SPF: v=spf1 exists:%\{o}.whitelist.example.com -all
Étendu à: exists:example.com.whitelist.example.com
Test 32: %\{d} - domaine actuel
Domaine: mail.example.com
Enregistrement SPF: v=spf1 exists:%\{d}.whitelist.example.com -all
Étendu à: exists:mail.example.com.whitelist.example.com
Test 33: %\{i} - adresse IP
IP de test: 192.0.2.1
Enregistrement SPF: v=spf1 exists:%\{i}.whitelist.example.com -all
Étendu à: exists:192.0.2.1.whitelist.example.com
Test 34: %\{i} - adresse IPv6
IP de test: 2001:db8::1
Enregistrement SPF: v=spf1 exists:%\{i}.whitelist.example.com -all
Étendu à: exists:2001.0db8.0000.0000.0000.0000.0000.0001.whitelist.example.com
F.5.2 Transformateurs de macros
Test 35: Transformateur d'inversion (r)
Domaine: mail.example.com
Macro: %\{d}
Normal: mail.example.com
Avec r: %\{dr}
Étendu à: com.example.mail
Test 36: Délimiteur et inversion
MAIL FROM: [email protected]
Macro: %\{or}
Étendu à: com.example.mail
Test 37: Spécification de chiffres
Domaine: mail.example.com
Macro: %\{d2}
Étendu à: example.com (2 derniers composants)
Test 38: Chiffres avec inversion
Domaine: mail.example.com
Macro: %\{d2r}
Étendu à: com.example
F.5.3 Encodage URL dans les macros
Test 39: Caractères d'échappement URL
MAIL FROM: "test user"@example.com
Macro: %\{l}
Étendu à: test%20user
F.6 DNS Lookup Limit Tests (Tests de limite de requêtes DNS)
Test 40: Limite de requêtes DNS - exactement 10
Enregistrement SPF: v=spf1 mx a include:d1.example.com include:d2.example.com ...
(total de 10 mécanismes nécessitant des requêtes DNS)
Résultat attendu: traité avec succès
Test 41: Limite de requêtes DNS - 11 dépassé
Enregistrement SPF: v=spf1 mx a include:d1.example.com ... (11 requêtes)
Résultat attendu: permerror
Test 42: Comptage des requêtes d'inclusion imbriquée
Domaine: example.com
SPF: v=spf1 include:a.example.com -all (1 requête)
a.example.com: v=spf1 include:b.example.com -all (1 requête)
b.example.com: v=spf1 mx a -all (2 requêtes)
Total des requêtes: 4
Résultat attendu: pass (si l'IP correspond)
F.7 Void Lookup Tests (Tests de requêtes vides)
Test 43: Mécanisme A - pas d'enregistrements A
Domaine: example.com
Enregistrement SPF: v=spf1 a -all
Enregistrement DNS A pour example.com: (aucun)
IP de test: 192.0.2.1
Résultat attendu: fail (mécanisme ne correspond pas)
Requêtes vides: 1
Test 44: Mécanisme MX - pas d'enregistrements MX
Domaine: example.com
Enregistrement SPF: v=spf1 mx -all
Enregistrement DNS MX pour example.com: (aucun)
IP de test: 192.0.2.1
Résultat attendu: fail
Requêtes vides: 1
Test 45: Limite de requêtes vides - dépassée
Enregistrement SPF avec 3 mécanismes renvoyant chacun des requêtes vides
Résultat attendu: permerror (si la limite est 2)
F.8 Syntax Error Tests (Tests d'erreurs de syntaxe)
Test 46: Version SPF manquante
Enregistrement SPF: ip4:192.0.2.1 -all
Résultat attendu: none (pas d'enregistrement SPF valide)
Test 47: Adresse IP invalide
Enregistrement SPF: v=spf1 ip4:999.999.999.999 -all
Résultat attendu: permerror
Test 48: Plage CIDR invalide
Enregistrement SPF: v=spf1 ip4:192.0.2.0/99 -all
Résultat attendu: permerror
Test 49: Modificateurs dupliqués
Enregistrement SPF: v=spf1 redirect=a.example.com redirect=b.example.com
Résultat attendu: permerror
Test 50: Modificateur inconnu (devrait être ignoré)
Enregistrement SPF: v=spf1 ip4:192.0.2.1 unknown=value -all
IP de test: 192.0.2.1
Résultat attendu: pass (modificateur inconnu ignoré)
F.9 Integration Tests (Tests d'intégration)
Test 51: Scénario réaliste complexe
Domaine: company.com
Enregistrement SPF: v=spf1 mx include:_spf.google.com include:sendgrid.net -all
Configuration:
- Enregistrements MX: mail1.company.com (192.0.2.1), mail2.company.com (192.0.2.2)
- Le SPF de Google inclut plusieurs plages IP
- Le SPF de SendGrid inclut plusieurs plages IP
Cas de test:
1. IP 192.0.2.1: pass (correspondance mx)
2. IP de la plage Google: pass (correspondance include)
3. IP de la plage SendGrid: pass (correspondance include)
4. IP aléatoire: fail (-all)
Test 52: Traitement des sous-domaines
Domaine: mail.company.com
Enregistrement SPF pour company.com: v=spf1 -all
Enregistrement SPF pour mail.company.com: v=spf1 ip4:192.0.2.1 -all
IP de test: 192.0.2.1
Résultat attendu: pass (le sous-domaine a son propre enregistrement SPF)
Test 53: Pas d'enregistrement SPF
Domaine: example.com
Enregistrement SPF: (aucun)
IP de test: 192.0.2.1
Résultat attendu: none
F.10 Edge Cases (Cas limites)
Test 54: Partie locale vide
MAIL FROM: <>
HELO: mail.example.com
Enregistrement SPF pour mail.example.com: v=spf1 ip4:192.0.2.1 -all
IP de test: 192.0.2.1
Résultat attendu: pass (identité HELO utilisée)
Test 55: Adresse IPv6 mappée IPv4
Enregistrement SPF: v=spf1 ip4:192.0.2.1 -all
IP de test: ::ffff:192.0.2.1 (IPv6 mappé IPv4)
Résultat attendu: pass (devrait être traité comme IPv4)
Test 56: CIDR /32 pour IPv4
Enregistrement SPF: v=spf1 ip4:192.0.2.1/32 -all
IP de test: 192.0.2.1
Résultat attendu: pass
Test 57: CIDR /128 pour IPv6
Enregistrement SPF: v=spf1 ip6:2001:db8::1/128 -all
IP de test: 2001:db8::1
Résultat attendu: pass
Test 58: Plusieurs enregistrements SPF (invalide)
Domaine: example.com
Enregistrements SPF:
v=spf1 ip4:192.0.2.1 -all
v=spf1 ip4:192.0.2.2 -all
Résultat attendu: permerror (plusieurs enregistrements SPF non autorisés)
F.11 Performance Tests (Tests de performances)
Test 59: Profondeur maximale de requête DNS
Includes imbriqués jusqu'à une profondeur de 10
Vérifier que tous sont traités correctement
Test 60: Grandes plages CIDR
Enregistrement SPF: v=spf1 ip4:192.0.0.0/8 -all
IP de test: 192.255.255.255
Résultat attendu: pass
F.12 Test Result Summary Format (Format de résumé des résultats de test)
Pour chaque exécution de test, les informations suivantes doivent être enregistrées:
ID de test: F.1.1-Test1
Description: Correspondance IP4 directe
Enregistrement SPF: v=spf1 ip4:192.0.2.1 -all
IP de test: 192.0.2.1
Résultat attendu: pass
Résultat réel: pass
Statut: RÉUSSI
Requêtes DNS: 1
Requêtes vides: 0
Temps de traitement: 45ms
Une implémentation SPF complète devrait réussir tous les tests de cette suite pour être considérée comme conforme à la RFC 7208.