Exécution de l'exemple de scénario de test

Vous pouvez utiliser un exemple d'application Web ou la ligne de commande pour tester le modèle d'application sur le modèle Exemple SOA Policy Gateway Basic Runtime déployé. Il existe six variations de test qui peuvent être exécutées sur le modèle d'application via la ligne de commande.

Pour déployer le modèle Basic Sample Runtime, voir Déploiement du modèle Exemple SOA Policy Gateway Basic Runtime.
Remarque : La valeur de SamplePolicySample_starting_port utilisée dans les exemples XML suivants est issue des journaux associés au modèle Exemple SOA Policy Gateway Basic Runtime.

Scénario de test de l'exemple d'application Web

Pour exécuter ce scénario de test d'application Web, procédez comme suit :
  1. Recherchez le nom d'hôte de l'environnement WSRR déployé en ouvrant l'instance de système virtuel déployée. Pour cela, développez la section Virtual machines (Machines virtuelles) et sélectionnez la machine virtuelle du serveur WSRR autonome pour afficher les détails de la machine virtuelle. Dans la section Matériel et réseau, le nom d'hôte correspond à la valeur Interface réseau 0.
  2. Ouvrez l'adresse URL dans un navigateur Web : http://<nom_hôte_wssr>:9080/SoaPolicyTester
  3. L'écran de test du modèle d'application implémenté dans DataPower s'affiche.
  4. Les options sont les suivantes :
    • Send Standard - Envoie une requête findInventory au service du magasin. L'ID de contexte est un utilisateur Silver. Un résultat correct est Part: SKU10 Price: 461.73.
    • Send Routed - Envoie une requête findInventory au service du magasin. L'ID de contexte est un utilisateur Gold, en conséquence la requête est acheminée vers une implémentation du service. Un résultat correct est Part: GOLDSKU10 Price: 461.73.
    • Send Invalid - Envoie d'une requête avec un contenu non valide. Les règles de validation nécessitent DataPower pour valider une requête et un résultat correct doit être un message de réponse provenant de DataPower "Internal Error (from client)".
    • User ID = ConsumerA - Pour des appels avec un ID utilisateur ConsumerA, la règle XACML est appliquée de telle sorte que seuls les Managers (gestionnaires) peuvent voir le prix. La valeur du prix dans le message de réponse doit être rédigée. Un résultat correct contient Price: 0.0.
    • Many Standard Requests - Si plus de 5 requêtes sont effectuées dans les 90 secondes, la règle de refus s'applique alors. Une réponse correcte montrant que règle a été appliquée est : Rejected: "Rejected (from client)".
  5. Ouvrez la console WSRR et explorez le service et les règles. Pour plus d'informations, voir Connexion à WSRR - Business Space.
Pour exécuter les scénarios de test du modèle d'application à l'aide de la ligne de commande :

Démonstration de XACML Permit/Deny avec le scénario Redaction à l'aide de la ligne de commande

La requête XML suivante peut être envoyée au service DataPower StoreAddLTPA :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:stor="http://company.ibm.com/store">
  <soapenv:Header>
    <store:ConsumerIdentifier xmlns:store="http://store.com">CEO
    </store:ConsumerIdentifier>
    <store:ContextIdentifier xmlns:store="http://store.com">silver
    </store:ContextIdentifier>
  </soapenv:Header>
  <soapenv:Body>
  <stor:findInventory>
    <findInventoryReq>
      <sku>SKU10</sku>
    </findInventoryReq>
  </stor:findInventory>
  </soapenv:Body>
</soapenv:Envelope>
En supposant que l'exemple de requête XML ci-dessus est contenu dans un fichier nommé silver.xml, exécutez la commande curl suivante :
curl -k --data-bin @./silver.xml -H "Content-Type: text/xml" 
-u ConsumerX:passw0rd http://<votre_nom_hôte_DataPower>.com:<SamplePolicySample_starting_port+4>/Store/Store
Dans cet exemple, ConsumerX est un Manager et donc nous devons voir les informations complètes sur les prix comme réponse :
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<KD4NS:KD4SoapHeaderV2
xmlns:KD4NS="http://www.ibm.com/KD4Soap">AFIAAgAkZmExODgzNTQtY2Q1ZC0z
YjU0LWEyMzItZGM3MmEzNWY0MTAzACRmYWVjYjA1Mi1jMWUxLTMyODEtOWY3Ni0wY2IxN
mRhMDc4MjkAAw==</KD4NS:KD4SoapHeaderV2>
</soapenv:Header>
<soapenv:Body>
  <b:findInventoryResponse xmlns:a="http://company.ibm.com/" 
     xmlns:b="http://company.ibm.com/store">
  <findInventoryRes>
<sku>SKU10</sku>
<price>461.73</price>
<inventory>460</inventory>
<msrp>923.46</msrp>
<supplierID>IBM</supplierID>
</findInventoryRes>
</b:findInventoryResponse>
</soapenv:Body></soapenv:Envelope>

Exécution du scénario Redaction à l'aide de la ligne de commande

ConsumerA n'est pas un Manager, nous devons donc voir une réponse différente. Exécutez la commande curl :
curl -k --data-bin @./silver.xml -H "Content-Type: text/xml" 
-u ConsumerA:passw0rd http://<votre_nom_hôte_DataPower>.com:<SamplePolicySample_starting_port+4>/Store/Store
Notez que la réponse a un prix réécrit qui est 0.0 :
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header><KD4NS:KD4SoapHeaderV2
xmlns:KD4NS="http://www.ibm.com/KD4Soap">AFIAAgAkZmExODgzNTQtY2Q1ZC0zYjU0L
WEyMzItZGM3MmEzNWY0MTAzACRmYWVjYjA1Mi1jMWUxLTMyODEtOWY3Ni0wY2IxNm
RhMDc4MjkAAw==</KD4NS:KD4SoapHeaderV2>
</soapenv:Header>
<soapenv:Body>
<b:findInventoryResponse xmlns:a="http://company.ibm.com/"
xmlns:b="http://company.ibm.com/store">
<findInventoryRes>
<sku>SKU10</sku>
<price>0.0</price>
<inventory>460</inventory>
<msrp>923.46</msrp>
<supplierID>IBM</supplierID>
</findInventoryRes>
</b:findInventoryResponse>
</soapenv:Body></soapenv:Envelope>

Test de la stratégie de routage à l'aide de la ligne de commande

L'accord sur les niveaux de licence de l'ID de contexte permet de déclencher la règle de routage. Dans ce cas, l'accord sur les niveaux de licence (SLA) des clients Gold a la valeur Gold dans l'accord sur les niveaux de licence (SLA). Voici le contenu d'un exemple de requête avec Gold comme ID de contexte (contextIdentifier) :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:stor="http://company.ibm.com/store">
<soapenv:Header>
  <store:ConsumerIdentifier xmlns:store="http://store.com">CEO
  </store:ConsumerIdentifier>
  <store:ContextIdentifier xmlns:store="http://store.com">Gold
  </store:ContextIdentifier>
</soapenv:Header><soapenv:Body>
<stor:findInventory><findInventoryReq>
  <sku>SKU10</sku>
  </findInventoryReq>
</stor:findInventory>
</soapenv:Body></soapenv:Envelope>
En supposant que l'exemple de requête XML ci-dessus est contenu dans un fichier nommé gold.xml, exécutez la commande curl suivante :
curl -k --data-bin @./gold.xml -H "Content-Type: text/xml" 
-u ConsumerX:passw0rd http://<votre_nom_hôte_DataPower>.com:<SamplePolicySample_starting_port+4>/Store/Store
La réponse est la suivante :
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
  <KD4NS:KD4SoapHeaderV2
  xmlns:KD4NS="http://www.ibm.com/KD4Soap">AFIAAgAkZmExODgzNTQtY2Q1ZC0zYjU0L
  WEyMzItZGM3MmEzNWY0MTAzACRmYWVjYjA1Mi1jMWUxLTMyODEtOWY3Ni0wY2IxNm
  RhMDc4MjkAAw==</KD4NS:KD4SoapHeaderV2>
</soapenv:Header><soapenv:Body>
<b:findInventoryResponse xmlns:a="http://company.ibm.com/"
xmlns:b="http://company.ibm.com/store">
<findInventoryRes>
  <sku>GOLDSKU10</sku>
  <price>461.73</price>
  <inventory>460</inventory>
  <msrp>923.46</msrp>
  <supplierID>IBM</supplierID>
</findInventoryRes></b:findInventoryResponse>
</soapenv:Body>
</soapenv:Envelope>
Notez que la réponse en retour contient un GOLDSKU pour la valeur de SKU, indiquant que le noeud final Gold a été utilisé.

Test de la validation du schéma à l'aide de la ligne de commande

La règle de validation vérifie le schéma de la requête par rapport à Store.wsl et est associé à Company.xsd.
Le code XML suivant, badvalid.xml, présente une requête qui n'est pas valide car le corps contient un élément nommé <skubad> alors qu'il doit être <sku> :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:stor="http://company.ibm.com/store">
<soapenv:Header>
<store:ConsumerIdentifier xmlns:store="http://store.com">CEO</store:ConsumerIdentifier>
<store:ContextIdentifier xmlns:store="http://store.com">silver</store:ContextIdentifier>
</soapenv:Header>
<soapenv:Body>
<stor:findInventory>
<findInventoryReq>
<skubad>SKU10</skubad>
</findInventoryReq>
</stor:findInventory>
</soapenv:Body></soapenv:Envelope>

Si nous exécutons la requête curl suivante :
curl -k --data-bin @./badvalid.xml -H "Content-Type: text/xml" 
-u ConsumerX:passw0rd
http://<votre_nom_hôte_DataPower>.com:<SamplePolicySample_starting_port+4>/Store/Store
Ceci produit l'erreur suivante :
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<env:Fault><faultcode>env:Client</faultcode>
<faultstring>Internal Error (from client)</faultstring>
</env:Fault>
</env:Body>
</env:Envelope>

Test du refus dans la règle de médiation à l'aide de la ligne de commande

L'une des règles de médiation incluses dans l'exemple teste le refus après que le nombre de messages ait atteint 5 dans l'espace de 90 secondes. Exécutez la commande suivante 6 fois :
curl -k --data-bin @./silver.xml -H "Content-Type: text/xml" -u ConsumerX:passw0rd
http://<votre_nom_hôte_DataPower>.com:<SamplePolicySample_starting_port+4>/Store/Store
L'exemple de requête est comme suit :
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<KD4NS:KD4SoapHeaderV2
xmlns:KD4NS="http://www.ibm.com/KD4Soap">AFIAAgAkZmExODgzNTQtY2Q1ZC0z
YjU0LWEyMzItZGM3MmEzNWY0MTAzACRmYWVjYjA1Mi1jMWUxLTMyODEtOWY3Ni0wY2IxN
mRhMDc4MjkAAw==</KD4NS:KD4SoapHeaderV2>
</soapenv:Header>
<soapenv:Body>
<b:findInventoryResponse xmlns:a="http://company.ibm.com/"
xmlns:b="http://company.ibm.com/store">
<findInventoryRes>
Dans ce cas, ConsumerX est un Manager (gestionnaire). En conséquence, les informations complètes sur les prix doivent être affichées comme suit pour les cinq premières exécutions :
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<KD4NS:KD4SoapHeaderV2
xmlns:KD4NS="http://www.ibm.com/KD4Soap">AFIAAgAkZmExODgzNTQtY2Q1ZC0z
YjU0LWEyMzItZGM3MmEzNWY0MTAzACRmYWVjYjA1Mi1jMWUxLTMyODEtOWY3Ni0wY2IxN
mRhMDc4MjkAAw==</KD4NS:KD4SoapHeaderV2>
</soapenv:Header>
<soapenv:Body>
<b:findInventoryResponse xmlns:a="http://company.ibm.com/"
xmlns:b="http://company.ibm.com/store">
<findInventoryRes>
<sku>SKU10</sku>
<price>461.73</price>
<inventory>460</inventory>
<msrp>923.46</msrp>
<supplierID>IBM</supplierID>
</findInventoryRes></b:findInventoryResponse>
</soapenv:Body>
</soapenv:Envelope>
Pour la sixième exécution, vous devez voir l'erreur suivante :
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<env:Fault>
<faultcode>env:Client</faultcode>
<faultstring>Rejected (from client)</faultstring>
</env:Fault>
</env:Body>
</env:Envelope>
Remarque : Vous pourriez voir cette erreur plus tôt en exécutant d'autres tests dans l'intervalle de 90 secondes.

Test de notification dans la règle de médiation à l'aide de la ligne de commande

Dans le cas où l'ID de contexte n'est pas Gold, aucun accord sur les niveaux de licence (SLA) n'est mappé et donc l'accord sur les niveaux de licence anonyme est utilisé. La règle de médiation pour l'accord sur les niveaux de licence anonyme consiste à consigner ou notifier. Ceci implique l'activation du mode débogage Debug pour l'exemple de domaine. Exécutez la commande suivante :
curl -k --data-bin @./silver.xml -H "Content-Type: text/xml" -u ConsumerX:passw0rd
http://<votre_nom_hôte_DataPower>.com:<SamplePolicySample_starting_port+4>/Store/Store
Dans ce cas, ConsumerX est un Manager, nous devons donc voir les informations complètes sur les prix comme suit :
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<KD4NS:KD4SoapHeaderV2
xmlns:KD4NS="http://www.ibm.com/KD4Soap">AFIAAgAkZmExODgzNTQtY2Q1ZC0zYjU0L
WEyMzItZGM3MmEzNWY0MTAzACRmYWVjYjA1Mi1jMWUxLTMyODEtOWY3Ni0wY2IxNm
RhMDc4MjkAAw==</KD4NS:KD4SoapHeaderV2></soapenv:Header><soapenv:Body><b:fin
dInventoryResponse xmlns:a="http://company.ibm.com/"
xmlns:b="http://company.ibm.com/store">
<findInventoryRes>
<sku>SKU10</sku>
<price>461.73</price>
<inventory>460</inventory>
<msrp>923.46</msrp>
<supplierID>IBM</supplierID>
</findInventoryRes>
</b:findInventoryResponse>
</soapenv:Body>
</soapenv:Envelope>
Le message suivant est émis dans le journal par défaut du domaine :
Notify action triggered ('operation_38_2_sla1-1-filter_1-notify') from source policy ('LogEveryTime_287d0790-83d9-11e1-a255-9187e20cddb0_05aec6ec-3674-4165-85de-a0f7be48a938' 
Remarque : La consignation doit être définie à debug (débogage) pour pouvoir voir ce message. Si ce n'est pas le cas, cliquez sur l'icône Troubleshooting (traitement des incidents) de la console Web de DataPower. Dans la section Logging (Consignation), changez la valeur Log level pour debug, puis cliquez sur Set Log Level.

Pour trouver le journal, sélectionnez Fichiers et Administration des fichiers > Gestion des fichiers. Le journal se trouve dans le dossier logtemp et se nomme default-log. En raison de l'encapsulage du journal, vous devrez peut-être mettre le fichier journal dans une fenêtre de navigateur Web avant d'exécuter le test et actualiser la page dans le navigateur après l'exécution du test.


Concept Concept

Commentaires


Icône d'horodatage Dernière révision: 16 octobre 2012


http://publib.boulder.ibm.com/infocenter/prodconn/v1r0m0/topic/com.ibm.scenarios.soawdpwsrr.doc/topics/csoa2_sample_run.htm