Hello,
What about making all test that are related to components used only
serially not run in parallel.

Either there’s a sync issue which I don’t think is the case here (file base
is only changed when loading a new file and it doesn’t happen in parallel),
or it’s a test issue (which IMO is the case) ,does running this test in
parallel makes sense ?

Regards

On Friday, December 28, 2018, sebb <seb...@gmail.com> wrote:

> 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(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.
>
> In which case there is likely some other bug that needs investigation.
> Either in the test case or the main JMeter code.
>
> > 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.
>
> > 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>
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> >
>


-- 
Cordialement.
Philippe Mouawad.

Reply via email to