Une des nouveautés de Visual Studio 2010 est de pouvoir simuler des conditions réseaux lors des tests Web. Cette fonctionnalité n’est disponible qu’avec la version Ultimate de Visual Studio. Concrêtement, on peut créer un mix de connexions type, au même titre qu’on peut créer un mix de navigateurs :

Installing Driver

Mais parfois, on veut pouvoir tester le comportement d’une application (WPF ou Windows Form, peut importe) sur une ligne avec un bas débit et/ou une forte latence. On peut toujours créer un test bidon de longue durée et tester l’application pendant que le test tourne. Mais on peut aussi profiter que l’API utilisée par Visual Studio pour simuler le comportement soit disponible en version managée. Ainsi, on peut se créer un petit outil permettant de simuler à volonté des conditions réseaux pendant que l’on teste l’application.

La première étape consiste à préparer les fichiers profils. Ces fichiers respectent la structure suivante :

   1: <Emulation>
   2:   <VirtualChannel name="ICWAN-Channel3">
   3:     <FilterList />
   4:     <VirtualLink instances="1" name="link1">
   5:       <LinkRule dir="upstream">
   6:         <Bandwidth>
   7:           <Speed unit="kbps">300</Speed>
   8:           <QueueManagement>
   9:             <NormalQueue>
  10:               <Size>100</Size>
  11:               <QueueMode>packet</QueueMode>
  12:               <DropType>DropTail</DropType>
  13:             </NormalQueue>
  14:           </QueueManagement>
  15:         </Bandwidth>
  16:         <Latency>
  17:           <Fixed>
  18:             <Time unit="msec">250</Time>
  19:           </Fixed>
  20:         </Latency>
  21:       </LinkRule>
  22:       <LinkRule dir="downstream">
  23:         <Bandwidth>
  24:           <Speed unit="kbps">300</Speed>
  25:           <QueueManagement>
  26:             <NormalQueue>
  27:               <Size>100</Size>
  28:               <QueueMode>packet</QueueMode>
  29:               <DropType>DropTail</DropType>
  30:             </NormalQueue>
  31:           </QueueManagement>
  32:         </Bandwidth>
  33:         <Latency>
  34:           <Fixed>
  35:             <Time unit="msec">250</Time>
  36:           </Fixed>
  37:         </Latency>
  38:       </LinkRule>
  39:     </VirtualLink>
  40:   </VirtualChannel>
  41: </Emulation>

Comme on peut le voir, on peut aussi bien paramétrer le débit montant que le débit descendant, ainsi que la latence de la connexion. Quand au paramètre DropType, il permet de spécifier le comportement de la gestion de la queue des messages si cette dernière est saturée :

  • DropTail : supprime le paquet en fin de queue.
  • DropHead : supprime le paquet en début de queue.
  • DropRandom : supprime un paquet au hasard dans la queue.

Il est donc possible de se créer des profils de test sur mesure.

Ensuite, il faut lancer une application initialisant l’API avec le profil désiré et lancer la simulation. Plutôt que de partir de 0, vous pouver utiliser la version dont les sources sont téléchargeables sur http://neganov.blogspot.com/2010/01/stand-alone-network-emulator-for-vs2010.html. La seule précaution à avoir, c’est de bien s’assurer que le projet référence la version des dlls spécifiques à la plateforme ciblée (x86 ou x64). Et pour une cible x64, il faut s’assurer que la cible de compilation du projet est “Mixed Platform”.

Il n’y a plus qu’à lancer l’utilitaire, choisir son profil et cliquer sur le bouton “Start” :

image

Si vous obtenez l’erreur suivante au lancement de l’application :

image

C’est qu’il vous faut installer le module de simulation réseau :

   1: vstestconfig NETWORKEMULATION /install