Am Freitag, den 28.12.2018, 17:41 +0000 schrieb sebb: > On Fri, 28 Dec 2018 at 12:59, Felix Schumacher > <felix.schumac...@internetallee.de> wrote: > > > > Am Freitag, den 28.12.2018, 11:32 +0000 schrieb sebb: > > > On Fri, 28 Dec 2018 at 10:35, Felix Schumacher > > > <felix.schumac...@internetallee.de> wrote: > > > > > > > > Am Freitag, den 28.12.2018, 08:24 +0100 schrieb Philippe > > > > Mouawad: > > > > > Hello, > > > > > It seems this commit introduces random failures on nightly > > > > > build: > > > > > > > > > > > > > > > > > > > > > > https://ci.apache.org/builders/jmeter-nightly/builds/1264/steps/shell_5/logs/stdio > > > > > > > > The test fails at > > > > > > > > 1) > > > > testColumns(org.apache.jmeter.functions.TestFileRowColContainer > > > > ) > > > > [java] java.lang.NullPointerException > > > > [java] at > > > > org.apache.jmeter.services.FileServer$FileEntry.access$200(File > > > > Serv > > > > er.j > > > > ava:534) > > > > [java] at > > > > org.apache.jmeter.services.FileServer.getResolvedFile(FileServe > > > > r.ja > > > > va:5 > > > > 31) > > > > [java] at > > > > org.apache.jmeter.functions.FileRowColContainer.load(FileRowCol > > > > Cont > > > > aine > > > > r.java:78) > > > > [java] at > > > > org.apache.jmeter.functions.FileRowColContainer.<init>(FileRowC > > > > olCo > > > > ntai > > > > ner.java:73) > > > > [java] at > > > > org.apache.jmeter.functions.TestFileRowColContainer.testColumns > > > > (Tes > > > > tFil > > > > eRowColContainer.java:91) > > > > [java] at > > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native > > > > Method) > > > > [java] at > > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccesso > > > > rImp > > > > l.ja > > > > va:62) > > > > [java] at > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMetho > > > > dAcc > > > > esso > > > > rImpl.java:43) > > > > [java] at > > > > java.lang.reflect.Method.invoke(Method.java:498) > > > > [java] at > > > > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(Fra > > > > mewo > > > > rkMe > > > > thod.java:50) > > > > [java] at > > > > org.junit.internal.runners.model.ReflectiveCallable.run(Reflect > > > > iveC > > > > alla > > > > ble.java:12) > > > > [java] at > > > > org.junit.runners.model.FrameworkMethod.invokeExplosively(Frame > > > > work > > > > Meth > > > > od.java:47) > > > > [java] at > > > > org.junit.internal.runners.statements.InvokeMethod.evaluate(Inv > > > > okeM > > > > etho > > > > d.java:17) > > > > [java] at > > > > org.junit.internal.runners.statements.RunBefores.evaluate(RunBe > > > > fore > > > > s.ja > > > > va:26) > > > > [java] at > > > > org.junit.internal.runners.statements.RunAfters.evaluate(RunAft > > > > ers. > > > > java > > > > :27) > > > > [java] at > > > > org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) > > > > [java] at > > > > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4Cl > > > > assR > > > > unne > > > > r.java:78) > > > > [java] at > > > > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4Cl > > > > assR > > > > unne > > > > r.java:57) > > > > [java] at > > > > org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) > > > > [java] at > > > > java.util.concurrent.Executors$RunnableAdapter.call(Executors.j > > > > ava: > > > > 511) > > > > [java] at > > > > java.util.concurrent.FutureTask.run(FutureTask.java:266) > > > > [java] at > > > > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExe > > > > cuto > > > > r.ja > > > > va:1149) > > > > [java] at > > > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolEx > > > > ecut > > > > or.j > > > > ava:624) > > > > [java] at java.lang.Thread.run(Thread.java:748) > > > > > > > > Especially the concurrent access makes me believe, that this is > > > > a > > > > problem with the test case and not the implementation. > > > > > > > > Originally this test had no script base set. I added a script > > > > base > > > > before each test and reset it to the one found before after the > > > > test. > > > > > > > > Now, when those tests are run in parallel, it can happen, that > > > > the > > > > first test sets a script base and remembers the original one. > > > > The > > > > next > > > > one starts before the first is finished and remembers the "set" > > > > base. > > > > When this test finishes it will "reset" the script base to the > > > > "set" > > > > base, which would be wrong. > > > > > > > > There are at least two options to get around this: > > > > > > > > a) revert to state before the fix > > > > b) only set the script base and don't reset it after the tests > > > > > > > > I don't want to take option a), but option b) will change the > > > > environment for all tests that run after these tests. > > > > > > > > What is your opionion on this (options plus explanation :) > > > > > > AIUI there is only one script base for the whole of JMeter - is > > > that > > > correct? > > > If so, then it does not make sense to allow tests to run in > > > parallel. > > > > Thats my understanding as well, that all tests basically share one > > script base. > > > > > > > > Each test must be allowed to complete (and tidy up if necessary) > > > before the next one starts. > > > > That is what I tried, but I think it fails in the described manner. > > In which case there is likely some other bug that needs > investigation. > Either in the test case or the main JMeter code.
Well, I thought I described the mistake I made, but it seems, that I didn't do a good enough job. So let me try with a diagram: Thread A Thread B save old script base set new base Save old script base run test set new base reset base run test -> BOOM That is a slight variation of my text version above. So we could get around it by setting the script base for all tests, or make those tests synchronized in some kind of manner. > > > I could try option b) hoping, that the assumption - that we only > > use > > one script base - holds. > > Whether or not there is only one script base should be clear by > inspection of the code. And hope, that that inspection is thorough enough. Regards, Felix > > > Felix > > > > > > > > > Regards, > > > > Felix > > > > > > > > > > > > > > Regards > > > > > > > > > > > > > > > > > > > > > > > > > On Mon, Dec 24, 2018 at 2:13 PM <fschumac...@apache.org> > > > > > wrote: > > > > > > > > > > > Author: fschumacher > > > > > > Date: Mon Dec 24 13:13:31 2018 > > > > > > New Revision: 1849687 > > > > > > > > > > > > URL: http://svn.apache.org/viewvc?rev=1849687&view=rev > > > > > > Log: > > > > > > When using CSVRead search the script base path for files, > > > > > > too. > > > > > > > > > > > > Bugzilla Id: 63037 > > > > > > > > > > > > Modified: > > > > > > > > > > > > jmeter/trunk/src/functions/org/apache/jmeter/functions/File > > > > > > RowC > > > > > > olCo > > > > > > ntainer.java > > > > > > > > > > > > jmeter/trunk/test/src/org/apache/jmeter/functions/TestFileR > > > > > > owCo > > > > > > lCon > > > > > > tainer.java > > > > > > jmeter/trunk/xdocs/changes.xml > > > > > > > > > > > > Modified: > > > > > > jmeter/trunk/src/functions/org/apache/jmeter/functions/File > > > > > > RowC > > > > > > olCo > > > > > > ntainer.java > > > > > > URL: > > > > > > > > > > > > > > > > > > http://svn.apache.org/viewvc/jmeter/trunk/src/functions/org/apache/jmeter/functions/FileRowColContainer.java?rev=1849687&r1=1849686&r2=1849687&view=diff > > > > > > > > > > > > =========================================================== > > > > > > ==== > > > > > > ==== > > > > > > =========== > > > > > > --- > > > > > > jmeter/trunk/src/functions/org/apache/jmeter/functions/File > > > > > > RowC > > > > > > olCo > > > > > > ntainer.java > > > > > > (original) > > > > > > +++ > > > > > > jmeter/trunk/src/functions/org/apache/jmeter/functions/File > > > > > > RowC > > > > > > olCo > > > > > > ntainer.java > > > > > > Mon Dec 24 13:13:31 2018 > > > > > > @@ -19,7 +19,6 @@ > > > > > > package org.apache.jmeter.functions; > > > > > > > > > > > > import java.io.BufferedReader; > > > > > > -import java.io.File; > > > > > > import java.io.FileNotFoundException; > > > > > > import java.io.IOException; > > > > > > import java.nio.charset.Charset; > > > > > > @@ -28,6 +27,7 @@ import java.util.ArrayList; > > > > > > import java.util.List; > > > > > > import java.util.StringTokenizer; > > > > > > > > > > > > +import org.apache.jmeter.services.FileServer; > > > > > > import org.apache.jmeter.util.JMeterUtils; > > > > > > import org.slf4j.Logger; > > > > > > import org.slf4j.LoggerFactory; > > > > > > @@ -75,7 +75,7 @@ public class FileRowColContainer { > > > > > > > > > > > > private void load() throws IOException, > > > > > > FileNotFoundException > > > > > > { > > > > > > try (BufferedReader myBread = > > > > > > - Files.newBufferedReader(new > > > > > > File(fileName).toPath(), > > > > > > + > > > > > > Files.newBufferedReader(FileServer.getFileServer().getResol > > > > > > vedF > > > > > > ile( > > > > > > fileName).toPath(), > > > > > > > > > > > > Charset.defaultCharset())) { > > > > > > String line = myBread.readLine(); > > > > > > /* > > > > > > > > > > > > Modified: > > > > > > jmeter/trunk/test/src/org/apache/jmeter/functions/TestFileR > > > > > > owCo > > > > > > lCon > > > > > > tainer.java > > > > > > URL: > > > > > > > > > > > > > > > > > > http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/apache/jmeter/functions/TestFileRowColContainer.java?rev=1849687&r1=1849686&r2=1849687&view=diff > > > > > > > > > > > > =========================================================== > > > > > > ==== > > > > > > ==== > > > > > > =========== > > > > > > --- > > > > > > jmeter/trunk/test/src/org/apache/jmeter/functions/TestFileR > > > > > > owCo > > > > > > lCon > > > > > > tainer.java > > > > > > (original) > > > > > > +++ > > > > > > jmeter/trunk/test/src/org/apache/jmeter/functions/TestFileR > > > > > > owCo > > > > > > lCon > > > > > > tainer.java > > > > > > Mon Dec 24 13:13:31 2018 > > > > > > @@ -23,9 +23,14 @@ import static org.junit.Assert.assertNot > > > > > > import static org.junit.Assert.assertTrue; > > > > > > import static org.junit.Assert.fail; > > > > > > > > > > > > +import java.io.File; > > > > > > import java.nio.file.NoSuchFileException; > > > > > > > > > > > > import org.apache.jmeter.junit.JMeterTestCase; > > > > > > +import org.apache.jmeter.services.FileServer; > > > > > > +import org.apache.jmeter.util.JMeterUtils; > > > > > > +import org.junit.After; > > > > > > +import org.junit.Before; > > > > > > import org.junit.Test; > > > > > > > > > > > > /** > > > > > > @@ -35,7 +40,20 @@ import org.junit.Test; > > > > > > */ > > > > > > public class TestFileRowColContainer extends > > > > > > JMeterTestCase { > > > > > > > > > > > > - @Test(expected=NoSuchFileException.class) > > > > > > + private String defaultBase = null; > > > > > > + > > > > > > + @Before > > > > > > + public void setUp() { > > > > > > + defaultBase = FileServer.getDefaultBase(); > > > > > > + FileServer.getFileServer().setBase(new > > > > > > File(JMeterUtils.getJMeterHome() + "/bin")); > > > > > > + } > > > > > > + > > > > > > + @After > > > > > > + public void tearDown() { > > > > > > + FileServer.getFileServer().setBase(new > > > > > > File(defaultBase)); > > > > > > + } > > > > > > + > > > > > > + @Test(expected = NoSuchFileException.class) > > > > > > public void testNull() throws Exception { > > > > > > new > > > > > > FileRowColContainer(findTestPath("testfiles/xyzxyz")); > > > > > > } > > > > > > @@ -46,6 +64,20 @@ public class TestFileRowColContainer ext > > > > > > assertNotNull(f); > > > > > > assertEquals("Expected 4 lines", 4, f.getSize()); > > > > > > > > > > > > + assertEquals(0, f.nextRow()); > > > > > > + assertEquals(1, f.nextRow()); > > > > > > + assertEquals(2, f.nextRow()); > > > > > > + assertEquals(3, f.nextRow()); > > > > > > + assertEquals(0, f.nextRow()); > > > > > > + > > > > > > + } > > > > > > + > > > > > > + @Test > > > > > > + public void testRowNumRelative() throws Exception { > > > > > > + FileRowColContainer f = new > > > > > > FileRowColContainer("testfiles/unit/TestFileRowColContainer > > > > > > .csv > > > > > > "); > > > > > > + assertNotNull(f); > > > > > > + assertEquals("Expected 4 lines", 4, f.getSize()); > > > > > > + > > > > > > assertEquals(0, f.nextRow()); > > > > > > assertEquals(1, f.nextRow()); > > > > > > assertEquals(2, f.nextRow()); > > > > > > > > > > > > Modified: jmeter/trunk/xdocs/changes.xml > > > > > > URL: > > > > > > > > > > > > > > > > > > http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1849687&r1=1849686&r2=1849687&view=diff > > > > > > > > > > > > =========================================================== > > > > > > ==== > > > > > > ==== > > > > > > =========== > > > > > > --- jmeter/trunk/xdocs/changes.xml [utf-8] (original) > > > > > > +++ jmeter/trunk/xdocs/changes.xml [utf-8] Mon Dec 24 > > > > > > 13:13:31 > > > > > > 2018 > > > > > > @@ -105,6 +105,7 @@ of previous time slot as a base. > > > > > > Startin > > > > > > > > > > > > <h3>Functions</h3> > > > > > > <ul> > > > > > > + <li><bug>63037</bug>When using <code>CSVRead</code> > > > > > > search > > > > > > the > > > > > > script > > > > > > base path for files, too.</li> > > > > > > </ul> > > > > > > > > > > > > <h3>I18N</h3> > > > > > > > > > > > > > > > > > > > > > > > > > > > >