Bug 53749 - TestListener interface could perhaps be split up
TestListener interface could perhaps be split up
Status: RESOLVED FIXED
Product: JMeter
Classification: Unclassified
Component: Main
unspecified
All All
: P2 enhancement (vote)
: ---
Assigned To: JMeter issues mailing list
:
Depends on:
Blocks:
  Show dependency tree
 
Reported: 2012-08-20 22:30 UTC by Sebb
Modified: 2012-08-22 22:58 UTC (History)
1 user (show)



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sebb 2012-08-20 22:30:54 UTC
The TestListener interface includes the following method names

testStarted
testEnded
testIterationStart

Now testIterationStart is rather different from testStarted/testEnded; it is called much more frequently, and is probably much less used.

So it might make more sense to split the interface into two super-interfaces.

This would allow classes to drop testIterationStart if they don't need it, and allow (for example) JMeterThread to only store references to code that actually needs to implement testIterationStart.
Comment 1 Philippe Mouawad 2012-08-21 23:31:11 UTC
Should we close this one ?
Comment 2 Sebb 2012-08-22 00:05:12 UTC
(In reply to comment #1)
> Should we close this one ?

No.

I hit an initial problem, but I'm still hopeful it can be resolved.

For reference, the issue is:

The code that implements the interface behaviour currently only looks for TestListener. 
All the code needs to be updated to look for the new interfaces instead; this involves quite a lot of classes. So far I have found:

ConvertListeners
StandardJMeterEngine
FunctionParser
RemoteSamplerListenerImpl
ProxyControl

There may perhaps be some other processing I've yet to find.

I created separate threadStart/threadEnded interfaces, as some classes only need one or the other, but then realised that makes the Remote classes tricky to update.

At that point I decided to revert the initial changes.

Further investigation shows that the Remote code does not support testIterationStart currently, which should make the implementation much easier.
[It would be expensive in network bandwidth, but luckily none of the Remoteable classes need to use it]
Comment 3 Sebb 2012-08-22 10:11:03 UTC
Just done a check. 

There are about 40 implementations of testIterationStart, only 4 of which have any code; the rest are required because of the interface.

One of the real implementations - RemoteSampleListenerImpl.testIterationStart - is probably redundant anyway because TIS has not been implemented for client-server.
Comment 4 Sebb 2012-08-22 22:58:57 UTC
Fixed in SVN:

URL: http://svn.apache.org/viewvc?rev=1376300&view=rev
Log:
TestListener interface could perhaps be split up.
Bugzilla Id: 53749

Added:
    jmeter/trunk/src/core/org/apache/jmeter/testelement/TestIterationListener.java   (with props)
    jmeter/trunk/src/core/org/apache/jmeter/testelement/TestListener.java
      - copied, changed from r1375825, jmeter/trunk/src/core/org/apache/jmeter/testelement/TestListener.java
    jmeter/trunk/src/core/org/apache/jmeter/testelement/TestStateListener.java   (with props)
Modified:
    jmeter/trunk/src/components/org/apache/jmeter/config/KeystoreConfig.java
    jmeter/trunk/src/components/org/apache/jmeter/control/ThroughputController.java
    jmeter/trunk/src/components/org/apache/jmeter/timers/ConstantThroughputTimer.java
    jmeter/trunk/src/components/org/apache/jmeter/timers/SyncTimer.java
    jmeter/trunk/src/core/org/apache/jmeter/JMeter.java
    jmeter/trunk/src/core/org/apache/jmeter/engine/ConvertListeners.java
    jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
    jmeter/trunk/src/core/org/apache/jmeter/engine/util/FunctionParser.java
    jmeter/trunk/src/core/org/apache/jmeter/gui/MainFrame.java
    jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultCollector.java
    jmeter/trunk/src/core/org/apache/jmeter/reporters/Summariser.java
    jmeter/trunk/src/core/org/apache/jmeter/samplers/RemoteListenerWrapper.java
    jmeter/trunk/src/core/org/apache/jmeter/samplers/RemoteSampleListenerImpl.java
    jmeter/trunk/src/core/org/apache/jmeter/samplers/RemoteTestListenerWrapper.java
    jmeter/trunk/src/core/org/apache/jmeter/testelement/TestPlan.java
    jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterThread.java
    jmeter/trunk/src/core/org/apache/jmeter/util/BeanShellTestElement.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/StringFromFile.java
    jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/CacheManager.java
    jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/CookieManager.java
    jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/modifier/ParamModifier.java
    jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/ProxyControl.java
    jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
    jmeter/trunk/src/protocol/java/org/apache/jmeter/protocol/java/sampler/JavaSampler.java
    jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/AbstractJDBCTestElement.java
    jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/config/DataSourceElement.java
    jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/JMSSampler.java
    jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/PublisherSampler.java
    jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/SubscriberSampler.java
    jmeter/trunk/src/protocol/ldap/org/apache/jmeter/protocol/ldap/sampler/LDAPExtSampler.java
    jmeter/trunk/src/reports/org/apache/jmeter/testelement/ReportPlan.java
    jmeter/trunk/xdocs/changes.xml