Executando os Casos de Teste de Amostra

É possível usar o aplicativo da web de amostra ou a linha de comandos para testar o aplicativo Sample no SOA Policy Gateway Basic Runtime Sample implementado. Seis variações de teste de linha de comandos podem ser executadas no aplicativo de amostra.

Para implementar o Basic Sample Runtime, consulte Implementando o Padrão de Amostra de Tempo de Execução Básico.

Executando o caso de teste do aplicativo da web de amostra

Para executar o caso de teste do aplicativo da web:
  1. Localize o nome do host do ambiente implementado no WSRR abrindo a Instância do Sistema Virtual implementado. Para localizar o nome do host, expanda a seção Máquinas virtuais e selecione a máquina virtual para o Servidor Independente WSRR para ver os detalhes da máquina virtual. Na seção Hardware e Rede, o nome do host é o valor Interface de Rede 0.
  2. Abra a URL em um navegador da web: http://<wssrHostName>:9080/SoaPolicyTester
  3. As seguintes opções estão disponíveis:
    • Solicitação Padrão - Envia uma solicitação findInventory para o serviço Store. O ID de contexto é Silver. O ID do consumidor é CEO. Um resultado bem-sucedido exibe o texto Part: SKU10 Price: 401.73.
    • Teste da Política de Roteamento - Igual à Solicitação Padrão, mas com ID de Contexto de Gold. A solicitação é roteada para um terminal alternativo que está executando o serviço. Um resultado bem-sucedido retorna Part: GOLDSKU10 Price: 401.73.
    • Teste de Política de Validação - Envia uma solicitação com uma carga útil inválida. A política de validação requer que o DataPower valide a solicitação e rejeite as mensagens que são inválidas. Um resultado bem-sucedido é uma mensagem de resposta do DataPower "Erro Interno (do cliente)".
    • REST Gold - Envia solicitação ao serviço SKU RESTful com ID do Consumidor CEO e ID de Contexto Gold. As solicitações Gold estão sujeitas a uma política que permite apenas 5 mensagens em 90 segundos. Uma solicitação bem-sucedida exibe o resultado Part: SKU33 Price: 136.43.
    • REST Silver - Igual à Rest GOLD, mas com ID de Contexto Silver. As solicitações Silver são permitidas em 3 solicitações separadas em 90 segundos. Uma solicitação bem-sucedida exibe o resultado Part: SKU33 Price: 136.43.
    • ID do Usuário - A opção ID do Usuário tem dois valores possíveis; Conteúdo Integral ou Conteúdo da Edição de Dados. Cada opção resulta em solicitações que se originam de usuários diferentes. A amostra utiliza uma política XACML, que permite que apenas Gerentes vejam o preço. O valor do Preço na mensagem de resposta é editado, a menos que Conteúdo Integral esteja selecionado. Um resultado bem-sucedido para solicitações quando Conteúdo Editado estiver selecionado contém Preço: 0.0. O serviço RESTful não suporta edição de dados. O usuário selecionado não tem efeito.
  4. Abra o console do WSRR e explore o serviço e as políticas. Para obter informações adicionais, consulte Conectando ao WSRR - Business Space.

A amostra também pode ser praticada usando a linha de comandos. Essa é a única maneira de enviar tráfego que usa o SLA Anônimo

Demonstrando Permitir/Negar do XACML com o Cenário de Edição de Dados Usando a Linha de Comandos

O XML de solicitação a seguir pode ser enviado ao Serviço StoreAddLTPA do DataPower:
<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>
Supondo que o XML da solicitação de exemplo esteja contido em um arquivo chamado silver.xml, insira o seguinte comando curl:
curl -k --data-bin @./silver.xml -H "Content-Type: text/xml" 
-u ConsumerX:passw0rd http://<yourDataPowerHostName>:62005/Store/Store
Neste exemplo, ConsumerX é um Gerente, de modo que as informações completas de preço são visíveis na resposta:
<?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>

Executando o Cenário Edição de Dados Usando a Linha de Comandos

O ConsumerA não é um gerente, portanto ele vê uma resposta diferente. Insira o comando curl:
curl -k --data-bin @./silver.xml -H "Content-Type: text/xml" 
-u ConsumerA:passw0rd http://<yourDataPowerHostName>:62005/Store/Store
Observe que a resposta tem o preço editado. O preço é exibido como 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>

Testando a Política de Roteamento Usando a Linha de Comandos

Para a política de roteamento anexada ao SLA gold a ser impingido, o ID de contexto e o ID de consumidor devem ser correspondidos. Nesse caso, o SLA para Clientes Gold possui o ID de contexto de Gold e a versão de serviço de consumo possui o ID de consumidor de CEO. Aqui está o conteúdo de uma solicitação de amostra (é possível ver que o ID de contexto e o ID de consumidor correspondem, conforme necessário):

<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>
Supondo que o XML da solicitação de exemplo esteja contido em um arquivo chamado gold.xml, insira o seguinte comando curl:
curl -k --data-bin @./gold.xml -H "Content-Type: text/xml" 
-u ConsumerX:passw0rd http://<yourDataPowerHostName>:62005/Store/Store
A resposta é a seguinte:
<?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>
Observe que a resposta de retorno tem um GOLDSKU para o valor de SKU, indicando que o terminal ouro foi usado.

Testando a Validação do Esquema Usando a Linha de Comandos

A política de validação verifica o esquema da solicitação com relação ao Store.wsdl e seu Company.xsd associado.
O XML a seguir, badvalid.xml, mostra uma solicitação que é inválida porque o corpo contém um elemento denominado <skubad> quando deveria ser <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>

Se você inserir a seguinte solicitação curl:
curl -k --data-bin @./badvalid.xml -H "Content-Type: text/xml" 
-u ConsumerX:passw0rd
http://<yourDataPowerHostName>:62005/Store/Store
O seguinte erro é exibido:
<?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>Erro interno (do cliente)</faultstring>
</env:Fault>
</env:Body>
</env:Envelope>

Testando a Rejeição na Política de Mediação Usando a Linha de Comandos

Umas das políticas de mediação incluídas na rejeição de testes de amostra após a contagem de mensagens é executada 5 vezes em 90 segundos. Execute o comando a seguir 6 vezes:
curl -k --data-bin @./silver.xml -H "Content-Type: text/xml" -u ConsumerX:passw0rd
http://<yourDataPowerHostName>:62005/Store/Store
A solicitação de amostra é a seguinte:
<?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>
Nesse caso, o ConsumerX é um Gerente, portanto, as informações completas de preço são exibidas para as cinco primeiras execuções:
<?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>
Na sexta execução, ocorre o seguinte erro:
<?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>Rejeitado (do cliente)</faultstring>
</env:Fault>
</env:Body>
</env:Envelope>
Nota: É possível ver esse erro mais cedo se você estiver executando outros testes dentro do intervalo de 90 segundos.

Testando a Notificação na Política de Mediação Usando a Linha de Comandos

A política de notificação é anexada ao SLA anônimo. Isso é impingido quando uma solicitação for proveniente de um consumidor que não tem um SLA no local. Nesta amostra, o único consumidor que possui SLAs no local é o CEO, de modo que uma solicitação contendo o ID do consumidor configurado como algum outro faz com que a política no SLA anônimo seja impingida. Nesse caso, ConsumerX é um Gerente, de modo que as informações completas de preço são exibidas:

Para testar essa funcionalidade usando a linha de comandos, crie um arquivo chamado anon.xml que contém o seguinte 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>
Em seguida, insira o seguinte comando:
curl -k --data-bin @./anon.xml -H "Content-Type: text/xml" 
-u ConsumerX:passw0rd http://<yourDataPowerHostName>:62005/Store/Store
A mensagem a seguir é gerada no log padrão do Domínio:
Notificar ação acionada ('operation_38_2_sla1-1-filter_1-notify') pela política de origem ('LogEveryTime_287d0790-83d9-11e1-a255-9187e20cddb0_05aec6ec-3674-4165-85de-a0f7be48a938'
Nota: A criação de log deve estar configurada como aviso para ver essa mensagem. Se não estiver, clique no ícone Resolução de Problemas no Console da Web do DataPower. Na seção Criação de Log, altere o valor de Nível de Log para aviso e clique em Configurar Nível de Log. Para localizar o log, retorne ao Painel de Controle e clique no ícone Visualizar Logs.

Testando o Serviço RESTful Usando a Linha de Comandos

Também é possível acessar a interface RESTful a partir da linha de comandos usando curl. Como com Web client, um ContextID de Gold permite 5 mensagens por 90 segundos e Silver apenas 2 mensagens.

Para testar essa funcionalidade usando a linha de comandos, crie um arquivo chamado restRequest.xml que contém o seguinte 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>

Em seguida, insira o seguinte comando para testar com o contextID Gold:

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

Para testar com o silver contextID use o mesmo comando, mas substitua Gold por Silver.

Uma resposta bem-sucedida é:

<?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>
Depois que o limite foi violado, você receberá a seguinte mensagem:
<?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>

Para praticar o SLA anônimo para o serviço RESTful, que simplesmente possui uma política de notificação anexada, use qualquer ContextID e ConsumerID diferente dos registrados. A notificação aparece no log DataPower, conforme descrito anteriormente para o exemplo de Serviços da Web.


Conceito Conceito

Feedback


Ícone de registro de data e hora Última atualização: 03/03/2014


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