Gravando seus Próprios Testes: Amostra 3

O código-fonte a seguir é o exemplo de um teste que mostra uma abordagem assíncrona à solicitação e processamento de dados.


/*                                                    
 * Licensed Materials - Property of IBM
 *  
 * 5724-H72, 5655-L82, 5724-L26, 5655R3600
 * 
 * (c) Copyright IBM Corp. 2005, 2020
 * 
 * Direitos Restritos para Usuários do Governo dos Estados Unidos - Uso, duplicação ou
 * divulgação restritos pelo documento GSA ADP Schedule Contract com a IBM Corp.
 */
package com.ibm.mq.explorer.tests.sample;

/**
 * Amostra de pseudocódigo demonstrando uma abordagem assíncrona para implementação de um
 * Teste. 
 */
public class QueuesTest extends WMQTest implements SomeListener {

    /** Utilizado para armazenar resultados do teste. */
    private ArrayList testresults = new ArrayList();

    /**
     * Utilizado para iniciar o teste.
     * < p>
     * @param callback - identificador para o mecanismo de teste que está executando o teste
     * @param guimonitor - um identificador para o objeto que está monitorando o teste, 
     * fornecido para que o teste verifique periodicamente
     * se o usuário tentou cancelar a execução do teste    
     */
    public void runTest(WMQTestEngine callback, IProgressMonitor guimonitor, MQExtObject[] contextObjects, TreeNode  treenodeId) {

        super.runTest(callback, guimonitor, contextObjects, treenodeId);

        // Reconfigurar todos os armazenamentos de testes
        testresults = new ArrayList();

        // Inicializar a parte de barra de progresso da GUI utilizada para mostrar o progresso
        //  deste teste
        guimonitor.beginTask(getTestName(), numqmgrs);

        // Iniciar o teste!

        // Enviar consulta
        PseudoQueueManager qmgrHandle = pseudoGetQueueManager();
        submitQmgrQuery(qmgrHandle, this, query);
        
        // Observe que o método runTest foi concluído agora, mas o teste não terminou!                
    }


    /**
     * Utilizado para processar os resultados recebidos em resposta à consulta submetida por
     * runTest.
     * < p>
     * @param objects - dados recebidos 
     */
    public void dataReponseReceived(ArrayList objects) {

        // Analisar cada uma das respostas na coleta recebida na resposta
        for ( int i = 0; i < objects.size(); i++ ) {
            PseudoQueue nxtQueue = (PseudoQueue) objects.get(i);
            analyseQueue(nxtQueue);

            // Incrementar a barra de progresso da GUI utilizada para mostrar o progresso deste teste
            getGUIMonitor().worked(1);
        }

        // Retornar os resultados concluídos
        WMQTestResult[] finalresults = (WMQTestResult[]) testresults.toArray(new WMQTestResult[0]);
        testComplete(finalresults);
    }



    /**
     * Analisar a fila fornecida. Se forem encontrados problemas, será incluído 
     * um marcador de problemas na coleta de resultados do teste.
     * < p>
     * @param queue - fila a ser analisada
     */
    private void analyseQueue(PseudoQueue queue) {

        // Fazer alguma coisa

        // Incluir um marcador de problema na coleta
        if (problemFound) {
            testresults.add(new WMQTestResult(IMarker.SEVERITY_WARNING,
                                              "Foi encontrado um problema com " 
                                                + queueName,
                                              getQueueManagerName(queue),
                                              getTestSubCategory()));
        }
    }    
}