サンプル・テスト・ケースの実行

サンプルの Web アプリケーションまたはコマンド・ラインを使用して、デプロイ済みの SOA Policy Gateway Basic Runtime Sample でサンプル・アプリケーションをテストすることができます。 サンプル・アプリケーションでは 6 種類のコマンド・ライン・テストを実行できます。

Basic Sample Runtime をデプロイするには、Basic Runtime Sample パターンのデプロイを参照してください。

サンプルの Web アプリケーションのテスト・ケースの実行

Web アプリケーションのテスト・ケースを実行する手順は、以下のとおりです。
  1. デプロイ済み WSRR 環境のホスト名を、デプロイ済みの仮想システム・インスタンスを開いて確認します。 ホスト名を検索するには、「仮想マシン」セクションを展開し、WSRR スタンドアロン・サーバーの仮想マシンを選択して、仮想マシンの詳細を確認します。 「ハードウェアおよびネットワーク」セクションで、ホスト名は「ネットワーク・インターフェース 0」の値です。
  2. Web ブラウザーで URL「http://<wssrHostName>:9080/SoaPolicyTester」を開きます。
  3. 使用可能なオプションは次のとおりです。
    • 標準要求 (Standard Request) - Store サービスに findInventory 要求を送信します。 コンテキスト ID は Silver です。 コンシューマー ID は CEO です。正常な結果が得られると、テキスト「Part: SKU10 Price: 401.73」が表示されます。
    • ルーティング・ポリシー・テスト (Routing Policy Test) - 標準要求と同様ですが、コンテキスト ID に Gold を使用します。要求は、サービスを実行する代替エンドポイントに経路指定されます。正常な結果が得られると、「Part: GOLDSKU10 Price: 401.73」が返されます。
    • 妥当性検査ポリシー・テスト (Validation Policy Test) - 無効なペイロードを指定した要求を送信します。妥当性検査ポリシーには、要求の妥当性検査を行い、無効なメッセージを拒否するため、DataPower® が必要です。正常な結果が得られると、DataPower からの応答メッセージ「Internal Error (from client)」が返されます。
    • REST Gold - コンシューマー ID CEO およびコンテキスト ID Gold を使用して、SKU RESTful サービスに要求を送信します。Gold 要求は 90 秒に 5 件のメッセージのみを許可するポリシーに従います。要求が成功すると、結果「Part: SKU33 Price: 136.43」が表示されます。
    • REST Silver - Rest GOLD と同様ですが、コンテキスト ID に Silver を使用します。 Silver 要求では、90 秒間に 3 件の別個の要求が許可されます。 要求が成功すると、結果「Part: SKU33 Price: 136.43」が表示されます。
    • 「ユーザー ID」- ユーザー ID オプションには 2 つの値「フル・コンテンツ (Full Content)」と「編集済みコンテンツ (Redacted Content)」のいずれかを指定できます。 それぞれのオプションにより、別のユーザーからの要求が発生します。 サンプルでは XACML ポリシーが利用されます。このポリシーは価格の参照をマネージャーのみに許可します。「フル・コンテンツ (Full Content)」が選択されなかった場合、応答メッセージの価格の値は編集されます。「編集済みコンテンツ (Redacted Content)」が選択された場合、要求が成功するとその結果には「Price: 0.0」が含められます。RESTful サービスは編集をサポートしません。どのユーザーが選択されたかは影響を与えません。
  4. WSRR コンソールを開いて、サービスおよびポリシーを検討します。 詳しくは、WSRR への接続 - Business Spaceを参照してください。

サンプルはコマンド・ラインを使用して実行することもできます。これは、匿名 SLA を使用するトラフィックを送信する唯一の方法です。

コマンド・ラインを使用した、編集シナリオによる XACML Permit/Deny のデモンストレーション

以下の要求 XML を 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>
要求 XML の例が silver.xml という名前のファイル内にあると想定して、 次の curl コマンドを入力します。
curl -k --data-bin @./silver.xml -H "Content-Type: text/xml" 
-u ConsumerX:passw0rd http://<yourDataPowerHostName>:62005/Store/Store
この例では、ConsumerX はマネージャーなので、応答には次のような完全な価格情報が表示されます。
<?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>

コマンド・ラインを使用した編集シナリオの実行

ConsumerA はマネージャーではないので、 別の応答が表示されます。 curl コマンドを入力します。
curl -k --data-bin @./silver.xml -H "Content-Type: text/xml" 
-u ConsumerA:passw0rd http://<yourDataPowerHostName>:62005/Store/Store
応答では価格が編集されていることに注目してください。価格は 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>

コマンド・ラインを使用したルーティング・ポリシーのテスト

Gold SLA に添付されたルーティング・ポリシーを実施するには、コンテキスト ID とコンシューマー ID が一致している必要があります。このケースでは、Gold カスタマーの SLA のコンテキスト ID は Gold であり、コンシュームするサービス・バージョンのコンシューマー ID は CEO です。サンプル要求の内容を以下に示します (要件どおりコンテキスト ID とコンシューマー ID が一致していることが確認できます)。

<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>
要求 XML の例が gold.xml という名前のファイル内にあると想定して、 次の curl コマンドを入力します。
curl -k --data-bin @./gold.xml -H "Content-Type: text/xml" 
-u ConsumerX:passw0rd http://<yourDataPowerHostName>:62005/Store/Store
応答は次のようになります。
<?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>
戻り応答の SKU 値は GOLDSKU で、ゴールド・エンドポイントの使用を示していることに注目してください。

コマンド・ラインを使用したスキーマの妥当性検査のテスト

妥当性検査ポリシーは、要求のスキーマを、 Store.wsdl およびそれに関連付けられた Company.xsd に照らして検査します。
次の XML、badvalid.xml は、本体に含まれるエレメントが <sku> という名前であるべきところが <skubad> という名前なので、無効となる要求を示しています。
<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>

次の curl 要求を入力する場合:
curl -k --data-bin @./badvalid.xml -H "Content-Type: text/xml" 
-u ConsumerX:passw0rd
http://<yourDataPowerHostName>:62005/Store/Store
次のエラーが表示されます。
<?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>

コマンド・ラインを使用したメディエーション・ポリシーでの拒否のテスト

サンプルに含まれるメディエーション・ポリシーの 1 つは、 メッセージ・カウントが 90 秒間に 5 回実行された後に、拒否の検査を行います。 次のコマンドを 6 回実行してください。
curl -k --data-bin @./silver.xml -H "Content-Type: text/xml" -u ConsumerX:passw0rd
http://<yourDataPowerHostName>:62005/Store/Store
サンプル要求は次のとおりです。
<?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>
このケースでは ConsumerX はマネージャーなので、最初の 5 回の実行では以下のように完全な価格情報が表示されます。
<?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>
6 回目の実行では、以下のエラーが発生します。
<?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>
注: 90 秒以内の間隔で別のテストを実行すると、すぐにこのエラーが表示される可能性があります。

コマンド・ラインを使用したメディエーション・ポリシーでの通知のテスト

匿名 SLA に通知ポリシーが添付されます。これは、SLA が実施されていないコンシューマーから要求が着信した場合に実施されます。このサンプルでは、SLA が実施されている唯一のコンシューマーは CEO なので、他のいずれかの値が設定されたコンシューマー ID を含む要求では匿名 SLA にポリシーが実施されます。このケースでは ConsumerX はマネージャーなので、完全な価格情報が表示されます。

コマンド・ラインを使用してこの機能をテストするには、以下の XML を内容とする anon.xml というファイルを作成します。
<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">ABC</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>
次に、以下のコマンドを入力します。
curl -k --data-bin @./anon.xml -H "Content-Type: text/xml" 
-u ConsumerX:passw0rd http://<yourDataPowerHostName>:62005/Store/Store
以下のメッセージが、ドメインのデフォルト・ログに出力されます。
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'
注: このメッセージを表示するには、ロギングが「通知 (notice)」に設定されている必要があります。 そうでない場合は、DataPower Web コンソールの「トラブルシューティング (Troubleshooting)」アイコンをクリックしてください。 「ロギング」セクションで、「ログ・レベル (Log level)」の値を「通知 (notice)」に変更して、「ログ・レベルの設定 (Set Log Level)」をクリックします。 ログを見つけるには、「制御パネル (Control Panel)」に戻って「ログの表示 (View Logs)」アイコンをクリックします。

コマンド・ラインを使用した RESTful サービスのテスト

RESTful インターフェースには、コマンド・ラインから curl を使用してアクセスすることもできます。Web クライアントの場合と同様に、コンテキスト ID Gold では 90 秒ごとに 5 件のメッセージが、Silver では 2 件のメッセージのみが許可されます。

コマンド・ラインを使用してこの機能をテストするには、以下の XML を内容とする restRequest.xml というファイルを作成します。

<?xml version="1.0" encoding="UTF-8"?>
<a:WarehouseSKUPost xmlns:a="http://company.ibm.com/">
   <postRequest>
      <sku>SKU33</sku>
      <purchaseCost>136.43</purchaseCost>
      <inventory>429</inventory>
      <msrp>272.86</msrp>
      <returns>0</returns>
   </postRequest>
</a:WarehouseSKUPost>

次に、コンテキスト ID Gold を使用してテストするため、以下のコマンドを入力します。

curl -k --data-bin @./restRequest.xml -H "Content-Type: text/xml" -H "consumerID:CEO" -H "contextID:Gold"  http://<yourDataPowerHostName>:62006/WarehouseSKU

コンテキスト ID Silver を使用してテストするには同じコマンドを使用しますが、Gold を Silver に置き換えます。

正常な応答を以下に示します。

<?xml version="1.0" encoding="UTF-8"?>
<a:WarehouseSKUGet xmlns:a="http://company.ibm.com/">
<getRequest>
<sku>SKU33</sku>
<purchaseCost>136.43</purchaseCost>
<inventory>429</inventory>
<msrp>272.86</msrp>
<returns>0</returns>
<supplierID>ABB</supplierID>
<purchaseID/>
</getRequest>
</a:WarehouseSKUGet>
しきい値を超えると、以下のメッセージを受け取ります。
<?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>

RESTful サービスに対して匿名 SLA を実行するには (これは単に通知ポリシーを添付するだけですが)、登録されていないいずれかのコンテキスト ID とコンシューマー ID を使用します。Web サービス・サンプルで先に記載したように、DataPower ログに通知が現れます。


概念 概念

フィードバック


タイム・スタンプ・アイコン 最終更新: 2014 年 3 月 6 日


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