getOpInitFunction() {
+ return (cycle) -> new WebDriverCmdState(this,cycle);
+ }
+}
diff --git a/driver-web/src/main/java/io/nosqlbench/driver/web/WebDriverCmdState.java b/driver-web/src/main/java/io/nosqlbench/driver/web/WebDriverCmdState.java
new file mode 100644
index 000000000..f01e0b795
--- /dev/null
+++ b/driver-web/src/main/java/io/nosqlbench/driver/web/WebDriverCmdState.java
@@ -0,0 +1,13 @@
+package io.nosqlbench.driver.web;
+
+public class WebDriverCmdState {
+
+ private final WebDriverAsyncAction action;
+ private final long cycle;
+
+ public WebDriverCmdState(WebDriverAsyncAction action, long cycle) {
+
+ this.action = action;
+ this.cycle = cycle;
+ }
+}
diff --git a/driver-web/src/test/java/io/nosqlbench/driver/web/ExampleWebScript.java b/driver-web/src/test/java/io/nosqlbench/driver/web/ExampleWebScript.java
new file mode 100644
index 000000000..043df7617
--- /dev/null
+++ b/driver-web/src/test/java/io/nosqlbench/driver/web/ExampleWebScript.java
@@ -0,0 +1,63 @@
+package io.nosqlbench.driver.web;
+
+import io.nosqlbench.nb.api.testutils.Perf;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.htmlunit.HtmlUnitDriver;
+import org.openqa.selenium.remote.RemoteWebElement;
+
+
+/**
+ * References:
+ *
+ * - https://www.guru99.com/selenium-with-htmlunit-driver-phantomjs.html
+ *
+ *
+ */
+public class ExampleWebScript {
+
+ @Test
+ @Ignore
+ public void getDocsSiteChromeDriver() {
+ System.setProperty("webdriver.http.factory", "okhttp");
+ WebDriver driver = new ChromeDriver();
+ Perf perf = new Perf("chrome");
+ int ops = 100;
+ try (Perf.Time time = perf.start("chrome",ops)) {
+ for (int i = 1; i <= ops; i++) {
+ System.out.print(".");
+ if ((i%10)==0) { System.out.println(i); }
+ driver.get("http://localhost:6081");
+ }
+ }
+ System.out.println("!");
+
+ System.out.println(perf.toString());
+// driver.get("http://docs.nosqlbench.io/");
+ driver.close();
+ }
+
+ @Test
+ @Ignore
+ public void getDocSiteWebHtml() {
+// System.setProperty("webdriver.http.factory", "okhttp");
+ WebDriver driver = new HtmlUnitDriver(false);
+ Perf perf = new Perf("htmlunit");
+ int ops = 100;
+ try (Perf.Time time = perf.start("htmlunit",ops)) {
+ for (int i = 1; i <= ops; i++) {
+ System.out.print(".");
+ if ((i%10)==0) { System.out.println(i); }
+ driver.get("http://localhost:6081");
+ }
+ }
+ System.out.println("!");
+
+ System.out.println(perf.toString());
+// driver.get("http://docs.nosqlbench.io/");
+ driver.close();
+ }
+}
diff --git a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/AsyncAction.java b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/AsyncAction.java
index ebe74d8c5..ec30373e0 100644
--- a/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/AsyncAction.java
+++ b/engine-api/src/main/java/io/nosqlbench/engine/api/activityapi/core/AsyncAction.java
@@ -22,10 +22,8 @@ import io.nosqlbench.engine.api.activityapi.core.ops.fluent.opfacets.TrackedOp;
import java.util.function.LongFunction;
/**
- * An AsyncAction allows an activity type to implement asynchronous
+ * An AsyncAction allows an activity type to implement asynchronous
* operations within each thread.
- *
- *
*/
public interface AsyncAction extends Action {
@@ -64,33 +62,4 @@ public interface AsyncAction extends Action {
*/
boolean enqueue(TrackedOp opc);
-// /**
-// * Await completion of all pending operations for this thread.
-// * If all tasks are already complete when this is called, then it
-// * should return immediately.
-// * @param timeout Timeout in milliseconds
-// * @return true, if all tasks pending for this thread are completed.
-// */
-// boolean awaitCompletion(long timeout);
-
-// /**
-// * Once constructed, all async actions are expected to provide a tracker
-// * object which can be used to register callback for operational events,
-// * as well as to provide a diagnostic view of what is happening with
-// * the number of pending operations per thread.
-// * @return An async operations tracker
-// */
-// OpTracker getTracker();
-
-// /**
-// * When the activity needs to create a new op context which tracks all
-// * things interesting for the operation, it will call this method.
-// * The payload type D determines any and all of what an async action
-// * may know about an op.
-// *
-// * @return A new op state of parameterized type D
-// */
-// D allocateOpData(long cycle);
-
-
}
diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiterPerfTestMethods.java b/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiterPerfTestMethods.java
index cb4211c0d..d5d32e00e 100644
--- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiterPerfTestMethods.java
+++ b/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/RateLimiterPerfTestMethods.java
@@ -18,9 +18,9 @@
package io.nosqlbench.engine.api.activityapi.ratelimits;
import io.nosqlbench.engine.api.metrics.DeltaHdrHistogramReservoir;
-import io.nosqlbench.testutils.Bounds;
-import io.nosqlbench.testutils.Perf;
-import io.nosqlbench.testutils.Result;
+import io.nosqlbench.nb.api.testutils.Bounds;
+import io.nosqlbench.nb.api.testutils.Perf;
+import io.nosqlbench.nb.api.testutils.Result;
import java.util.ArrayList;
import java.util.Arrays;
diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TestHybridRateLimiterPerf.java b/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TestHybridRateLimiterPerf.java
index fb5a8f9d4..9783cce65 100644
--- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TestHybridRateLimiterPerf.java
+++ b/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TestHybridRateLimiterPerf.java
@@ -18,8 +18,8 @@
package io.nosqlbench.engine.api.activityapi.ratelimits;
import io.nosqlbench.engine.api.activityimpl.ActivityDef;
-import io.nosqlbench.testutils.Perf;
-import io.nosqlbench.testutils.Result;
+import io.nosqlbench.nb.api.testutils.Perf;
+import io.nosqlbench.nb.api.testutils.Result;
import org.junit.Ignore;
import org.junit.Test;
diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TestRateLimiterPerf1E7.java b/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TestRateLimiterPerf1E7.java
index c59d8af12..df895e87c 100644
--- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TestRateLimiterPerf1E7.java
+++ b/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TestRateLimiterPerf1E7.java
@@ -18,7 +18,7 @@
package io.nosqlbench.engine.api.activityapi.ratelimits;
import io.nosqlbench.engine.api.activityimpl.ActivityDef;
-import io.nosqlbench.testutils.Perf;
+import io.nosqlbench.nb.api.testutils.Perf;
import org.junit.Ignore;
import org.junit.Test;
diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TestRateLimiterPerf1E8.java b/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TestRateLimiterPerf1E8.java
index aa7d7aa9e..6edd0fe09 100644
--- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TestRateLimiterPerf1E8.java
+++ b/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TestRateLimiterPerf1E8.java
@@ -18,7 +18,7 @@
package io.nosqlbench.engine.api.activityapi.ratelimits;
import io.nosqlbench.engine.api.activityimpl.ActivityDef;
-import io.nosqlbench.testutils.Perf;
+import io.nosqlbench.nb.api.testutils.Perf;
import org.junit.Ignore;
import org.junit.Test;
diff --git a/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TestRateLimiterPerfSingle.java b/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TestRateLimiterPerfSingle.java
index 51eda2ac4..dae803a2b 100644
--- a/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TestRateLimiterPerfSingle.java
+++ b/engine-api/src/test/java/io/nosqlbench/engine/api/activityapi/ratelimits/TestRateLimiterPerfSingle.java
@@ -18,7 +18,7 @@
package io.nosqlbench.engine.api.activityapi.ratelimits;
import io.nosqlbench.engine.api.activityimpl.ActivityDef;
-import io.nosqlbench.testutils.Result;
+import io.nosqlbench.nb.api.testutils.Result;
import org.junit.Ignore;
import org.junit.Test;
diff --git a/engine-api/src/test/java/io/nosqlbench/testutils/Bounds.java b/nb-api/src/main/java/io/nosqlbench/nb/api/testutils/Bounds.java
similarity index 77%
rename from engine-api/src/test/java/io/nosqlbench/testutils/Bounds.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/testutils/Bounds.java
index 537fa31d9..f89b082d4 100644
--- a/engine-api/src/test/java/io/nosqlbench/testutils/Bounds.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/testutils/Bounds.java
@@ -15,9 +15,23 @@
* /
*/
-package io.nosqlbench.testutils;
+package io.nosqlbench.nb.api.testutils;
+/**
+ * Easily step from one value to the next according to a modified
+ * logarithmic sequence that makes it easy to pick useful testing
+ * boundaries.
+ *
+ * With levels per magnitude at 1, the progression goes in powers
+ * of 10. With any higher value than 1, each magnitude is divided
+ * into equal parts. For example, starting at 10 with 2 levels per magnitude,
+ * you get 50, 100, 500, 1000, 5000, and so on when you ask for
+ * the next higher bound.
+ *
+ *
+ */
public class Bounds {
+
private final int levelsPerMagnitude;
private long currentValue;
diff --git a/engine-api/src/test/java/io/nosqlbench/testutils/Perf.java b/nb-api/src/main/java/io/nosqlbench/nb/api/testutils/Perf.java
similarity index 91%
rename from engine-api/src/test/java/io/nosqlbench/testutils/Perf.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/testutils/Perf.java
index 2f077525d..28481f8f0 100644
--- a/engine-api/src/test/java/io/nosqlbench/testutils/Perf.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/testutils/Perf.java
@@ -15,7 +15,7 @@
* /
*/
-package io.nosqlbench.testutils;
+package io.nosqlbench.nb.api.testutils;
import java.util.ArrayList;
import java.util.Comparator;
@@ -179,4 +179,28 @@ public class Perf implements Iterable {
public Iterator iterator() {
return results.iterator();
}
+
+ public Time start(String name, long ops) {
+ return new Time(this, name, ops);
+ }
+
+ public static class Time implements AutoCloseable {
+ private final Perf perf;
+ private final long start;
+ private String name;
+ private long ops;
+
+ public Time(Perf perf, String name, long ops) {
+ this.name = name;
+ this.ops = ops;
+ this.start = System.nanoTime();
+ this.perf = perf;
+ }
+
+ @Override
+ public void close() {
+ long end = System.nanoTime();
+ perf.add(name,start,end,ops);
+ }
+ }
}
diff --git a/engine-api/src/test/java/io/nosqlbench/testutils/Result.java b/nb-api/src/main/java/io/nosqlbench/nb/api/testutils/Result.java
similarity index 98%
rename from engine-api/src/test/java/io/nosqlbench/testutils/Result.java
rename to nb-api/src/main/java/io/nosqlbench/nb/api/testutils/Result.java
index 65a640831..4a48acf02 100644
--- a/engine-api/src/test/java/io/nosqlbench/testutils/Result.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/testutils/Result.java
@@ -15,7 +15,7 @@
* /
*/
-package io.nosqlbench.testutils;
+package io.nosqlbench.nb.api.testutils;
import java.util.ArrayList;
import java.util.List;
diff --git a/engine-api/src/test/java/io/nosqlbench/testutils/BoundsTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/testutils/BoundsTest.java
similarity index 97%
rename from engine-api/src/test/java/io/nosqlbench/testutils/BoundsTest.java
rename to nb-api/src/test/java/io/nosqlbench/nb/api/testutils/BoundsTest.java
index 6eab91e3f..8ab8aa96f 100644
--- a/engine-api/src/test/java/io/nosqlbench/testutils/BoundsTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/testutils/BoundsTest.java
@@ -15,7 +15,7 @@
* /
*/
-package io.nosqlbench.testutils;
+package io.nosqlbench.nb.api.testutils;
import org.junit.Test;
diff --git a/engine-api/src/test/java/io/nosqlbench/testutils/PerfTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/testutils/PerfTest.java
similarity index 97%
rename from engine-api/src/test/java/io/nosqlbench/testutils/PerfTest.java
rename to nb-api/src/test/java/io/nosqlbench/nb/api/testutils/PerfTest.java
index 2a8284d73..8a7db1dd1 100644
--- a/engine-api/src/test/java/io/nosqlbench/testutils/PerfTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/testutils/PerfTest.java
@@ -15,7 +15,7 @@
* /
*/
-package io.nosqlbench.testutils;
+package io.nosqlbench.nb.api.testutils;
import org.junit.Test;
diff --git a/pom.xml b/pom.xml
index c248b8575..a9696d889 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,112 +1,114 @@
-
- 4.0.0
+
+ 4.0.0
- nosqlbench
- pom
+ nosqlbench
+ pom
-
- mvn-defaults
- io.nosqlbench
- 3.12.83-SNAPSHOT
- mvn-defaults
-
+
+ mvn-defaults
+ io.nosqlbench
+ 3.12.83-SNAPSHOT
+ mvn-defaults
+
- ${project.artifactId}
- http://nosqlbench.io/
- A reusable machine pattern for building dynamic load
- testing systems
-
+ ${project.artifactId}
+ http://nosqlbench.io/
+ A reusable machine pattern for building dynamic load
+ testing systems
+
-
+
-
- mvn-defaults
-
- docsys
- nb-api
+
+ mvn-defaults
+
+ docsys
+ nb-api
-
- engine-api
- engine-core
- engine-cli
- engine-extensions
- engine-docker
- engine-docs
+
+ engine-api
+ engine-core
+ engine-cli
+ engine-extensions
+ engine-docker
+ engine-docs
-
- nb
- activitytype-diag
- activitytype-stdout
- activitytype-tcp
- activitytype-http
- activitytype-cql
- activitytype-cqlverify
+
+ nb
+ activitytype-diag
+ activitytype-stdout
+ activitytype-tcp
+ activitytype-http
+ activitytype-cql
+ activitytype-cqlverify
+ driver-web
-
+
- virtdata-api
- virtdata-lang
- virtdata-realdata
- virtdata-lib-basics
- virtdata-lib-random
- virtdata-lib-curves4
- virtdata-lib-realer
+ virtdata-api
+ virtdata-lang
+ virtdata-realdata
+ virtdata-lib-basics
+ virtdata-lib-random
+ virtdata-lib-curves4
+ virtdata-lib-realer
- virtdata-userlibs
+ virtdata-userlibs
-
+
-
-
- The Apache License, Version 2.0
- http://www.apache.org/licenses/LICENSE-2.0.txt
-
-
+
+
+ The Apache License, Version 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.txt
+
+
-
-
-
- maven-release-plugin
- org.apache.maven.plugins
-
- true
- release
- true
-
-
-
-
+
+
+
+ maven-release-plugin
+ org.apache.maven.plugins
+
+ true
+ release
+ true
+
+
+
+
-
-
- Jonathan Shook
- jshook@gmail.com
- nosqlbench.io
- http://nosqlbench.io/
-
-
- Sebastián Estévez
- estevezsebastian@gmail.com
- nosqlbench.io
- http://nosqlbench.io/
-
-
+
+
+ Jonathan Shook
+ jshook@gmail.com
+ nosqlbench.io
+ http://nosqlbench.io/
+
+
+ Sebastián Estévez
+ estevezsebastian@gmail.com
+ nosqlbench.io
+ http://nosqlbench.io/
+
+
-
- scm:git:https://github.com/nosqlbench/nosqlbench.git
-
-
- scm:git:https://github.com/nosqlbench/nosqlbench.git
-
- scm:git:git@github.com:nosqlbench/nosqlbench.git
- HEAD
-
+
+ scm:git:https://github.com/nosqlbench/nosqlbench.git
+
+
+ scm:git:https://github.com/nosqlbench/nosqlbench.git
+
+ scm:git:git@github.com:nosqlbench/nosqlbench.git
+ HEAD
+
-
-
- ossrh
- https://oss.sonatype.org/content/repositories/snapshots
-
-
+
+
+ ossrh
+ https://oss.sonatype.org/content/repositories/snapshots
+
+