add test about hbase plugin

add test about hbase plugin
This commit is contained in:
coderfengyun 2014-07-14 10:56:21 +08:00
parent bba93a7db5
commit 10a6e950d1
10 changed files with 141 additions and 42 deletions

View File

@ -26,7 +26,7 @@
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>133.133.134.188</value>
<value>133.133.13.154</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>

View File

@ -29,12 +29,23 @@ public class HBasePlugin {
private final HTable tableUnderTest;
@Constructor
public HBasePlugin() {
public HBasePlugin(
@Parameter(value = "dnsServer", type = SupportTypes.Field) String dnsServer,
@Parameter(value = "zookeeperQuorum", type = SupportTypes.Field) String zookeeperQuorum,
@Parameter(value = "zookeeperDataDir", type = SupportTypes.Field) String zookeeperDataDir,
@Parameter(value = "masterAdrress", type = SupportTypes.Field) String masterAdrress,
@Parameter(value = "tableName", type = SupportTypes.Field) String tableName) {
conf = HBaseConfiguration.create();
try {
Configuration config = new Configuration();
config.set("hbase.master.dns.nameserver", dnsServer);
config.setBoolean("hbase.cluster.distributed", true);
config.set("hbase.zookeeper.quorum", zookeeperQuorum);
config.set("hbase.zookeeper.property.dataDir", zookeeperDataDir);
config.set("hbase.master.info.bindAddress", masterAdrress);
@SuppressWarnings({ "unused", "resource" })
HBaseAdmin admin = new HBaseAdmin(conf);
tableUnderTest = new HTable(conf, "users");
HBaseAdmin admin = new HBaseAdmin(config);
tableUnderTest = new HTable(conf, tableName);
} catch (Exception e) {
e.printStackTrace();
throw new Bench4QRunTimeException("Construct HBasePlugin fails!", e);
@ -47,8 +58,8 @@ public class HBasePlugin {
@Parameter(value = "value", type = SupportTypes.Field) String value) {
try {
Put put = new Put(UUID.randomUUID().toString().getBytes());
put.add("key".getBytes(), "key".getBytes(), key.getBytes());
put.add("value".getBytes(), "value".getBytes(), value.getBytes());
put.add("key1".getBytes(), "key1".getBytes(), key.getBytes());
put.add("value1".getBytes(), "value1".getBytes(), value.getBytes());
this.tableUnderTest.put(put);
} catch (Exception ex) {
Logger.getLogger(HBasePlugin.class).info(ex, ex);
@ -57,11 +68,12 @@ public class HBasePlugin {
return new HBaseReturn(true);
}
public HBaseReturn Query(
@Behavior(value = "Query", type = BehaviorType.USER_BEHAVIOR)
public HBaseReturn query(
@Parameter(value = "key", type = SupportTypes.Field) String key) {
try {
Filter filter = new SingleColumnValueFilter(Bytes.toBytes("key"),
Bytes.toBytes("key"), CompareOp.EQUAL, Bytes.toBytes("aaa")); // 当列column1的值为aaa时进行查询
Filter filter = new SingleColumnValueFilter(Bytes.toBytes("key1"),
Bytes.toBytes("key1"), CompareOp.EQUAL, Bytes.toBytes(key)); // µ±ÁÐcolumn1µÄֵΪaaaʱ½øÐвéѯ
Scan s = new Scan();
s.setFilter(filter);
ResultScanner resultScanner = this.tableUnderTest.getScanner(s);

View File

@ -1,12 +1,8 @@
package org.bench4q.agent.plugin.basic;
import java.util.LinkedHashMap;
import java.util.Map;
public abstract class PluginReturn {
private int successCount;
private int failCount;
private Map<String, String> runTimeParams;
public int getSuccessCount() {
return successCount;
@ -24,32 +20,14 @@ public abstract class PluginReturn {
this.failCount = failCount;
}
public Map<String, String> getRunTimeParams() {
return runTimeParams;
}
public void setRunTimeParams(Map<String, String> runTimeParams) {
this.runTimeParams = runTimeParams;
}
public PluginReturn() {
this.setRunTimeParams(new LinkedHashMap<String, String>());
}
public PluginReturn(boolean success) {
this();
this.setSuccessCount(success ? 1 : 0);
this.setFailCount(success ? 0 : 1);
}
public PluginReturn(int successCount, int failCount) {
this();
this.setSuccessCount(successCount);
this.setFailCount(failCount);
}
public boolean hasRunTimeParams() {
return (this.getRunTimeParams() == null || this.getRunTimeParams()
.size() == 0) ? false : true;
}
}

View File

@ -235,7 +235,8 @@ public class HttpPlugin extends ParameterBarn {
method.getResponseBodyAsString());
}
return new HttpReturn((responseCode % 100) < 4, responseCode,
contentLength, contentType, responseHeaders);
method.getURI().toString(), contentLength, contentType,
responseHeaders);
} catch (HttpException e) {
Logger.getLogger(HttpPlugin.class).error(e, e);
return new HttpReturn(false, 400, contentLength, contentType);

View File

@ -10,6 +10,7 @@ import org.bench4q.agent.plugin.basic.PluginReturn;
*
*/
public class HttpReturn extends PluginReturn {
private String url;
private int statusCode;
private long contentLength;
private String contentType;
@ -47,6 +48,14 @@ public class HttpReturn extends PluginReturn {
this.headers = headers;
}
public String getUrl() {
return url;
}
private void setUrl(String url) {
this.url = url;
}
public HttpReturn(boolean success, int statusCode, long contentLength,
String contentType) {
super(success);
@ -62,12 +71,12 @@ public class HttpReturn extends PluginReturn {
* @param contentLength
* @param contentType
* @param responseHeaders
* @param runTimeParams
* !! to be removed
*/
public HttpReturn(boolean success, int responseCode, long contentLength,
String contentType, Header[] responseHeaders) {
public HttpReturn(boolean success, int responseCode, String url,
long contentLength, String contentType, Header[] responseHeaders) {
this(success, responseCode, contentLength, contentType);
this.setHeaders(responseHeaders);
this.setUrl(url);
}
}

View File

@ -5,19 +5,19 @@ import java.util.Date;
public class BehaviorResult {
private String pluginId;
private String pluginName;
private int behaviorId;
private String behaviorName;
private Date startDate;
private Date endDate;
private long responseTime;
private int successCount;
private int failCount;
private boolean shouldBeCountResponseTime;
private int behaviorId;
private String behaviorUrl;
private long contentLength;
private int statusCode;
private String contentType;
private boolean shouldBeCountResponseTime;
public String getPluginId() {
return pluginId;

View File

@ -152,6 +152,7 @@ public class VUser implements Runnable {
Object plugin, Date startDate, PluginReturn pluginReturn,
Date endDate) {
BehaviorResult result = new BehaviorResult();
result.setBehaviorId(behavior.getId());
result.setStartDate(startDate);
result.setEndDate(endDate);
result.setSuccessCount(pluginReturn.getSuccessCount());
@ -164,7 +165,6 @@ public class VUser implements Runnable {
result.setShouldBeCountResponseTime(behavior.shouldBeCount());
if (pluginReturn instanceof HttpReturn) {
HttpReturn httpReturn = (HttpReturn) pluginReturn;
result.setBehaviorId(behavior.getId());
// TODO: this param in result is not Appropriate
result.setBehaviorUrl(behavior.getSpecificParamValue("url"));
result.setContentLength(httpReturn.getContentLength());

View File

@ -1,7 +1,5 @@
package org.bench4q.agent.test;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;

View File

@ -0,0 +1,101 @@
package org.bench4q.agent.test.plugin;
import static org.junit.Assert.*;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.UUID;
import org.apache.commons.io.FileUtils;
import org.bench4q.agent.plugin.basic.HBasePlugin.HBasePlugin;
import org.bench4q.agent.plugin.basic.HBasePlugin.HBaseReturn;
import org.bench4q.agent.scenario.Scenario;
import org.bench4q.agent.test.TestBase;
import org.bench4q.share.helper.MarshalHelper;
import org.bench4q.share.helper.TestHelper;
import org.bench4q.share.models.agent.ParameterModel;
import org.bench4q.share.models.agent.RunScenarioModel;
import org.bench4q.share.models.agent.scriptrecord.BehaviorModel;
import org.bench4q.share.models.agent.scriptrecord.UsePluginModel;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:application-context.xml" })
public class Test_HBasePlugin extends TestBase {
HBasePlugin hBase = new HBasePlugin("133.133.134.188", "133.133.13.154",
"/home/Xinsheng/hbase/tmp/zookeeper_data", "133.133.134.188",
"users");
@Test
public void test() {
HBaseReturn result = this.hBase.insert("123", "chentienan");
assertTrue(result.getSuccessCount() > 0);
}
@Test
public void testQuery() {
HBaseReturn result = this.hBase.query("123");
assertTrue(result.getSuccessCount() > 0);
}
@Test
public void testGenerateHBaseScenario() throws IOException {
BehaviorModel[] behaviors = new BehaviorModel[19];
for (int i = 0; i < 9; i++) {
behaviors[2 * i] = BehaviorModel.ControlBehaviorBuilder(2 * i,
"Next", "UUID_0", Collections.<ParameterModel> emptyList());
behaviors[2 * i + 1] = BehaviorModel
.UserBehaviorBuilder(
2 * i + 1,
"Insert",
"HBasePlugin_0",
Arrays.asList(
ParameterModel.createParameter("key",
"${UUID_0:var}"),
ParameterModel
.createParameter(
"value",
"828731929090399688663513844419156517791913487136162075054396888608979390802698967398774976538053071265086303536432973027547398485897859650637839199967916419278859657562410371550970990533755543895317958490879810955359859803793616914752497927102101107393602107374624265703167902037562601756290624400217677905796841586506540830996528039667809341170671731917392828543425909887469350859806312812589702773082295018742634842159778009485901428286815715514440370336211621120027294867866046842579395402354849290925687231979896816952130161564546780855710443002842992917011602246580128072986737704758180050405202976240171827695507627799312781883033823819663102843159141022325482803101497005554269652897365593399081219143594918151989844361363454642099858085072470136971359171934346214072016627940215525657780835264287095014748952849011967941296078931973149033644269161629346531549579584063826798825958153903463232155174301997795504543310963155667642944030315802981522872371957377604512253881055347955240594154853114826089693318722619283530276507503")));
}
behaviors[18] = BehaviorModel.TimerBehaviorBuilder(28, "Sleep",
"Timer_0",
Arrays.asList(ParameterModel.createParameter("time", "10")));
RunScenarioModel runScenarioModel = buildRunScenarioModelWith(
Arrays.asList(
new UsePluginModel("Timer_0", "ConstantTimer",
Collections.<ParameterModel> emptyList()),
new UsePluginModel("UUID_0", "UUID", null),
new UsePluginModel("Context_0", "Context", null),
new UsePluginModel(
"HBasePlugin_0",
"HBase",
Arrays.asList(
ParameterModel.createParameter(
"dnsServer", "133.133.134.188"),
ParameterModel.createParameter(
"zookeeperQuorum",
"133.133.13.154"),
ParameterModel
.createParameter(
"zookeeperDataDir",
"/home/Xinsheng/hbase/tmp/zookeeper_data"),
ParameterModel.createParameter(
"masterAdrress",
"133.133.134.188"),
ParameterModel.createParameter(
"tableName", "users")))),
behaviors);
File file = new File("Scripts" + System.getProperty("file.separator")
+ "hbaseScenario.xml");
TestHelper.createFileIfNotExist(file);
FileUtils.writeStringToFile(file,
MarshalHelper.tryMarshal(runScenarioModel));
createVUser(Scenario.scenarioBuilderWithCompile(runScenarioModel),
UUID.randomUUID()).run();
}
}

View File

@ -34,7 +34,7 @@ public class Test_Scenario extends TestBase {
private static final String TEST_CASE = "${csvProvider0:userName}$#okOrNot${file.separator}";
@Test
public void test_RealScenario() throws IOException {
public void test_GenerateMongoScenario() throws IOException {
BehaviorModel[] behaviors = new BehaviorModel[28];
for (int i = 0; i < 9; i++) {
behaviors[3 * i] = BehaviorModel