Author: kwall Date: Wed Jul 18 11:45:01 2012 New Revision: 1362891 URL: http://svn.apache.org/viewvc?rev=1362891&view=rev Log: QPID-4103: Refactor test approach to avoid comparing JSON strings.
Applied patch from Philip Harvey <[email protected]>. Removed: qpid/trunk/qpid/java/perftests/src/test/java/org/apache/qpid/disttest/controller/config/JavaScriptConfigEvaluatorTest-expected-json.json Modified: qpid/trunk/qpid/java/perftests/src/test/java/org/apache/qpid/disttest/controller/config/JavaScriptConfigEvaluatorTest-test-config.js qpid/trunk/qpid/java/perftests/src/test/java/org/apache/qpid/disttest/controller/config/JavaScriptConfigEvaluatorTest.java Modified: qpid/trunk/qpid/java/perftests/src/test/java/org/apache/qpid/disttest/controller/config/JavaScriptConfigEvaluatorTest-test-config.js URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/perftests/src/test/java/org/apache/qpid/disttest/controller/config/JavaScriptConfigEvaluatorTest-test-config.js?rev=1362891&r1=1362890&r2=1362891&view=diff ============================================================================== --- qpid/trunk/qpid/java/perftests/src/test/java/org/apache/qpid/disttest/controller/config/JavaScriptConfigEvaluatorTest-test-config.js (original) +++ qpid/trunk/qpid/java/perftests/src/test/java/org/apache/qpid/disttest/controller/config/JavaScriptConfigEvaluatorTest-test-config.js Wed Jul 18 11:45:01 2012 @@ -1,33 +1,22 @@ jsonObject = { - "_tests": - QPID.iterations( { "__ACK_MODE": [ 0, 1 ] }, + "_countries": + QPID.iterations( { "__ITERATING_VALUE": [ 0, 1 ] }, { // this is a comment - it wouldn't be allowed if this were pure JSON - "_name": "Test 1", - "_queues": [ + "_name": "Country", + "_regions": QPID.times(2, { - "_name": "Json-Queue-Name" - } - ], - - "_clients": QPID.times(2, - { - "_name": "repeatingClient__CLIENT_INDEX", - "_connections": [ + "_name": "repeatingRegion__REGION_INDEX", + "_towns": [ { - "_name": "connection1", - "_sessions": [ - { - "_sessionName": "session1", - "_acknowledgeMode": "__ACK_MODE", - "_consumers": [] - } - ] + "_name": "town1", + "_iteratingAttribute": "__ITERATING_VALUE", + "_consumers": [] } ] }, - "__CLIENT_INDEX" + "__REGION_INDEX" ) }) Modified: qpid/trunk/qpid/java/perftests/src/test/java/org/apache/qpid/disttest/controller/config/JavaScriptConfigEvaluatorTest.java URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/perftests/src/test/java/org/apache/qpid/disttest/controller/config/JavaScriptConfigEvaluatorTest.java?rev=1362891&r1=1362890&r2=1362891&view=diff ============================================================================== --- qpid/trunk/qpid/java/perftests/src/test/java/org/apache/qpid/disttest/controller/config/JavaScriptConfigEvaluatorTest.java (original) +++ qpid/trunk/qpid/java/perftests/src/test/java/org/apache/qpid/disttest/controller/config/JavaScriptConfigEvaluatorTest.java Wed Jul 18 11:45:01 2012 @@ -20,10 +20,10 @@ */ package org.apache.qpid.disttest.controller.config; -import java.io.File; -import java.util.TreeMap; +import static org.apache.commons.beanutils.PropertyUtils.getProperty; -import org.apache.qpid.util.FileUtils; +import java.util.List; +import java.util.TreeMap; import junit.framework.TestCase; @@ -37,30 +37,45 @@ public class JavaScriptConfigEvaluatorTe String rawConfig = new JavaScriptConfigEvaluator().evaluateJavaScript(jsFilePath); - String config = formatForComparison(rawConfig); - assertTrue(config.contains("\"_iterationNumber\":1")); + Object configAsObject = getObject(rawConfig); + + // Tests are produced by the QPID.iterations js function + assertEquals("Unexpected number of countries", 2, getPropertyAsList(configAsObject, "_countries").size()); + + Object country0 = getProperty(configAsObject, "_countries.[0]"); + assertEquals("Unexpected country name", "Country", getProperty(country0, "_name")); + assertEquals("Unexpected country iteration number", 0, getPropertyAsInt(country0, "_iterationNumber")); + + assertEquals("Unexpected number of regions", 2, getPropertyAsList(country0, "_regions").size()); + // Region names are produced by the QPID.times js function + assertEquals("Unexpected region name", "repeatingRegion0", getProperty(country0, "_regions.[0]._name")); + assertEquals("Unexpected region name", "repeatingRegion1", getProperty(country0, "_regions.[1]._name")); + // Iterating attribute are produced by the QPID.iterations js function + assertEquals("Unexpected iterating attribute", "0", getProperty(country0, "_regions.[0]._towns.[0]._iteratingAttribute")); + + Object country1 = getProperty(configAsObject, "_countries.[1]"); + assertEquals("Unexpected country iteration number", 1, getPropertyAsInt(country1, "_iterationNumber")); + assertEquals("Unexpected iterating attribute", "1", getProperty(country1, "_regions.[0]._towns.[0]._iteratingAttribute")); + } - File expectedJsonFile = new File(getClass().getResource("JavaScriptConfigEvaluatorTest-expected-json.json").toURI().getPath()); - String rawExpected = FileUtils.readFileAsString(expectedJsonFile); + private int getPropertyAsInt(Object configAsObject, String property) throws Exception + { + Number propertyValue = (Number) getProperty(configAsObject, property); - String expected = formatForComparison(rawExpected); + return propertyValue.intValue(); + } - assertEquals("Unexpected configuration", expected, config); + private List<?> getPropertyAsList(Object configAsObject, String property) + throws Exception + { + return (List<?>)getProperty(configAsObject, property); } - /** - * Does an unmarshall-then-marshall on the supplied JSON string so that - * we can compare the output when testing for equivalent JSON strings, - * ignoring ordering of attributes. - */ - private String formatForComparison(String jsonStringIn) + private Object getObject(String jsonStringIn) { Gson gson = new Gson(); - @SuppressWarnings("rawtypes") - TreeMap configObj = gson.fromJson(jsonStringIn, TreeMap.class); - - String jsonStringOut = gson.toJson(configObj); - return jsonStringOut; + TreeMap object = gson.fromJson(jsonStringIn, TreeMap.class); + return object; } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
