/** * Copyright (C) 2014 KAIST * @author Janggwan Im <limg00n@kaist.ac.kr> */ package org.fosstrak.ale.server.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.OutputStreamWriter; import java.io.StringWriter; import java.util.List; import org.apache.log4j.Logger; import org.fosstrak.ale.exception.ECSpecValidationException; import org.fosstrak.ale.exception.ImmutableReaderException; import org.fosstrak.ale.exception.ImplementationException; import org.fosstrak.ale.exception.InUseException; import org.fosstrak.ale.exception.NoSuchNameException; import org.fosstrak.ale.exception.SecurityException; import org.fosstrak.ale.server.ALE; import org.fosstrak.ale.server.readers.LogicalReaderManager; import org.fosstrak.ale.server.tm.ALETM; import org.fosstrak.ale.util.DeserializerUtil; import org.fosstrak.ale.util.SerializerUtil; import org.fosstrak.ale.wsdl.aletm.epcglobal.DuplicateNameExceptionResponse; import org.fosstrak.ale.wsdl.aletm.epcglobal.ImplementationExceptionResponse; import org.fosstrak.ale.wsdl.aletm.epcglobal.NoSuchNameExceptionResponse; import org.fosstrak.ale.wsdl.aletm.epcglobal.TMSpecValidationExceptionResponse; import org.fosstrak.ale.xsd.ale.epcglobal.ECReports; import org.fosstrak.ale.xsd.ale.epcglobal.ECSpec; import org.fosstrak.ale.xsd.ale.epcglobal.LRSpec; import org.fosstrak.ale.xsd.ale.epcglobal.TMFixedFieldListSpec; import org.fosstrak.ale.xsd.ale.epcglobal.TMSpec; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ALETMConformanceTest { /** logger. */ private static final Logger LOG = Logger.getLogger(ALETMConformanceTest.class); static ALETM aletm; static ALE ale; static LogicalReaderManager lrm; @BeforeClass public static void beforeClass() throws Exception { LOG.info("Initializing Spring context."); ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/applicationContext.xml"); LOG.info("Spring context initialized."); aletm = (ALETM) applicationContext.getBean("aletm"); ale = (ALE) applicationContext.getBean("ale"); lrm = (LogicalReaderManager) applicationContext.getBean("logicalReaderManager"); LRSpec lrspec = DeserializerUtil.deserializeLRSpec(ALETMConformanceTest.class.getResourceAsStream("/lrspecs/LRSpec_T4.xml")); System.out.println("Please connect reader... (timeout: 5000ms)"); Thread.sleep(5000); lrm.define("limg00n_emulator", lrspec); System.out.println("Waiting for reader initialization..."); Thread.sleep(5000); } @Before public void beforeEachTest() { for(String name : aletm.getTMSpecNames()) { try { aletm.undefineTMSpec(name); } catch (NoSuchNameExceptionResponse e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Test public void test_T1() { assertEquals("1.1", aletm.getStandardVersion()); assertEquals("", aletm.getVendorVersion()); } @Test public void test_T2() throws TMSpecValidationExceptionResponse, ImplementationExceptionResponse, Exception { TMSpec spec = DeserializerUtil.deserializeTMSpec(getClass().getResourceAsStream("/tmspecs/TMFixedFieldListSpec.xml")); TMSpec spec2 = DeserializerUtil.deserializeTMSpec(getClass().getResourceAsStream("/tmspecs/TMFixedFieldListSpec2.xml")); // step 1 aletm.defineTMSpec("tempHumid", spec); // step 2 assertEquals("tempHumid", aletm.getTMSpecNames().get(0)); // step 3 assertEquals(spec, aletm.getTMSpec("tempHumid")); // step 4 aletm.defineTMSpec("manufactureCirculationDate", spec2); // step 5 List<String> specNames = aletm.getTMSpecNames(); assertTrue(specNames.size() == 2); for(String specName : specNames) { assertTrue(specName.equals("tempHumid") || specName.equals("manufactureCirculationDate")); } // step 6: repeat 1 to 5 with a valid TMVariableFieldListSpec => skip // step 7 aletm.undefineTMSpec("tempHumid"); // step 8 List<String> specNamesAfterUndefine = aletm.getTMSpecNames(); assertTrue(specNamesAfterUndefine.size() == 1); for(String specName : specNamesAfterUndefine) { assertTrue(specName.equals("manufactureCirculationDate")); } // step 9 aletm.undefineTMSpec("manufactureCirculationDate"); // step 10: returned list should be empty assertTrue(aletm.getTMSpecNames().size() == 0); // step 11: repeat 7-10 for TMVariableFieldListSpec TMSpec => skip } @Test public void test_T3() throws Exception { TMFixedFieldListSpec validSpec = (TMFixedFieldListSpec) DeserializerUtil.deserializeTMSpec(getClass().getResourceAsStream("/tmspecs/TMFixedFieldListSpec.xml")); TMFixedFieldListSpec validSpec2 = (TMFixedFieldListSpec) DeserializerUtil.deserializeTMSpec(getClass().getResourceAsStream("/tmspecs/TMFixedFieldListSpec2.xml")); // step 1 aletm.defineTMSpec("TM1", validSpec); // step 2 boolean successFlag = false; try { aletm.defineTMSpec("TM1", validSpec2); successFlag = true; } catch(DuplicateNameExceptionResponse e) { successFlag = false; } finally { if(successFlag) Assert.fail(); } // step 3 TMFixedFieldListSpec invalidSpec = (TMFixedFieldListSpec) DeserializerUtil.deserializeTMSpec(getClass().getResourceAsStream("/tmspecs/TMFixedFieldListSpec2.xml")); invalidSpec.getFixedFields().getFixedField().get(0).setBank(-1); invalidSpec.getFixedFields().getFixedField().get(0).setLength(-3); invalidSpec.getFixedFields().getFixedField().get(0).setOffset(-1); try { aletm.defineTMSpec("TM2", invalidSpec); successFlag = true; } catch(TMSpecValidationExceptionResponse e) { successFlag = false; } finally { if(successFlag) Assert.fail(); } // step 4 try { aletm.undefineTMSpec("TM2"); successFlag = true; } catch(NoSuchNameExceptionResponse e) { successFlag = false; } finally { if(successFlag) Assert.fail(); } // step 5 try { aletm.getTMSpec("TM2"); successFlag = true; } catch(NoSuchNameExceptionResponse e) { successFlag = false; } finally { if(successFlag) Assert.fail(); } // step 6 aletm.undefineTMSpec("TM1"); // step 7: defineTMSpec with TMVariableFieldListSpec => skip // step 8 TMFixedFieldListSpec spec_symbol = (TMFixedFieldListSpec) DeserializerUtil.deserializeTMSpec(getClass().getResourceAsStream("/tmspecs/TMFixedFieldListSpec_T3.xml")); aletm.defineTMSpec("TM1", spec_symbol); // step 9 try { aletm.defineTMSpec("TM2", spec_symbol); successFlag = true; } catch(TMSpecValidationExceptionResponse e) { successFlag = false; } finally { if(successFlag) Assert.fail(); } // step 10 TMFixedFieldListSpec spec_builtin = (TMFixedFieldListSpec) DeserializerUtil.deserializeTMSpec(getClass().getResourceAsStream("/tmspecs/TMFixedFieldListSpec_T3.xml")); spec_builtin.getFixedFields().getFixedField().get(0).setFieldname("epc"); try { aletm.defineTMSpec("TM2", spec_builtin); successFlag = true; } catch(TMSpecValidationExceptionResponse e) { successFlag = false; } finally { if(successFlag) Assert.fail(); } spec_builtin.getFixedFields().getFixedField().get(0).setFieldname("killPwd"); try { aletm.defineTMSpec("TM2", spec_builtin); successFlag = true; } catch(TMSpecValidationExceptionResponse e) { successFlag = false; } finally { if(successFlag) Assert.fail(); } spec_builtin.getFixedFields().getFixedField().get(0).setFieldname("accessPwd"); try { aletm.defineTMSpec("TM2", spec_builtin); successFlag = true; } catch(TMSpecValidationExceptionResponse e) { successFlag = false; } finally { if(successFlag) Assert.fail(); } spec_builtin.getFixedFields().getFixedField().get(0).setFieldname("epcBank"); try { aletm.defineTMSpec("TM2", spec_builtin); successFlag = true; } catch(TMSpecValidationExceptionResponse e) { successFlag = false; } finally { if(successFlag) Assert.fail(); } spec_builtin.getFixedFields().getFixedField().get(0).setFieldname("tidBank"); try { aletm.defineTMSpec("TM2", spec_builtin); successFlag = true; } catch(TMSpecValidationExceptionResponse e) { successFlag = false; } finally { if(successFlag) Assert.fail(); } spec_builtin.getFixedFields().getFixedField().get(0).setFieldname("userBank"); try { aletm.defineTMSpec("TM2", spec_builtin); successFlag = true; } catch(TMSpecValidationExceptionResponse e) { successFlag = false; } finally { if(successFlag) Assert.fail(); } spec_builtin.getFixedFields().getFixedField().get(0).setFieldname("afi"); try { aletm.defineTMSpec("TM2", spec_builtin); successFlag = true; } catch(TMSpecValidationExceptionResponse e) { successFlag = false; } finally { if(successFlag) Assert.fail(); } spec_builtin.getFixedFields().getFixedField().get(0).setFieldname("nsi"); try { aletm.defineTMSpec("TM2", spec_builtin); successFlag = true; } catch(TMSpecValidationExceptionResponse e) { successFlag = false; } finally { if(successFlag) Assert.fail(); } // step 11 TMFixedFieldListSpec spec_wrongat = (TMFixedFieldListSpec) DeserializerUtil.deserializeTMSpec(getClass().getResourceAsStream("/tmspecs/TMFixedFieldListSpec_T3.xml")); spec_wrongat.getFixedFields().getFixedField().get(0).setFieldname("@symbol"); try { aletm.defineTMSpec("TM2", spec_wrongat); successFlag = true; } catch(TMSpecValidationExceptionResponse e) { successFlag = false; } finally { if(successFlag) Assert.fail(); } // step 12: repeat step 1~11 with TMVariableFieldListSpec => skip } @Test public void test_T4() throws Exception { TMFixedFieldListSpec tmspec = (TMFixedFieldListSpec) DeserializerUtil.deserializeTMSpec(getClass().getResourceAsStream("/tmspecs/TMFixedFieldListSpec_T4.xml")); ECSpec ecspec = (ECSpec) DeserializerUtil.deserializeECSpec(getClass().getResourceAsStream("/ecspecs/ECSpec_T4.xml")); //System.out.println(ecspec.getReportSpecs().getReportSpec().get(0).getFilterSpec().getExtension().getFilterList().getFilter().get(0).getFieldspec().getFieldname()); // step 1 aletm.defineTMSpec("TM1", tmspec); // step 2 Assert.assertEquals("TM1", aletm.getTMSpecNames().get(0)); // step 3 ale.define("EC1", ecspec); // step 4 ECReports ecreports = ale.poll("EC1"); // step 5 ECReports expectedEcreports = DeserializerUtil.deserializeECReports(getClass().getResourceAsStream("/ecreports/ECReports_T4.xml")); StringWriter expectedSw = new StringWriter(); SerializerUtil.serializeECReportsPretty(expectedEcreports, expectedSw); String outExpectedString = expectedSw.toString(); StringWriter sw = new StringWriter(); SerializerUtil.serializeECReportsPretty(ecreports, sw); String outString = sw.toString(); //SerializerUtil.serializeECReportsPretty(ecreports, new OutputStreamWriter(System.out)); //Assert.assertEquals(expectedEcreports, ecreports); Assert.assertEquals(outExpectedString.substring(outExpectedString.indexOf("<reports>")), outString.substring(outString.indexOf("<reports>"))); // step 6 ale.undefine("EC1"); // step 7 aletm.undefineTMSpec("TM1"); // step 8 boolean successFlag = true; try { ale.define("EC1", ecspec); successFlag = true; } catch(ECSpecValidationException e) { successFlag = false; } finally { if(successFlag) Assert.fail(); } } }