karate: Scenario Outline with huge Examples amount produces StackOverflowError (v0.9.1)

Hi Peter,

I recently upgraded from v0.8.0.1 to v0.9.1 and now one of my scenario outlines (Examples ~6400 rows) result in an StackOverflowError.

Exception in thread "main" java.lang.StackOverflowError
	at java.lang.String.indexOf(String.java:1503)
	at java.net.URLStreamHandler.parseURL(URLStreamHandler.java:143)
	at sun.net.www.protocol.file.Handler.parseURL(Handler.java:67)
	at java.net.URL.<init>(URL.java:622)
	at java.net.URL.<init>(URL.java:490)
	at sun.misc.URLClassPath$FileLoader.getResource(URLClassPath.java:1259)
	at sun.misc.URLClassPath$FileLoader.findResource(URLClassPath.java:1249)
	at sun.misc.URLClassPath.findResource(URLClassPath.java:215)
	at java.net.URLClassLoader$2.run(URLClassLoader.java:569)
	at java.net.URLClassLoader$2.run(URLClassLoader.java:567)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findResource(URLClassLoader.java:566)
	at java.lang.ClassLoader.getResource(ClassLoader.java:1096)
	at com.intuit.karate.FileUtils.fromRelativeClassPath(FileUtils.java:399)
	at com.intuit.karate.FileUtils.toResource(FileUtils.java:162)
	at com.intuit.karate.FileUtils.getFileStream(FileUtils.java:195)
	at com.intuit.karate.FileUtils.readFileAsString(FileUtils.java:185)
	at com.intuit.karate.FileUtils.readFile(FileUtils.java:107)
	at com.intuit.karate.core.ScriptBridge.read(ScriptBridge.java:81)
	at jdk.nashorn.internal.scripts.Script$Recompilation$6$14A$\^eval\_.L:1(<eval>:1)
	at jdk.nashorn.internal.scripts.Script$5$\^eval\_.:program(<eval>:1)
	at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:637)
	at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494)
	at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)
	at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:449)
	at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:406)
	at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:402)
	at jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:155)
	at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233)
	at com.intuit.karate.ScriptBindings.eval(ScriptBindings.java:147)
	at com.intuit.karate.ScriptBindings.updateBindingsAndEval(ScriptBindings.java:142)
	at com.intuit.karate.ScriptBindings.evalInNashorn(ScriptBindings.java:127)
	at com.intuit.karate.Script.evalJsExpression(Script.java:423)
	at com.intuit.karate.Script.evalKarateExpression(Script.java:337)
	at com.intuit.karate.Script.evalKarateExpression(Script.java:203)
	at com.intuit.karate.Script.call(Script.java:1621)
	at com.intuit.karate.Script.callAndUpdateConfigAndAlsoVarsIfMapReturned(Script.java:1773)
	at com.intuit.karate.core.ScenarioContext.<init>(ScenarioContext.java:237)
	at com.intuit.karate.StepActions.<init>(StepActions.java:52)
	at com.intuit.karate.core.ScenarioExecutionUnit.init(ScenarioExecutionUnit.java:105)
	at com.intuit.karate.core.ScenarioExecutionUnit.run(ScenarioExecutionUnit.java:179)
	at com.intuit.karate.core.FeatureExecutionUnit.lambda$new$1(FeatureExecutionUnit.java:51)
	at com.intuit.karate.core.FeatureExecutionUnit.run(FeatureExecutionUnit.java:123)
	at com.intuit.karate.core.FeatureExecutionUnit.lambda$new$1(FeatureExecutionUnit.java:51)
	at com.intuit.karate.core.FeatureExecutionUnit.lambda$run$2(FeatureExecutionUnit.java:116)
	at com.intuit.karate.core.ScenarioExecutionUnit.run(ScenarioExecutionUnit.java:191)
	at com.intuit.karate.core.ScenarioExecutionUnit.lambda$new$0(ScenarioExecutionUnit.java:66)
	at com.intuit.karate.core.ScenarioExecutionUnit.run(ScenarioExecutionUnit.java:187)
	at com.intuit.karate.core.ScenarioExecutionUnit.lambda$new$0(ScenarioExecutionUnit.java:66)
	at com.intuit.karate.core.ScenarioExecutionUnit.run(ScenarioExecutionUnit.java:187)
	at com.intuit.karate.core.ScenarioExecutionUnit.lambda$new$0(ScenarioExecutionUnit.java:66)
	at com.intuit.karate.core.ScenarioExecutionUnit.run(ScenarioExecutionUnit.java:187)
	at com.intuit.karate.core.ScenarioExecutionUnit.lambda$new$0(ScenarioExecutionUnit.java:66)
	at com.intuit.karate.core.ScenarioExecutionUnit.run(ScenarioExecutionUnit.java:187)
	at com.intuit.karate.core.ScenarioExecutionUnit.lambda$new$0(ScenarioExecutionUnit.java:66)
	at com.intuit.karate.core.ScenarioExecutionUnit.run(ScenarioExecutionUnit.java:187)
	at com.intuit.karate.core.ScenarioExecutionUnit.lambda$new$0(ScenarioExecutionUnit.java:66)
	at com.intuit.karate.core.ScenarioExecutionUnit.run(ScenarioExecutionUnit.java:187)
	at com.intuit.karate.core.ScenarioExecutionUnit.lambda$new$0(ScenarioExecutionUnit.java:66)
	at com.intuit.karate.core.ScenarioExecutionUnit.run(ScenarioExecutionUnit.java:187)
	at com.intuit.karate.core.ScenarioExecutionUnit.lambda$new$0(ScenarioExecutionUnit.java:66)
	at com.intuit.karate.core.ScenarioExecutionUnit.run(ScenarioExecutionUnit.java:187)
	at com.intuit.karate.core.FeatureExecutionUnit.lambda$new$1(FeatureExecutionUnit.java:51)
	at com.intuit.karate.core.FeatureExecutionUnit.run(FeatureExecutionUnit.java:123)
        ...

I attached a maven skeleton project (bugtest.zip) including a feature where the error can be easily reproduced. The example scenario outline doesn’t do anything beside assigning the row values of the example table to variables in the scenario.

@parallel=false
Feature: StackOverflow Test

  Scenario Outline: Produce StackOverflow

    * def col1 = <test1>
    * def col2 = <test2>
    * def col3 = <test3>
    * def col4 = <test4>
    * def col5 = <test5>
    * def col6 = <test6>
    * def col7 = <test7>

    * print col1

    Examples:
      | test1  | test2 | test3  | test4  | test5 | test6 | test7 |
      |'ADD'| 'ADD'| 'ADD'| 'ADD'| 'ADD'| 'MODIFY'| 'invalid'|
      |'ADD'| 'ADD'| 'ADD'| 'ADD'| 'ADD'| 'UNMODIFIED'| 'invalid'|
      |'ADD'| 'ADD'| 'ADD'| 'ADD'| 'ADD'| 'DELETE'| 'invalid'|
      |'ADD'| 'ADD'| 'ADD'| 'ADD'| 'MODIFY'| 'ADD'| 'invalid'|
      ...and so on...

This Error does not occure with v0.8.0.1. Please let me know if you need further information.

Keep up the good work, Peter!

About this issue

  • Original URL
  • State: closed
  • Created 5 years ago
  • Comments: 20 (11 by maintainers)

Commits related to this issue

Most upvoted comments

@ptrthomas It works like charm! Thank you, Peter!

@backfloep wow. who would have thought

okay, try this, can you add a @parallel=false tag for the Scenario Outline and try again