/*
* Copyright (C) 2007 ETH Zurich
*
* This file is part of Fosstrak (www.fosstrak.org).
*
* Fosstrak is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* Fosstrak is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Fosstrak; if not, write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA
*/
package org.fosstrak.ale.server.util.test;
import java.io.ByteArrayInputStream;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import junit.framework.Assert;
import org.easymock.EasyMock;
import org.fosstrak.ale.server.util.ECReportsHelper;
import org.fosstrak.ale.util.DeserializerUtil;
import org.fosstrak.ale.xsd.ale.epcglobal.ECReport;
import org.fosstrak.ale.xsd.ale.epcglobal.ECReportGroup;
import org.fosstrak.ale.xsd.ale.epcglobal.ECReportOutputSpec;
import org.fosstrak.ale.xsd.ale.epcglobal.ECReportSpec;
import org.fosstrak.ale.xsd.ale.epcglobal.ECReports;
import org.fosstrak.ale.xsd.epcglobal.EPC;
import org.junit.Test;
/**
* test the reports helper.
*
* @author swieland
*
*/
public class ECReportsHelperTest {
/**
* ec reports with the group with name 'null' and with tags contained in it.
*/
public static final String ECREPORTS_NULLGROUP_TWOTAGS = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><ns2:ECReports terminationCondition=\"DURATION\" totalMilliseconds=\"9500\" ALEID=\"ETHZ-ALE1215934431\" date=\"2012-07-28T17:36:40.599+02:00\" specName=\"current\" xmlns:ns2=\"urn:epcglobal:ale:xsd:1\"><reports><report><group><groupList><member><epc>urn:epc:id:sgtin:138650.3276101.140295059055</epc><tag>urn:epc:tag:sgtin-96:2.138650.3276101.140295059055</tag><rawHex>urn:epc:raw:96.x305887668C7F5160AA3CB66F</rawHex><rawDecimal>urn:epc:raw:96.14962305354717633549608728175</rawDecimal></member><member><epc>urn:epc:id:sgtin:747136.3229748.161154676025</epc><tag>urn:epc:tag:sgtin-96:3.747136.3229748.161154676025</tag><rawHex>urn:epc:raw:96.x307AD9A00C520D2585913539</rawHex><rawDecimal>urn:epc:raw:96.15003797127311169095994520889</rawDecimal></member></groupList></group></report></reports></ns2:ECReports>";
/**
* ec reports with the group with name 'null' and with only one tag contained in it.
*/
public static final String ECREPORTS_NULLGROUP_ONETAG = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><ns2:ECReports terminationCondition=\"DURATION\" totalMilliseconds=\"9500\" ALEID=\"ETHZ-ALE1215934431\" date=\"2012-07-28T17:36:40.599+02:00\" specName=\"current\" xmlns:ns2=\"urn:epcglobal:ale:xsd:1\"><reports><report><group><groupList><member><epc>urn:epc:id:sgtin:747136.3229748.161154676025</epc><tag>urn:epc:tag:sgtin-96:3.747136.3229748.161154676025</tag><rawHex>urn:epc:raw:96.x307AD9A00C520D2585913539</rawHex><rawDecimal>urn:epc:raw:96.15003797127311169095994520889</rawDecimal></member></groupList></group></report></reports></ns2:ECReports>";
/**
* ec reports with the group name 'null' and with no tags contained.
*/
public static final String ECREPORTS_NULLGROUP_NOTAGSINGROUP = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><ns2:ECReports terminationCondition=\"DURATION\" totalMilliseconds=\"9501\" ALEID=\"ETHZ-ALE1215934431\" date=\"2012-07-28T17:41:44.097+02:00\" specName=\"current\" xmlns:ns2=\"urn:epcglobal:ale:xsd:1\"><reports><report><group><groupList></groupList></group></report></reports></ns2:ECReports>";
/**
* deserialize an EC Reports structure from a string.
* @param reportString the spec.
* @return the reports.
* @throws Exception error.
*/
public static ECReports getECReports(String reportString) throws Exception {
ByteArrayInputStream bis = new ByteArrayInputStream(reportString.getBytes());
ECReports ecReports = DeserializerUtil.deserializeECReports(bis);
bis.close();
return ecReports;
}
private boolean invokeHelper(ECReportsHelper helper, ECReports report1, ECReports report2, ECReportSpec spec) {
return helper.areReportsEqual(
spec,
(report1 == null) ? null : report1.getReports().getReport().get(0),
(report2 == null) ? null : report2.getReports().getReport().get(0));
}
private boolean invokeHelper(ECReportsHelper helper, ECReport report1, ECReport report2, ECReportSpec spec) {
return helper.areReportsEqual(
spec,
(report1 == null) ? null : report1,
(report2 == null) ? null : report2);
}
/**
* test equal reports.
* @throws Exception test failure.
*/
@Test
public void testEqualWithTags() throws Exception {
ECReports reportTwoTags = getECReports(ECREPORTS_NULLGROUP_TWOTAGS);
ECReportOutputSpec outputSpec = EasyMock.createMock(ECReportOutputSpec.class);
EasyMock.expect(outputSpec.isIncludeEPC()).andReturn(true);
EasyMock.expect(outputSpec.isIncludeTag()).andReturn(true);
EasyMock.expect(outputSpec.isIncludeRawHex()).andReturn(true);
EasyMock.replay(outputSpec);
ECReportSpec spec = EasyMock.createMock(ECReportSpec.class);
EasyMock.expect(spec.getOutput()).andReturn(outputSpec).atLeastOnce();
EasyMock.replay(spec);
ECReportsHelper helper = new ECReportsHelper();
Assert.assertTrue(invokeHelper(helper, reportTwoTags, reportTwoTags, spec));
EasyMock.verify(spec);
EasyMock.verify(outputSpec);
}
/**
* test equal reports.
* @throws Exception test failure.
*/
@Test
public void testEqualWithoutTags() throws Exception {
ECReports reportNoTags = getECReports(ECREPORTS_NULLGROUP_NOTAGSINGROUP);
ECReportOutputSpec outputSpec = EasyMock.createMock(ECReportOutputSpec.class);
EasyMock.expect(outputSpec.isIncludeEPC()).andReturn(true);
EasyMock.expect(outputSpec.isIncludeTag()).andReturn(true);
EasyMock.expect(outputSpec.isIncludeRawHex()).andReturn(true);
EasyMock.replay(outputSpec);
ECReportSpec spec = EasyMock.createMock(ECReportSpec.class);
EasyMock.expect(spec.getOutput()).andReturn(outputSpec).atLeastOnce();
EasyMock.replay(spec);
ECReportsHelper helper = new ECReportsHelper();
Assert.assertTrue(invokeHelper(helper, reportNoTags, reportNoTags, spec));
EasyMock.verify(spec);
EasyMock.verify(outputSpec);
}
/**
* test equal reports - old report null.
* @throws Exception test failure.
*/
@Test
public void testNotEqualOldNull() throws Exception {
ECReports reportTwoTags = getECReports(ECREPORTS_NULLGROUP_TWOTAGS);
ECReportSpec spec = EasyMock.createMock(ECReportSpec.class);
EasyMock.replay(spec);
ECReportsHelper helper = new ECReportsHelper();
Assert.assertFalse(invokeHelper(helper, reportTwoTags, null, spec));
EasyMock.verify(spec);
}
/**
* test equal reports - not the same members.
* @throws Exception test failure.
*/
@Test
public void testNotEqualNotTheSameMembersFirstMore() throws Exception {
ECReports reportTwoTags = getECReports(ECREPORTS_NULLGROUP_TWOTAGS);
ECReports reportOneTag = getECReports(ECREPORTS_NULLGROUP_ONETAG);
ECReportOutputSpec outputSpec = EasyMock.createMock(ECReportOutputSpec.class);
EasyMock.expect(outputSpec.isIncludeEPC()).andReturn(true);
EasyMock.expect(outputSpec.isIncludeTag()).andReturn(true);
EasyMock.expect(outputSpec.isIncludeRawHex()).andReturn(true);
EasyMock.replay(outputSpec);
ECReportSpec spec = EasyMock.createMock(ECReportSpec.class);
EasyMock.expect(spec.getOutput()).andReturn(outputSpec).atLeastOnce();
EasyMock.replay(spec);
ECReportsHelper helper = new ECReportsHelper();
Assert.assertFalse(invokeHelper(helper, reportTwoTags, reportOneTag, spec));
EasyMock.verify(spec);
EasyMock.verify(outputSpec);
}
/**
* test equal reports - not the same members.
* @throws Exception test failure.
*/
@Test
public void testNotEqualNotTheSameMembersSecondMore() throws Exception {
ECReports reportTwoTags = getECReports(ECREPORTS_NULLGROUP_TWOTAGS);
ECReports reportOneTag = getECReports(ECREPORTS_NULLGROUP_ONETAG);
ECReportOutputSpec outputSpec = EasyMock.createMock(ECReportOutputSpec.class);
EasyMock.expect(outputSpec.isIncludeEPC()).andReturn(true);
EasyMock.expect(outputSpec.isIncludeTag()).andReturn(true);
EasyMock.expect(outputSpec.isIncludeRawHex()).andReturn(true);
EasyMock.replay(outputSpec);
ECReportSpec spec = EasyMock.createMock(ECReportSpec.class);
EasyMock.expect(spec.getOutput()).andReturn(outputSpec).atLeastOnce();
EasyMock.replay(spec);
ECReportsHelper helper = new ECReportsHelper();
Assert.assertFalse(invokeHelper(helper, reportOneTag, reportTwoTags, spec));
EasyMock.verify(spec);
EasyMock.verify(outputSpec);
}
/**
*
* @throws Exception test failure
*/
@Test
public void testNotEqualGroupSizeDiffering() throws Exception {
@SuppressWarnings("unchecked")
List<ECReportGroup> group1 = EasyMock.createMock(List.class);
EasyMock.expect(group1.size()).andReturn(1);
EasyMock.replay(group1);
ECReport report1 = EasyMock.createMock(ECReport.class);
EasyMock.expect(report1.getGroup()).andReturn(group1);
EasyMock.replay(report1);
@SuppressWarnings("unchecked")
List<ECReportGroup> group2 = EasyMock.createMock(List.class);
EasyMock.expect(group2.size()).andReturn(2);
EasyMock.replay(group2);
ECReport report2 = EasyMock.createMock(ECReport.class);
EasyMock.expect(report2.getGroup()).andReturn(group2);
EasyMock.replay(report2);
ECReportsHelper helper = new ECReportsHelper();
Assert.assertFalse(invokeHelper(helper, report1, report2, null));
EasyMock.verify(report1);
EasyMock.verify(report2);
EasyMock.verify(group1);
EasyMock.verify(group2);
}
/**
* test the add epc method.
*/
@Test
public void testAddEPC() {
ECReportsHelper helper = new ECReportsHelper();
Assert.assertFalse(helper.addEPC(null, null));
Assert.assertFalse(helper.addEPC(new HashSet<String>(), null));
Assert.assertFalse(helper.addEPC(new HashSet<String>(), new EPC()));
EPC epc = new EPC();
epc.setValue("theValue");
Set<String> set = new HashSet<String>();
Assert.assertTrue(helper.addEPC(set, epc));
Assert.assertEquals("theValue", set.toArray()[0]);
}
}