Author: pmouawad
Date: Sun Jun 11 20:57:38 2017
New Revision: 1798405
URL: http://svn.apache.org/viewvc?rev=1798405&view=rev
Log:
Allow to use variables ( from User Defined Variables only ) in all listeners in
slave mode
Try to secure exposed JMeterVariables
Bugzilla Id: 57962
Added:
jmeter/trunk/src/core/org/apache/jmeter/threads/UnmodifiableJMeterVariables.java
(with props)
Modified:
jmeter/trunk/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java
jmeter/trunk/src/core/org/apache/jmeter/engine/PreCompiler.java
jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterContext.java
jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterContextService.java
Modified: jmeter/trunk/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java
URL:
http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java?rev=1798405&r1=1798404&r2=1798405&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java
(original)
+++ jmeter/trunk/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java Sun
Jun 11 20:57:38 2017
@@ -112,7 +112,9 @@ public class ClientJMeterEngine implemen
HashTree testTree = test;
synchronized(testTree) {
- testTree.traverse(new PreCompiler(true)); // limit the changes to
client only test elements
+ PreCompiler compiler = new PreCompiler(true);
+ testTree.traverse(compiler); // limit the changes to client only
test elements
+
JMeterContextService.initClientSideVariables(compiler.getClientSideVariables());
testTree.traverse(new TurnElementsOn());
testTree.traverse(new ConvertListeners());
}
Modified: jmeter/trunk/src/core/org/apache/jmeter/engine/PreCompiler.java
URL:
http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/engine/PreCompiler.java?rev=1798405&r1=1798404&r2=1798405&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/engine/PreCompiler.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/engine/PreCompiler.java Sun Jun 11
20:57:38 2017
@@ -48,6 +48,8 @@ public class PreCompiler implements Hash
// as only these are relevant to the client, and updating
// other elements causes all sorts of problems.
private final boolean isClientSide; // skip certain processing for remote
tests
+
+ private JMeterVariables clientSideVariables;
public PreCompiler() {
replacer = new ValueReplacer();
@@ -72,15 +74,13 @@ public class PreCompiler implements Hash
}
if (node instanceof TestPlan) {
- JMeterVariables vars = createVars((TestPlan)node);
- // Don't store variable of test plan in the context for client
side
- JMeterContextService.setClientVariables(vars);
+ this.clientSideVariables = createVars((TestPlan)node);
}
if (node instanceof Arguments) {
// Don't store User Defined Variables in the context for
client side
Map<String, String> args = createArgumentsMap((Arguments)
node);
- JMeterContextService.getClientVariables().putAll(args);
+ clientSideVariables.putAll(args);
}
} else {
@@ -139,4 +139,11 @@ public class PreCompiler implements Hash
@Override
public void processPath() {
}
+
+ /**
+ * @return the clientSideVariables
+ */
+ public JMeterVariables getClientSideVariables() {
+ return clientSideVariables;
+ }
}
Modified: jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterContext.java
URL:
http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterContext.java?rev=1798405&r1=1798404&r2=1798405&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterContext.java
(original)
+++ jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterContext.java Sun Jun
11 20:57:38 2017
@@ -80,7 +80,9 @@ public class JMeterContext {
*/
public JMeterVariables getVariables() {
// If context variable is null ( Client side ) return client variables
- return (variables == null) ? JMeterContextService.getClientVariables()
: variables;
+ return (variables != null) ?
+ variables :
+ JMeterContextService.getClientSideVariables();
}
public void setVariables(JMeterVariables vars) {
Modified:
jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterContextService.java
URL:
http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterContextService.java?rev=1798405&r1=1798404&r2=1798405&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterContextService.java
(original)
+++ jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterContextService.java
Sun Jun 11 20:57:38 2017
@@ -47,7 +47,7 @@ public final class JMeterContextService
//@GuardedGy("this")
private static int totalThreads = 0;
- private static JMeterVariables variables = null;
+ private static UnmodifiableJMeterVariables variables;
/**
@@ -169,19 +169,12 @@ public final class JMeterContextService
/**
* Get all variables accessible for JMeter client in a distributed test
* (only test plan and user defined variables)
+ * Note this is a read-only collection
* @return {@link JMeterVariables} available for JMeter client
*/
- public static JMeterVariables getClientVariables() {
+ public static JMeterVariables getClientSideVariables() {
return variables;
}
-
- /**
- * Set variables for JMeter client in a distributed test
- * @param var {@link JMeterVariables}
- */
- public static void setClientVariables(JMeterVariables var) {
- variables = var;
- }
public static class ThreadCounts {
@@ -197,4 +190,12 @@ public final class JMeterContextService
finishedThreads = finished;
}
}
+
+ /**
+ * Set variables for JMeter client in a distributed test (INTERNAL API)
+ * @param clientSideVariables {@link JMeterVariables}
+ */
+ public static void initClientSideVariables(JMeterVariables
clientSideVariables) {
+ JMeterContextService.variables = new
UnmodifiableJMeterVariables(clientSideVariables);
+ }
}
Added:
jmeter/trunk/src/core/org/apache/jmeter/threads/UnmodifiableJMeterVariables.java
URL:
http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/threads/UnmodifiableJMeterVariables.java?rev=1798405&view=auto
==============================================================================
---
jmeter/trunk/src/core/org/apache/jmeter/threads/UnmodifiableJMeterVariables.java
(added)
+++
jmeter/trunk/src/core/org/apache/jmeter/threads/UnmodifiableJMeterVariables.java
Sun Jun 11 20:57:38 2017
@@ -0,0 +1,150 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.jmeter.threads;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Readonly wrapper around {@link JMeterVariables}
+ * @since 3.3
+ */
+class UnmodifiableJMeterVariables extends JMeterVariables {
+ private JMeterVariables variables;
+ /**
+ *
+ */
+ public UnmodifiableJMeterVariables(JMeterVariables variables) {
+ this.variables = variables;
+ }
+ /**
+ * @return
+ * @see java.lang.Object#hashCode()
+ */
+ public int hashCode() {
+ return variables.hashCode();
+ }
+ /**
+ * @return
+ * @see org.apache.jmeter.threads.JMeterVariables#getThreadName()
+ */
+ public String getThreadName() {
+ return variables.getThreadName();
+ }
+ /**
+ * @return
+ * @see org.apache.jmeter.threads.JMeterVariables#getIteration()
+ */
+ public int getIteration() {
+ return variables.getIteration();
+ }
+ /**
+ *
+ * @see org.apache.jmeter.threads.JMeterVariables#incIteration()
+ */
+ public void incIteration() {
+ throw new UnsupportedOperationException();
+ }
+ /**
+ * @param key
+ * @return
+ * @see org.apache.jmeter.threads.JMeterVariables#remove(java.lang.String)
+ */
+ public Object remove(String key) {
+ throw new UnsupportedOperationException();
+ }
+ /**
+ * @param key
+ * @param value
+ * @see org.apache.jmeter.threads.JMeterVariables#put(java.lang.String,
java.lang.String)
+ */
+ public void put(String key, String value) {
+ throw new UnsupportedOperationException();
+ }
+ /**
+ * @param key
+ * @param value
+ * @see
org.apache.jmeter.threads.JMeterVariables#putObject(java.lang.String,
java.lang.Object)
+ */
+ public void putObject(String key, Object value) {
+ throw new UnsupportedOperationException();
+ }
+ /**
+ * @param vars
+ * @see org.apache.jmeter.threads.JMeterVariables#putAll(java.util.Map)
+ */
+ public void putAll(Map<String, ?> vars) {
+ throw new UnsupportedOperationException();
+ }
+ /**
+ * @param vars
+ * @see
org.apache.jmeter.threads.JMeterVariables#putAll(org.apache.jmeter.threads.JMeterVariables)
+ */
+ public void putAll(JMeterVariables vars) {
+ throw new UnsupportedOperationException();
+ }
+ /**
+ * @param key
+ * @return
+ * @see org.apache.jmeter.threads.JMeterVariables#get(java.lang.String)
+ */
+ public String get(String key) {
+ return variables.get(key);
+ }
+ /**
+ * @param obj
+ * @return
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals(Object obj) {
+ return variables.equals(obj);
+ }
+ /**
+ * @param key
+ * @return
+ * @see
org.apache.jmeter.threads.JMeterVariables#getObject(java.lang.String)
+ */
+ public Object getObject(String key) {
+ return variables.getObject(key);
+ }
+ /**
+ * @return
+ * @see org.apache.jmeter.threads.JMeterVariables#getIterator()
+ */
+ public Iterator<Entry<String, Object>> getIterator() {
+ return variables.getIterator();
+ }
+ /**
+ * @return
+ * @see org.apache.jmeter.threads.JMeterVariables#entrySet()
+ */
+ public Set<Entry<String, Object>> entrySet() {
+ return variables.entrySet();
+ }
+ /**
+ * @return
+ * @see java.lang.Object#toString()
+ */
+ public String toString() {
+ return variables.toString();
+ }
+
+}
Propchange:
jmeter/trunk/src/core/org/apache/jmeter/threads/UnmodifiableJMeterVariables.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
jmeter/trunk/src/core/org/apache/jmeter/threads/UnmodifiableJMeterVariables.java
------------------------------------------------------------------------------
svn:mime-type = text/plain