/**********************************************************************
* $Source: /cvsroot/hibiscus/hbci4java/test/hbci4java/bpd/HITANSTest.java,v $
* $Revision: 1.1 $
* $Date: 2011/05/17 12:48:05 $
* $Author: willuhn $
*
* Copyright (c) by willuhn - software & services
* All rights reserved
*
**********************************************************************/
package hbci4java.bpd;
import hbci4java.AbstractTest;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Properties;
import org.junit.Assert;
import org.junit.Test;
import org.kapott.hbci.manager.HBCIKernelImpl;
import org.kapott.hbci.manager.MsgGen;
import org.kapott.hbci.passport.HBCIPassportPinTan;
import org.kapott.hbci.protocol.MSG;
import org.kapott.hbci.protocol.factory.MSGFactory;
/**
* Testet das Parsen der HITANS-Segmente aus den BPD.
*/
public class HITANSTest extends AbstractTest
{
/**
* Liefert Pseudo-BPD aus der angegebenen Datei.
* @param file der Dateiname.
* @param version die HBCI-Version.
* @return die Pseudo-BPD.
* @throws Exception
*/
private Properties getBPD(String file, String version) throws Exception
{
String data = getFile(file);
HBCIKernelImpl kernel = new HBCIKernelImpl(null,version);
kernel.rawNewMsg("DialogInitAnon");
MsgGen gen = kernel.getMsgGen();
MSG msg = MSGFactory.getInstance().createMSG("DialogInitAnonRes",data,data.length(),gen);
Hashtable<String,String> ht = new Hashtable<String,String>();
msg.extractValues(ht);
// Prefix abschneiden
Properties bpd = new Properties();
for (Enumeration<String> e=ht.keys();e.hasMoreElements();)
{
String name = e.nextElement();
String value = ht.get(name);
if (name.startsWith("DialogInitAnonRes."))
name = name.replace("DialogInitAnonRes.","");
if (name.startsWith("BPD."))
name = name.replace("BPD.","");
bpd.put(name,value);
}
return bpd;
}
/**
* Testet, dass das HITANS-Segment in Version 5 korrekt geladen wird.
* @throws Exception
*/
@Test
public void testHitans5() throws Exception
{
Properties bpd = getBPD("bpd/bpd2-formatted.txt","300");
Enumeration names = bpd.propertyNames();
int version = 0;
while (names.hasMoreElements())
{
String name = (String) names.nextElement();
String value = bpd.getProperty(name);
// Das darf kein Template-Parameter sein
if (value.equals("HITANS"))
Assert.assertFalse(name.contains("Template"));
// Hoechste Versionsnummer holen. Die muss 5 sein
if (name.contains("TAN2StepPar") && name.endsWith("SegHead.version"))
{
int newVersion = Integer.parseInt(value);
if (newVersion > version)
version = newVersion;
}
}
Assert.assertEquals(version,5);
}
/**
* Testet das Ermitteln der TAN-Verfahren.
* @throws Exception
*/
@Test
public void testCurrentSecMechInfo() throws Exception
{
Properties bpd = getBPD("bpd/bpd2-formatted.txt","300");
HBCIPassportPinTan passport = new HBCIPassportPinTan(null,0);
passport.setCurrentTANMethod("942");
passport.setBPD(bpd);
Properties secmech = passport.getCurrentSecMechInfo();
// secmech darf nicht null sein
Assert.assertNotNull(secmech);
// Das TAN-Verfahren 942 gibts in den BPD drei mal. In HITANS 5, 4 und 2.
// Der Code muss die Version aus der aktuellsten Segment-Version liefern.
Assert.assertEquals(secmech.getProperty("segversion"),"5");
}
}
/**********************************************************************
* $Log: HITANSTest.java,v $
* Revision 1.1 2011/05/17 12:48:05 willuhn
* @N Unit-Tests
*
* Revision 1.1 2011-05-13 15:07:58 willuhn
* @N Testcode fuer das Parsen der HITANS-Segmente
*
**********************************************************************/