Saját tesztek írása: 2. minta
Az alábbi forráskód egy olyan teszt mintája, amely sorneveket ellenőriz megadott elnevezési megállapodások alapján. Ha a rendszer olyan sort talál, amelynek neve nem felel meg a megadott elnevezési megállapodásnak, akkor a részletek megjelennek a Teszteredmények nézetben.
/*
* Engedélyköteles anyagok - Az IBM tulajdona
*
* 5724-H72, 5655-L82, 5724-L26, 5655R3600
*
* (c) Copyright IBM Corp. 2005, 2020
*
* USA kormányzati felhasználók korlátozott jogai - A használatot,
* másolást vagy közlést az IBM Corporation-nel kötött GSA ADP Schedule szerződés szabályozza.
*/
package com.ibm.mq.explorer.tests.sample;
/**
* Mintateszt a Sornevek ellenőrzéséhez az elnevezési megállapodások alapján. A sornevek ellenőrzésre kerülnek, hogy
* egy beállított előtag-tartomány valamelyikével kezdődnek-e, amely ebben az osztályban került meghatározásra. Az olyan nevek,
* amelyek nem egy megadott előtaggal kezdődnek, kimenetre kerülnek egy hibában.
*
* Ez a példa az MS0B SupportPac által biztosított PCF osztályokat használja. Töltse le a SupportPac csomagot
* az IBM webhelyéről, majd foglalja bele a jar fájlt a projekt összeállítási útvonalába.
*/
public class WMQQueueNames extends WMQTest {
/** Egy szám fenntartása, hogy hány sorkezelőtől várunk választ. */
private static int numberOfQmgrs = 0;
/** Az elfogadott sornév előtagok tárolása. */
private static final String[] ACCEPTED_Q_PREFIXES = {"SALES_", "MARKETING_", "SHIPPING_", //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
"INCOMING_", "OUTGOING_"}; //$NON-NLS-1$//$NON-NLS-2$
/** A felhasználó beállítását tárolja, hogy tartalmazza-e a rendszersorokat. */
boolean includeSystemObjs = false;
/**
* A teszt elindítása.
*
*
* @param callback azonosító a tesztet futtató teszt alrendszerhez
* @param guimonitor azonosító a tesztet megfigyelő objektumhoz, amely azt biztosítja, hogy a teszt
* rendszeres időközönként ellenőrizhesse, hogy a felhasználó megpróbálta-e visszavonni a teszt
* futását, valamint kiegészítő felhasználói visszajelzést biztosít
* @param contextObjects a teszt alrendszernek átadott MQExtObjects kontextus
* @param treenodeId a tesztek elindítására használt fa csomópont azonosító
*/
public void runTest(WMQTestEngine callback, IProgressMonitor guimonitor,
MQExtObject[] contextObjects, TreeNode treenodeId) {
// elindítás az alapértelmezett megvalósítással. Ez egy azonosítót tárol
// a teszt alrendszer számára, amelyre akkor lesz szükség, amikor
// bármely eredményt el szeretnénk küldeni a teszt végén
super.runTest(callback, guimonitor, contextObjects, treenodeId);
// terület előkészítése az eredmények tárolásához, amelyeket vissza kíván küldeni
ArrayList testResults = new ArrayList();
// kiolvasás a Beállításokból, hogy tartalmazzon-e rendszersorokat
includeSystemObjs = PreferenceStoreManager.getIncludeSysObjsPreference();
// sorkezelők listájának megszerzése az Explorer programból
ArrayList allQmgrs = new ArrayList();
for (int k = 0; k < contextObjects.length; k++) {
if (contextObjects[k] instanceof MQQmgrExtObject) {
// Az objektum egy sorkezelő, adja hozzá a listához
allQmgrs.add(contextObjects[k]);
}
}
// mennyi sorkezelő van ott?
numberOfQmgrs = allQmgrs.size();
// a sorkezelők számának használata útmutatóként a folyamat nyomon követéséhez
guimonitor.beginTask(getTestName(), numberOfQmgrs);
// minden sorkezelő számára egy lekérdezés elküldése
for (int i = 0; i < numberOfQmgrs; i++) {
// következő sorkezelő kiolvasása
MQQmgrExtObject nextQueueManager = (MQQmgrExtObject) allQmgrs.get(i);
// lekérdezések elküldése csak a csatlakoztatott sorkezelők számára
if (nextQueueManager.isConnected()) {
// a sorkezelő nevének beszerzése, a grafikus felületen történő használathoz
String qmgrName = nextQueueManager.getName();
// azonosító beszerzése a sorkezelőt képviselő Java objektumhoz
MQQueueManager qmgr = nextQueueManager.getMQQueueManager();
try {
// egy PCF üzenetügynök lekérése a PCF érdeklődés elküldésének kezeléséhez
PCFMessageAgent agent = new PCFMessageAgent(qmgr);
// PCF használata egy 'sornevek érdeklődése' lekérdezés elküldéséhez
PCFMessage response = submitQueueNamesQuery(qmgrName, agent);
// kaptunk választ a lekérdezésre?
if (response != null) {
// a sornevek kiolvasása a válaszból
String[] qnames = (String[]) response.getParameterValue(CMQCFC.MQCACF_Q_NAMES);
// minden név ellenőrzése
for (int j = 0; j < qnames.length; j++) {
boolean qnameOkay = checkQueueName(qnames[j]);
if (!qnameOkay) {
// ha a rendszer problémát talált a névnél, akkor előállítunk
// egy hibaüzenetet, és hozzáadjuk a visszaküldendő
// gyűjteményhez
testResults.add(generateTestResult(qnames[j], qmgrName));
}
}
}
}
catch (MQException e) {
// hibarészletek feljegyzése
e.printStackTrace();
}
}
// sorkezelő megvizsgálása befejeződött
guimonitor.worked(1);
}
// a teszt által előállított eredményeket adja vissza
WMQTestResult[] finalresults = (WMQTestResult[]) testResults
.toArray(new WMQTestResult[testResults.size()]);
testComplete(finalresults);
}
/**
* Belső használatra egy INQUIRE_Q_NAMES lekérdezés elküldéséhez PCF használatával az adott sorkezelőhöz.
*
*
* @param qmgrName a sorkezelő neve, amelyhez el kell küldeni a lekérdezést
* @param agent
* @visszaadja a PCF választ a sorkezelőtől
*/
private PCFMessage submitQueueNamesQuery(String qmgrName, PCFMessageAgent agent) {
// pcf üzenet összeállítása
PCFMessage inquireQNames = new PCFMessage(CMQCFC.MQCMD_INQUIRE_Q_NAMES);
inquireQNames.addParameter(CMQC.MQCA_Q_NAME, "*"); //$NON-NLS-1$
try {
// üzenet elküldése
PCFMessage[] responseMsgs = agent.send(inquireQNames);
// eredmények sikeres fogadásának ellenőrzése
if (responseMsgs[0].getCompCode() == 0) {
return responseMsgs[0];
}
}
catch (IOException e) {
// hibarészletek feljegyzése
e.printStackTrace();
}
catch (MQException e) {
// hibarészletek feljegyzése
e.printStackTrace();
}
// valamilyen okból nem kaptunk választ, ezért visszatérés a nullértékhez
return null;
}
/**
* Belső használatra az adott sor nevének ellenőrzéséhez az elfogadható előtagok gyűjteménye alapján.
*
*
* @param queueName ellenőrizendő sor neve
* @return ha a sor neve rendben van: true, ellenkező esetben: false
*/
private boolean checkQueueName(String queueName) {
// ha ez egy rendszerobjektum (például a neve
// "SYSTEM." kifejezéssel kezdődik), akkor ellenőrizzük a következőt:
if ((queueName.startsWith("SYSTEM.")) || (queueName.startsWith("AMQ."))) { //$NON-NLS-1$//$NON-NLS-2$
if (!includeSystemObjs) {
// a felhasználó azt kérte, hogy rendszerobjektumok
// ne legyenek belefoglalva a tesztbe, ezért true értéket küldünk vissza,
// hogy erről a sorról ne kerüljön jelentésre probléma
return true;
}
}
// a PCF válasz üres karakterekkel fogja kitölteni a sor nevét, ezért most rövidre vágjuk
queueName = queueName.trim();
// sor nevének ellenőrzése az elfogadható előtagokhoz képest
// és true érték visszaadása azonnal, ha talál egyezést
for (int i = 0; i < ACCEPTED_Q_PREFIXES.length; i++) {
if (queueName.startsWith(ACCEPTED_Q_PREFIXES[i]))
return true;
}
// minden elfogadott előtagot ellenőriztünk,
// de nem találtunk egyezést
return false;
}
/**
* Belső használatra egy teszteredmény előállításához az adott sornév számára.
*
*
* @param queueName a követelményeknek nem megfelelő sornév
* @param qmgrName a sort tartalmazó sorkezelő neve
* @return az előállított teszteredmény
*/
private WMQTestResult generateTestResult(String queueName, String qmgrName) {
String res = "Queue (" + queueName.trim() + ") does not begin with a known prefix"; //$NON-NLS-1$//$NON-NLS-2$
return new WMQTestResult(IMarker.SEVERITY_ERROR, res, qmgrName, getTestSubCategory());
}
}