Aller au contenu principal

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.