refactor
This commit is contained in:
coderfengyun 2014-07-07 09:08:02 +08:00
parent 0a4a96559a
commit f6bb5384cd
8 changed files with 200 additions and 58 deletions

View File

@ -245,12 +245,12 @@ public class ScenarioResultCollector extends AbstractDataCollector {
+ new SimpleDateFormat("hhmm") + ".txt";
}
public void add(PageResult pageResult) {
public synchronized void add(PageResult pageResult) {
this.getPageResultCollector().add(pageResult);
}
@Override
public void add(BehaviorResult behaviorResult) {
public synchronized void add(BehaviorResult behaviorResult) {
super.add(behaviorResult);
statisticScenarioBriefResult(behaviorResult);
statisticBehaviorBriefResult(behaviorResult);

View File

@ -18,7 +18,11 @@ import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoOptions;
import com.mongodb.ServerAddress;
@SuppressWarnings("deprecation")
@Plugin("MongoDBPlugin")
public class MongoDBPlugin {
private final String hostName;
@ -36,14 +40,15 @@ public class MongoDBPlugin {
this.dbName = dbName;
}
@SuppressWarnings("deprecation")
@Behavior(value = "Insert", type = BehaviorType.USER_BEHAVIOR)
public MongoDBReturn insert(
@Parameter(value = "key", type = SupportTypes.Field) String key,
@Parameter(value = "value", type = SupportTypes.Field) String value) {
Mongo mongo = null;
try {
mongo = new Mongo(hostName, port);
mongo = new Mongo(new ServerAddress(hostName, port),
new MongoOptions(new MongoClientOptions.Builder()
.maxWaitTime(1000 * 40).build()));
DB db = mongo.getDB(dbName);
DBCollection table = db.getCollection(this.tableUnderTest);
DBObject valueToInsert = new BasicDBObject();
@ -62,7 +67,6 @@ public class MongoDBPlugin {
}
@SuppressWarnings("deprecation")
@Behavior(value = "Query", type = BehaviorType.USER_BEHAVIOR)
public MongoDBReturn query(
@Parameter(value = "properties", type = SupportTypes.Table) String properties) {

View File

@ -2,63 +2,182 @@ package org.bench4q.agent.test;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
import org.junit.Test;
public class Solution {
private Set<String> dict;
public int candy(int[] ratings) {
if (ratings == null || ratings.length == 0) {
return 0;
public List<List<String>> findLadders(String start, String end,
Set<String> dict) {
if (start == null || end == null || start.length() != end.length()) {
return new ArrayList<List<String>>();
}
int result = ratings.length, minIndex = findMinIndex(ratings);
// Left part
for (int i = minIndex - 1; i >= 0; i--) {
}
// Right Part
for (int i = minIndex + 1; i <= ratings.length; i++) {
}
return result;
this.dict = dict;
return broadFirstSearch(start, end);
}
private int findMinIndex(int[] target) {
int i = 0, maxValue = Integer.MIN_VALUE, result = -1;
while (i < target.length) {
if (target[i] > maxValue) {
maxValue = target[i];
result = i;
private List<List<String>> broadFirstSearch(String start, String end) {
List<List<String>> result = new ArrayList<List<String>>();
Queue<WordInPath> queue1 = new LinkedList<WordInPath>(), queue2 = new LinkedList<WordInPath>(), currentQueue = queue1, nextQueue = queue2;
Map<String, Integer> footPrints = new HashMap<String, Integer>();
currentQueue.offer(new WordInPath(start, null));
footPrints.put(start, 0);
boolean toCheckNextLevel = true;
while (currentQueue.peek() != null) {
WordInPath current = currentQueue.poll();
if (current.reach(end)) {
result.add(current.buildPath());
toCheckNextLevel = false;
continue;
}
if (!toCheckNextLevel) {
continue;
}
for (String neighbor : current.getNeighbors()) {
if ((!footPrints.containsKey(neighbor))
|| (current.length() <= footPrints.get(neighbor))) {
footPrints.put(neighbor, current.length());
nextQueue.offer(new WordInPath(neighbor, current));
}
}
if (currentQueue.peek() == null) {
Queue<WordInPath> temp = currentQueue;
currentQueue = nextQueue;
nextQueue = temp;
}
}
return result;
}
private class WordInPath {
private final String word;
private final WordInPath previous;
private final int size;
public WordInPath(String word, WordInPath previous) {
this.word = word;
this.previous = previous;
this.size = previous == null ? 1 : previous.length() + 1;
}
public List<String> buildPath() {
LinkedList<String> result = new LinkedList<String>();
WordInPath current = this;
while (current != null) {
result.push(current.word);
current = current.previous;
}
return result;
}
public int length() {
return this.size;
}
public boolean reach(String target) {
return this.word.equals(target);
}
private List<String> getNeighbors() {
List<String> result = new LinkedList<String>();
StringBuilder changed = new StringBuilder(this.word);
for (int i = 0; i < this.word.length(); i++) {
char ch = this.word.charAt(i);
for (char c = 'a'; c < 'z'; c++) {
if (c == ch) {
continue;
}
changed.setCharAt(i, c);
String temp = changed.toString();
if (Solution.this.dict.contains(temp)) {
result.add(temp);
}
changed.setCharAt(i, ch);
}
}
return result;
}
private int sumOfZeroTo(int target) {
return target * (target + 1) / 2;
}
@Test
public void testAscending() {
assertEquals(15, this.candy(new int[] { 1, 2, 3, 4, 5 }));
public void test() {
List<List<String>> result = this.findLadders(
"nape",
"mild",
new HashSet<String>(Arrays.asList("dose", "ends", "dine",
"jars", "prow", "soap", "guns", "hops", "cray", "hove",
"ella", "hour", "lens", "jive", "wiry", "earl", "mara",
"part", "flue", "putt", "rory", "bull", "york", "ruts",
"lily", "vamp", "bask", "peer", "boat", "dens", "lyre",
"jets", "wide", "rile", "boos", "down", "path", "onyx",
"mows", "toke", "soto", "dork", "nape", "mans", "loin",
"jots", "male", "sits", "minn", "sale", "pets", "hugo",
"woke", "suds", "rugs", "vole", "warp", "mite", "pews",
"lips", "pals", "nigh", "sulk", "vice", "clod", "iowa",
"gibe", "shad", "carl", "huns", "coot", "sera", "mils",
"rose", "orly", "ford", "void", "time", "eloy", "risk",
"veep", "reps", "dolt", "hens", "tray", "melt", "rung",
"rich", "saga", "lust", "yews", "rode", "many", "cods",
"rape", "last", "tile", "nosy", "take", "nope", "toni",
"bank", "jock", "jody", "diss", "nips", "bake", "lima",
"wore", "kins", "cult", "hart", "wuss", "tale", "sing",
"lake", "bogy", "wigs", "kari", "magi", "bass", "pent",
"tost", "fops", "bags", "duns", "will", "tart", "drug",
"gale", "mold", "disk", "spay", "hows", "naps", "puss",
"gina", "kara", "zorn", "boll", "cams", "boas", "rave",
"sets", "lego", "hays", "judy", "chap", "live", "bahs",
"ohio", "nibs", "cuts", "pups", "data", "kate", "rump",
"hews", "mary", "stow", "fang", "bolt", "rues", "mesh",
"mice", "rise", "rant", "dune", "jell", "laws", "jove",
"bode", "sung", "nils", "vila", "mode", "hued", "cell",
"fies", "swat", "wags", "nate", "wist", "honk", "goth",
"told", "oise", "wail", "tels", "sore", "hunk", "mate",
"luke", "tore", "bond", "bast", "vows", "ripe", "fond",
"benz", "firs", "zeds", "wary", "baas", "wins", "pair",
"tags", "cost", "woes", "buns", "lend", "bops", "code",
"eddy", "siva", "oops", "toed", "bale", "hutu", "jolt",
"rife", "darn", "tape", "bold", "cope", "cake", "wisp",
"vats", "wave", "hems", "bill", "cord", "pert", "type",
"kroc", "ucla", "albs", "yoko", "silt", "pock", "drub",
"puny", "fads", "mull", "pray", "mole", "talc", "east",
"slay", "jamb", "mill", "dung", "jack", "lynx", "nome",
"leos", "lade", "sana", "tike", "cali", "toge", "pled",
"mile", "mass", "leon", "sloe", "lube", "kans", "cory",
"burs", "race", "toss", "mild", "tops", "maze", "city",
"sadr", "bays", "poet", "volt", "laze", "gold", "zuni",
"shea", "gags", "fist", "ping", "pope", "cora", "yaks",
"cosy", "foci", "plan", "colo", "hume", "yowl", "craw",
"pied", "toga", "lobs", "love", "lode", "duds", "bled",
"juts", "gabs", "fink", "rock", "pant", "wipe", "pele",
"suez", "nina", "ring", "okra", "warm", "lyle", "gape",
"bead", "lead", "jane", "oink", "ware", "zibo", "inns",
"mope", "hang", "made", "fobs", "gamy", "fort", "peak",
"gill", "dino", "dina", "tier")));
for (List<String> item : result) {
for (String word : item) {
System.out.print(word + " -> ");
}
System.out.println();
}
}
@Test
public void testAllEquals() {
assertEquals(5, this.candy(new int[] { 2, 2, 2, 2, 2 }));
}
@Test
public void testAscendingAndEquals() {
assertEquals(18, this.candy(new int[] { 1, 2, 3, 4, 4, 4 }));
}
@Test
public void testEqualsAndAscending() {
assertEquals(12, this.candy(new int[] { 1, 1, 1, 3, 4, 5 }));
}
@Test
public void testAscendingAndDescending() {
assertEquals(16, this.candy(new int[] { 1, 2, 3, 4, 3, 2, 1 }));
public void test2() {
String test1 = "abc";
StringBuilder builder = new StringBuilder(test1);
builder.setCharAt(1, 'a');
System.out.println(builder.toString());
}
}

View File

@ -62,7 +62,7 @@ public class TestWithScriptFile {
public TestWithScriptFile() {
this.setFilePath("Scripts" + System.getProperty("file.separator")
+ "testForBrief.xml");
+ "mongo9To1.xml");
this.setHttpRequester(new HttpRequester());
}

View File

@ -35,11 +35,13 @@ public class Test_Scenario extends TestBase {
@Test
public void test_RealScenario() throws IOException {
BehaviorModel[] behaviors = new BehaviorModel[29];
BehaviorModel[] behaviors = new BehaviorModel[28];
for (int i = 0; i < 9; i++) {
behaviors[3 * i] = BehaviorModel.ControlBehaviorBuilder(3 * i,
"Next", "UUID_0", Collections.<ParameterModel> emptyList());
behaviors[3 * i + 1] = BehaviorModel.ControlBehaviorBuilder(
behaviors[3 * i] = BehaviorModel
.ControlBehaviorBuilder(3 * i, "Sleep", "Timer_0", Arrays
.asList(ParameterModel
.createParameter("time", "10")));
behaviors[3 * i + 1] = BehaviorModel.TimerBehaviorBuilder(
3 * i + 1, "Set", "Context_0", Arrays.asList(ParameterModel
.createParameter("toSave", "${UUID_0:var}")));
behaviors[3 * i + 2] = BehaviorModel
@ -55,13 +57,9 @@ public class Test_Scenario extends TestBase {
"value",
"828731929090399688663513844419156517791913487136162075054396888608979390802698967398774976538053071265086303536432973027547398485897859650637839199967916419278859657562410371550970990533755543895317958490879810955359859803793616914752497927102101107393602107374624265703167902037562601756290624400217677905796841586506540830996528039667809341170671731917392828543425909887469350859806312812589702773082295018742634842159778009485901428286815715514440370336211621120027294867866046842579395402354849290925687231979896816952130161564546780855710443002842992917011602246580128072986737704758180050405202976240171827695507627799312781883033823819663102843159141022325482803101497005554269652897365593399081219143594918151989844361363454642099858085072470136971359171934346214072016627940215525657780835264287095014748952849011967941296078931973149033644269161629346531549579584063826798825958153903463232155174301997795504543310963155667642944030315802981522872371957377604512253881055347955240594154853114826089693318722619283530276507503")));
}
behaviors[27] = BehaviorModel.UserBehaviorBuilder(27, "Query",
"MongoDBPlugin_0",
Arrays.asList(ParameterModel.createParameter("properties",
"propertyName=key|propertyValue=${Context_0:var}")));
behaviors[28] = BehaviorModel.TimerBehaviorBuilder(28, "Sleep",
behaviors[27] = BehaviorModel.TimerBehaviorBuilder(28, "Sleep",
"Timer_0",
Arrays.asList(ParameterModel.createParameter("time", "10")));
Arrays.asList(ParameterModel.createParameter("time", "1000")));
RunScenarioModel runScenarioModel = buildRunScenarioModelWith(
Arrays.asList(
new UsePluginModel("Timer_0", "ConstantTimer",
@ -70,7 +68,7 @@ public class Test_Scenario extends TestBase {
new UsePluginModel("Context_0", "Context", null),
new UsePluginModel("MongoDBPlugin_0", "MongoDBPlugin",
Arrays.asList(ParameterModel.createParameter(
"hostName", "localhost"),
"hostName", "133.133.13.154"),
ParameterModel.createParameter("port",
"27017"), ParameterModel
.createParameter("dbName",

View File

@ -4,6 +4,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
import org.apache.log4j.Logger;
import org.bench4q.master.domain.entity.Monitor;
import org.bench4q.master.domain.entity.TestPlan;
import org.bench4q.master.domain.entity.TestPlanScript;
@ -11,6 +12,7 @@ import org.bench4q.master.domain.entity.User;
import org.bench4q.master.domain.factory.BusinessModelMapFactory;
import org.bench4q.master.domain.repository.TestPlanRepository;
import org.bench4q.share.enums.master.TestPlanStatus;
import org.bench4q.share.helper.MarshalHelper;
import org.bench4q.share.models.master.MonitorModel;
import org.bench4q.share.models.master.ScriptHandleModel;
import org.bench4q.share.models.master.TestPlanDBModel;
@ -80,6 +82,8 @@ public class TestPlanService {
monitorModels.add(BusinessModelMapFactory.toModel(monitor));
}
resultModel.setMonitorModels(monitorModels);
Logger.getLogger(this.getClass()).info(
"runningInfo : " + MarshalHelper.tryMarshal(resultModel));
return resultModel;
}
}

View File

@ -204,8 +204,8 @@ public class ScriptBriefStatistics extends ScriptStatistics {
private ScriptBriefResultModel dealWithInvalidSamplePoint(
ScriptBriefResultModel inputModel) {
if (this.totalFailCountThisTime == 0
&& this.totalSuccessCountThisTime == 0) {
if (this.totalSuccessCountFromBegin == 0
&& this.totalFailCountFromBegin == 0) {
return this.getLastValidBriefResultModel();
}
this.setLastValidBriefResultModel(inputModel);

View File

@ -1,11 +1,18 @@
package org.bench4q.master.unitTest.service;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.Date;
import org.apache.commons.io.FileUtils;
import org.bench4q.master.Main;
import org.bench4q.master.domain.entity.Agent;
import org.bench4q.master.domain.entity.Script;
import org.bench4q.master.domain.entity.TestPlan;
import org.bench4q.master.domain.entity.TestPlanScript;
import org.bench4q.master.domain.entity.User;
import org.bench4q.master.domain.repository.ScriptRepositoty;
import org.bench4q.master.domain.service.AgentService;
import org.bench4q.master.unitTest.TestBase_MakeUpTestPlan;
import org.bench4q.share.enums.master.TestPlanStatus;
@ -19,6 +26,7 @@ import org.junit.runners.MethodSorters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.web.multipart.MultipartFile;
import static org.junit.Assert.*;
@ -28,10 +36,17 @@ import static org.junit.Assert.*;
public class Test_TestPlanEngine extends TestBase_MakeUpTestPlan {
@Autowired
private AgentService agentService;
@Autowired
private ScriptRepositoty scriptRepository;
@Before
public void prepare() {
public void prepare() throws IOException {
synchronized (Test_TestPlanEngine.class) {
this.scriptRepository.attach(Script.createScriptWithoutId("test1",
FileUtils.readFileToString(new File(
"Scripts/forGoodRecord.xml")), this
.getUserRepository().getUser("admin"), Collections
.<MultipartFile> emptyList()));
this.getAgentRepository().detach("147.0.0.1");
this.agentService.addAgentToPool(Agent.createAgentWithoutId(
"147.0.0.1", 6565, 500));
@ -48,6 +63,8 @@ public class Test_TestPlanEngine extends TestBase_MakeUpTestPlan {
if ((agent = this.getAgentRepository().getAgentBy("147.0.01")) != null) {
this.getAgentRepository().detach(agent.getId());
}
this.scriptRepository.detach(this.scriptRepository.getScriptByName(
"test1").getId());
}
}