You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@daffodil.apache.org by "Michael Beckerle (JIRA)" <ji...@apache.org> on 2019/06/21 14:42:00 UTC

[jira] [Updated] (DAFFODIL-1300) Fix Test Scala files to not create the test suite repeatedly

     [ https://issues.apache.org/jira/browse/DAFFODIL-1300?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Michael Beckerle updated DAFFODIL-1300:
---------------------------------------
    Labels: beginner  (was: )

> Fix Test Scala files to not create the test suite repeatedly
> ------------------------------------------------------------
>
>                 Key: DAFFODIL-1300
>                 URL: https://issues.apache.org/jira/browse/DAFFODIL-1300
>             Project: Daffodil
>          Issue Type: Improvement
>          Components: QA
>            Reporter: Michael Beckerle
>            Priority: Major
>              Labels: beginner
>
> Running tests seemed to be awfully slow.
> So I learned today that for every single test case line in our test scala files (e.g, TestFacets.scala), it reloads the entire test suite TDML from scratch. This makes the tests much slower of course, particularly so for the large TDML files (Functions.tdml for example).
> The fix to this is to look at how TestFacets.scala is now (just pushed to 1.1.0 branch). 
> This is the recipe for loading up the test suite exactly once, but also releasing it at the end of the job so that these things don't build up endlessly in memory. Basically, all those variables that hold the test runner objects, all those go in the associated peer object, not in the test class. 
> E.g., from TestFacets.scala:
> object TestFacets {
>   val testDir = "/edu/illinois/ncsa/daffodil/section05/facets/"
>   val aa = testDir + "Facets.tdml"
>   var runner = new DFDLTestSuite(Misc.getRequiredResource(aa), 
>                                                         validateTDMLFile = false, validateDFDLSchemas = false)
>   /**
>    * Avoid memory leak of adding more and more test suites to static objects as we run more and more test suites.
>    */
>   @AfterClass def tearDown() { runner = null }
> }
> class TestFacets {
>   import TestFacets._  // Imports all of the definitions in the object so we don't have to edit the test lines.
>   @Test def test_minMaxInExdateTime01() { runner.runOneTest("minMaxInExdateTime01") }
>   ...
> }
> Tests run much faster once this is done.
> For now I have retained noisy messages which illustrate how often we are reloading the TDML files to construct the test suite objects. 
> There are also warnings to stderr for duplicate test cases in the same tdml file -(see JIRA Ticket DFDL-1298 and DFDL-1299. )
> We should make a pass and fix all the TDML running scala test files to use this technique.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)