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(FileServ
> > er.j
> > ava:534)
> >      [java]     at
> > org.apache.jmeter.services.FileServer.getResolvedFile(FileServer.ja
> > va:5
> > 31)
> >      [java]     at
> > org.apache.jmeter.functions.FileRowColContainer.load(FileRowColCont
> > aine
> > r.java:78)
> >      [java]     at
> > org.apache.jmeter.functions.FileRowColContainer.<init>(FileRowColCo
> > 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(NativeMethodAccessorImp
> > l.ja
> > va:62)
> >      [java]     at
> > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcc
> > esso
> > rImpl.java:43)
> >      [java]     at java.lang.reflect.Method.invoke(Method.java:498)
> >      [java]     at
> > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(Framewo
> > rkMe
> > thod.java:50)
> >      [java]     at
> > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveC
> > alla
> > ble.java:12)
> >      [java]     at
> > org.junit.runners.model.FrameworkMethod.invokeExplosively(Framework
> > Meth
> > od.java:47)
> >      [java]     at
> > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeM
> > etho
> > d.java:17)
> >      [java]     at
> > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefore
> > s.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(BlockJUnit4ClassR
> > unne
> > r.java:78)
> >      [java]     at
> > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassR
> > unne
> > 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(ThreadPoolExecuto
> > r.ja
> > va:1149)
> >      [java]     at
> > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecut
> > 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.

I could try option b) hoping, that the assumption - that we only use
one script base - holds.

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

Reply via email to