From 8271bb84788e8a8d026587f943bcd1fb5cce5df3 Mon Sep 17 00:00:00 2001 From: coderfengyun Date: Mon, 14 Apr 2014 16:48:56 +0800 Subject: [PATCH] now i can compile the param in the way of DFA support now i can compile the param in the way of DFA support --- .../org/bench4q/agent/scenario/Parameter.java | 19 +++ .../org/bench4q/agent/scenario/VUser.java | 5 + .../agent/scenario/behavior/Behavior.java | 6 + .../org/bench4q/agent/scenario/dfa/DFA.java | 114 ++++++++++++++++++ .../bench4q/agent/scenario/dfa/ParamPart.java | 65 ++++++++++ .../bench4q/agent/utils/ParameterParser.java | 2 +- .../bench4q/agent/test/scenario/Test_DFA.java | 94 +++++++++++++++ relative Docs/取参数状态机.vsdx | Bin 38901 -> 38875 bytes 8 files changed, 304 insertions(+), 1 deletion(-) create mode 100644 Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/dfa/DFA.java create mode 100644 Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/dfa/ParamPart.java create mode 100644 Bench4Q-Agent/src/test/java/org/bench4q/agent/test/scenario/Test_DFA.java diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/Parameter.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/Parameter.java index 10785505..1a097408 100644 --- a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/Parameter.java +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/Parameter.java @@ -1,8 +1,14 @@ package org.bench4q.agent.scenario; +import java.util.List; + +import org.bench4q.agent.scenario.dfa.DFA; +import org.bench4q.agent.scenario.dfa.ParamPart; + public class Parameter { private String key; private String value; + private ParamPart[] paramParts; public String getKey() { return key; @@ -20,4 +26,17 @@ public class Parameter { this.value = value; } + public ParamPart[] getParamParts() { + return paramParts; + } + + private void setParamParts(ParamPart[] paramParts) { + this.paramParts = paramParts; + } + + public void compileToGenerateParts() { + List paramParts = DFA.resolveMaltipleParamPart(this + .getValue()); + this.setParamParts(paramParts.toArray(new ParamPart[paramParts.size()])); + } } diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/VUser.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/VUser.java index b5b97877..d085bf06 100644 --- a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/VUser.java +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/VUser.java @@ -153,11 +153,16 @@ public class VUser implements Runnable { private Map prepareBehaviorParameters(Behavior behavior) { Map behaviorParameters = new HashMap(); for (Parameter parameter : behavior.getParameters()) { + compile(parameter.getValue()); behaviorParameters.put(parameter.getKey(), parameter.getValue()); } return behaviorParameters; } + private void compile(String value) { + // TODO: Add the state pattern to this and parse the value + } + private void preparePlugins(Scenario scenario, Map plugins) { for (UsePlugin usePlugin : scenario.getUsePlugins()) { String pluginId = usePlugin.getId(); diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/behavior/Behavior.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/behavior/Behavior.java index 80142d7a..81211001 100644 --- a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/behavior/Behavior.java +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/behavior/Behavior.java @@ -59,6 +59,12 @@ public abstract class Behavior { return ""; } + public void compile() { + for (Parameter parameter : this.getParameters()) { + parameter.compileToGenerateParts(); + } + } + public void distillParams(SessionObject session) { for (Parameter parameter : this.getParameters()) { String s = parameter.getValue(); diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/dfa/DFA.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/dfa/DFA.java new file mode 100644 index 00000000..7c705e71 --- /dev/null +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/dfa/DFA.java @@ -0,0 +1,114 @@ +package org.bench4q.agent.scenario.dfa; + +import java.util.LinkedList; +import java.util.List; + +import org.bench4q.agent.scenario.dfa.ParamPart.ParamPartType; +import org.bench4q.agent.utils.ParameterParser; + +public class DFA { + + public static List resolveMaltipleParamPart( + String paramOriginValue) { + List result; + StringBuilder buf1; + StringBuilder buf2; + int state; + ParamPart part; + char c; + + result = new LinkedList(); + buf1 = new StringBuilder(); + buf2 = new StringBuilder(); + state = 0; + loop: for (int i = 0, len = paramOriginValue.length(); i < len; i++) { + c = paramOriginValue.charAt(i); + switch (state) { + case 0: /* Literal string */ + switch (c) { + case '$': + if (buf1.length() > 0) { + part = new ParamPart(); + part.setType(ParamPartType.STRING); + part.setContentForStringType(buf1.toString()); + result.add(part); + buf1.setLength(0); + } + state = 2; + continue; + default: + buf1.append(c); + continue; + } + // no more state == 1 (irrelevantly used for "escape sequence") + case 2: /* Context call */ + switch (c) { + case '#': + part = new ParamPart(); + part.setType(ParamPartType.SESSION_ID); + result.add(part); + state = 0; + continue; + case '{': + state = 3; + continue; + case '$': /* $$ is the escape sequence for $ */ + buf1.append(c); + state = 0; + continue; + default: /* Syntax error */ + break loop; + } + case 3: /* plugInId */ + switch (c) { + case ':': + state = 4; + continue; + case '{': + break loop; + case '}': /* no ':' means system property */ + part = new ParamPart(); + part.setType(ParamPartType.PROPERTY); + part.setPluginIdForContextCallType(null); + part.setVariableForContextCallAndProperty(ParameterParser + .unescape(buf1.toString())); + result.add(part); + buf1.setLength(0); + state = 0; + continue; + default: + buf1.append(c); + continue; + } + case 4: /* Variable */ + switch (c) { + case '}': + part = new ParamPart(); + part.setType(ParamPartType.CONTEXT_CALL); + part.setPluginIdForContextCallType(ParameterParser + .unescape(buf1.toString())); + part.setVariableForContextCallAndProperty(ParameterParser + .unescape(buf2.toString())); + result.add(part); + buf1.setLength(0); + buf2.setLength(0); + state = 0; + continue; + case '{': /* Syntax error */ + break loop; + default: + buf2.append(c); + continue; + } + } + } + if (state == 0 && buf1.length() > 0) { + part = new ParamPart(); + part.setType(ParamPartType.STRING); + part.setContentForStringType(buf1.toString()); + result.add(part); + } + return result; + } + +} diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/dfa/ParamPart.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/dfa/ParamPart.java new file mode 100644 index 00000000..c6cf19e5 --- /dev/null +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/scenario/dfa/ParamPart.java @@ -0,0 +1,65 @@ +package org.bench4q.agent.scenario.dfa; + +public class ParamPart { + public static enum ParamPartType { + STRING, SESSION_ID, CONTEXT_CALL, PROPERTY + } + + private ParamPartType type; + private String contentForStringType; + private String pluginIdForContextCallType; + private String variableForContextCallAndProperty; + + public ParamPartType getType() { + return type; + } + + public void setType(ParamPartType type) { + this.type = type; + } + + public String getContentForStringType() { + return contentForStringType; + } + + public void setContentForStringType(String contentForStringType) { + this.contentForStringType = contentForStringType; + } + + public String getPluginIdForContextCallType() { + return pluginIdForContextCallType; + } + + public void setPluginIdForContextCallType(String pluginIdForContextCallType) { + this.pluginIdForContextCallType = pluginIdForContextCallType; + } + + public String getVariableForContextCallAndProperty() { + return variableForContextCallAndProperty; + } + + public void setVariableForContextCallAndProperty( + String variableForContextCallAndProperty) { + this.variableForContextCallAndProperty = variableForContextCallAndProperty; + } + + @Override + public String toString() { + switch (type) { + case STRING: + return this.contentForStringType; + case SESSION_ID: + return "$#"; + case CONTEXT_CALL: + return "${" + this.pluginIdForContextCallType + ":" + + this.variableForContextCallAndProperty + "}"; + case PROPERTY: + return "${" + this.variableForContextCallAndProperty + "}"; + default: + return "Plug-in parameter part " + this.contentForStringType + "/" + + this.pluginIdForContextCallType + "/" + + this.variableForContextCallAndProperty + + " has an unspecified type " + type.toString(); + } + } +} diff --git a/Bench4Q-Agent/src/main/java/org/bench4q/agent/utils/ParameterParser.java b/Bench4Q-Agent/src/main/java/org/bench4q/agent/utils/ParameterParser.java index ba876655..d45c991b 100644 --- a/Bench4Q-Agent/src/main/java/org/bench4q/agent/utils/ParameterParser.java +++ b/Bench4Q-Agent/src/main/java/org/bench4q/agent/utils/ParameterParser.java @@ -101,7 +101,7 @@ public abstract class ParameterParser { * the string where some characters are escaped by '\' character * @return the unescaped string */ - static String unescape(String value) { + public static String unescape(String value) { StringBuilder result = new StringBuilder(); char c; boolean escape = false; // escape sequence diff --git a/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/scenario/Test_DFA.java b/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/scenario/Test_DFA.java new file mode 100644 index 00000000..8a3e5477 --- /dev/null +++ b/Bench4Q-Agent/src/test/java/org/bench4q/agent/test/scenario/Test_DFA.java @@ -0,0 +1,94 @@ +package org.bench4q.agent.test.scenario; + +import static org.junit.Assert.*; + +import java.util.List; + +import org.bench4q.agent.scenario.dfa.DFA; +import org.bench4q.agent.scenario.dfa.ParamPart; +import org.bench4q.agent.scenario.dfa.ParamPart.ParamPartType; +import org.junit.Test; + +public class Test_DFA { + private static final String TEST_CASE = "${csvProvider0:userName}"; + private static final String TEST_CASE2 = "${csvProvider0:userName}$#"; + private static final String TEST_CASE3 = "${csvProvider0:userName}$#okOrNot"; + private static final String TEST_CASE4 = "${csvProvider0:userName}$#okOrNot${file.separator}"; + + @Test + public void test_resolveMaltipleParamPart_WithOnePluginIdVariable() { + List result = DFA.resolveMaltipleParamPart(TEST_CASE); + assertEquals(1, result.size()); + assertEquals("csvProvider0", result.get(0) + .getPluginIdForContextCallType()); + assertEquals("userName", result.get(0) + .getVariableForContextCallAndProperty()); + assertNull(result.get(0).getContentForStringType()); + } + + @Test + public void test_resolveMaltipleParamPart_WithOnePluginIdVariable_AND_OneSessionID() { + List result = DFA.resolveMaltipleParamPart(TEST_CASE2); + assertEquals(2, result.size()); + assertEquals("csvProvider0", result.get(0) + .getPluginIdForContextCallType()); + assertEquals(ParamPartType.CONTEXT_CALL, result.get(0).getType()); + assertEquals("userName", result.get(0) + .getVariableForContextCallAndProperty()); + assertNull(result.get(0).getContentForStringType()); + assertEquals(ParamPartType.SESSION_ID, result.get(1).getType()); + assertNull(result.get(1).getContentForStringType()); + assertNull(result.get(1).getPluginIdForContextCallType()); + assertNull(result.get(1).getVariableForContextCallAndProperty()); + } + + @Test + public void test_resolveMaltipleParamPart_WithOnePluginIdVariable_AND_OneSessionID_And_PlainString() { + List result = DFA.resolveMaltipleParamPart(TEST_CASE3); + assertEquals(3, result.size()); + assertEquals("csvProvider0", result.get(0) + .getPluginIdForContextCallType()); + assertEquals(ParamPartType.CONTEXT_CALL, result.get(0).getType()); + assertEquals("userName", result.get(0) + .getVariableForContextCallAndProperty()); + assertNull(result.get(0).getContentForStringType()); + + assertEquals(ParamPartType.SESSION_ID, result.get(1).getType()); + assertNull(result.get(1).getContentForStringType()); + assertNull(result.get(1).getPluginIdForContextCallType()); + assertNull(result.get(1).getVariableForContextCallAndProperty()); + + assertEquals(ParamPartType.STRING, result.get(2).getType()); + assertNull(result.get(2).getPluginIdForContextCallType()); + assertNull(result.get(2).getVariableForContextCallAndProperty()); + assertEquals("okOrNot", result.get(2).getContentForStringType()); + } + + @Test + public void test_resolveMaltipleParamPart_WithOnePluginIdVariable_AND_OneSessionID_And_PlainString_AND_Property() { + List result = DFA.resolveMaltipleParamPart(TEST_CASE4); + assertEquals(4, result.size()); + assertEquals("csvProvider0", result.get(0) + .getPluginIdForContextCallType()); + assertEquals(ParamPartType.CONTEXT_CALL, result.get(0).getType()); + assertEquals("userName", result.get(0) + .getVariableForContextCallAndProperty()); + assertNull(result.get(0).getContentForStringType()); + + assertEquals(ParamPartType.SESSION_ID, result.get(1).getType()); + assertNull(result.get(1).getContentForStringType()); + assertNull(result.get(1).getPluginIdForContextCallType()); + assertNull(result.get(1).getVariableForContextCallAndProperty()); + + assertEquals(ParamPartType.STRING, result.get(2).getType()); + assertNull(result.get(2).getPluginIdForContextCallType()); + assertNull(result.get(2).getVariableForContextCallAndProperty()); + assertEquals("okOrNot", result.get(2).getContentForStringType()); + + assertEquals(ParamPartType.PROPERTY, result.get(3).getType()); + assertNull(result.get(3).getPluginIdForContextCallType()); + assertNull(result.get(3).getContentForStringType()); + assertEquals("file.separator", result.get(3) + .getVariableForContextCallAndProperty()); + } +} diff --git a/relative Docs/取参数状态机.vsdx b/relative Docs/取参数状态机.vsdx index 265a8ee660b682d0cd3c3399d6bbc38aaab49b5f..0604fcf9b204185f22181fbbf9c6287a23a4ad02 100644 GIT binary patch delta 16523 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 delta 16535 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 N^{M1gWeNWg{a?hRn+pH{