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(FileServer.j
ava:534)
     [java]     at
org.apache.jmeter.services.FileServer.getResolvedFile(FileServer.java:5
31)
     [java]     at
org.apache.jmeter.functions.FileRowColContainer.load(FileRowColContaine
r.java:78)
     [java]     at
org.apache.jmeter.functions.FileRowColContainer.<init>(FileRowColContai
ner.java:73)
     [java]     at
org.apache.jmeter.functions.TestFileRowColContainer.testColumns(TestFil
eRowColContainer.java:91)
     [java]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
     [java]     at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.ja
va:62)
     [java]     at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccesso
rImpl.java:43)
     [java]     at java.lang.reflect.Method.invoke(Method.java:498)
     [java]     at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMe
thod.java:50)
     [java]     at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCalla
ble.java:12)
     [java]     at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMeth
od.java:47)
     [java]     at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMetho
d.java:17)
     [java]     at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.ja
va:26)
     [java]     at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java
:27)
     [java]     at
org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
     [java]     at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunne
r.java:78)
     [java]     at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunne
r.java:57)
     [java]     at
org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
     [java]     at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
     [java]     at
java.util.concurrent.FutureTask.run(FutureTask.java:266)
     [java]     at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.ja
va:1149)
     [java]     at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.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 :)

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/FileRowColCo
> > ntainer.java
> > 
> > jmeter/trunk/test/src/org/apache/jmeter/functions/TestFileRowColCon
> > tainer.java
> >     jmeter/trunk/xdocs/changes.xml
> > 
> > Modified:
> > jmeter/trunk/src/functions/org/apache/jmeter/functions/FileRowColCo
> > 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/FileRowColCo
> > ntainer.java
> > (original)
> > +++
> > jmeter/trunk/src/functions/org/apache/jmeter/functions/FileRowColCo
> > 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().getResolvedFile(
> > fileName).toPath(),
> > 
> >                          Charset.defaultCharset())) {
> >              String line = myBread.readLine();
> >              /*
> > 
> > Modified:
> > jmeter/trunk/test/src/org/apache/jmeter/functions/TestFileRowColCon
> > 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/TestFileRowColCon
> > tainer.java
> > (original)
> > +++
> > jmeter/trunk/test/src/org/apache/jmeter/functions/TestFileRowColCon
> > 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>
> > 
> > 
> > 
> 
> 

Reply via email to