summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhoussainy@google.com <houssainy@google.com>2014-09-08 10:36:11 +0000
committerhoussainy@google.com <houssainy@google.com>2014-09-08 10:36:11 +0000
commitde4cf016beed6058f59285ce8cd1e7e5e47be28f (patch)
treeff948ff86c150201e4fb208a95190dbd0dccc0dd
parent12cdd25899c6278c711ded533dbcb8a83a90db71 (diff)
downloadwebrtc-de4cf016beed6058f59285ce8cd1e7e5e47be28f.tar.gz
- Adding AndroidDeviceManager to botManager.js to help in selecting devices, in case running test on Android devices.
- Select BotType using nodeJs terminal command. - ping_pong.js test added. R=andresp@webrtc.org Review URL: https://webrtc-codereview.appspot.com/19159004 git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@7099 4adac7df-926f-26a2-2b94-8c16560cd09d
-rw-r--r--tools/rtcbot/README16
-rw-r--r--tools/rtcbot/botmanager.js63
-rw-r--r--tools/rtcbot/test.js9
-rw-r--r--tools/rtcbot/test/ping_pong.js19
4 files changed, 99 insertions, 8 deletions
diff --git a/tools/rtcbot/README b/tools/rtcbot/README
index 06fa3327..927d3779 100644
--- a/tools/rtcbot/README
+++ b/tools/rtcbot/README
@@ -12,12 +12,16 @@ The host runs in node.js, but the test code is run in an isolated context with
no access to node.js specifics other than the exposed api via a test variable.
Part of the exposed api (test.spawnBot) allows a test to spawn a bot and
-access its exposed API. Details are in BotManager.js.
+access its exposed API. Details are in botmanager.js.
== How to run the test ==
$ cd trunk/webrtc/tool/rtcbot
$ npm install express browserify ws websocket-stream dnode
- $ node test.js
+ $ node test.js <bot_type> <test_file_path>
+
+ <bot_type> — the type of the running bot. For example:
+ - chrome: chrome on host machine.
+ - android: android device. Details in "Android" Section.
== Example on how to install nodejs ==
$ cd /work/tools/
@@ -25,3 +29,11 @@ access its exposed API. Details are in BotManager.js.
$ export NVM_DIR=/work/tools/nvm; source $NVM_DIR/nvm.sh
$ nvm install 0.10
$ nvm use 0.10
+
+== Android ==
+Before running test with Android one MUST forward the device port 8080 to the
+host machine. That is easy to achieve with chrome port forwarding tools.
+ - Visit chrome://inspect/devices on the host machine.
+ - Configure and enable port forwarding 8080 -> localhost:8080
+ - Leave chrome running in the background on your Android device till
+ the test is done. \ No newline at end of file
diff --git a/tools/rtcbot/botmanager.js b/tools/rtcbot/botmanager.js
index 667c1e8c..e8f8b9b2 100644
--- a/tools/rtcbot/botmanager.js
+++ b/tools/rtcbot/botmanager.js
@@ -28,10 +28,24 @@ BotManager = function () {
this.pendingConnections_ = [];
}
+BotManager.BotTypes = {
+ CHROME : 'chrome',
+};
+
BotManager.prototype = {
- spawnNewBot: function (name, callback) {
+ createBot_: function (name, botType, callback) {
+ switch(botType) {
+ case BotManager.BotTypes.CHROME:
+ return new BrowserBot(name, callback);
+ default:
+ console.log('Error: Type ' + botType + ' not supported by rtc-Bot!');
+ process.exit(1);
+ }
+ },
+
+ spawnNewBot: function (name, botType, callback) {
this.startWebSocketServer_();
- var bot = new BrowserBot(name, callback);
+ var bot = this.createBot_(name, botType, callback);
this.bots_.push(bot);
this.pendingConnections_.push(bot.onBotConnected.bind(bot));
},
@@ -115,4 +129,49 @@ BrowserBot.prototype = {
__proto__: Bot.prototype
}
+AndroidDeviceManager = function () {
+ this.connectedDevices_ = [];
+}
+
+AndroidDeviceManager.prototype = {
+ getNewDevice: function (callback) {
+ this.listDevices_(function (devices) {
+ for (var i = 0; i < devices.length; i++) {
+ if (!this.connectedDevices_[devices[i]]) {
+ this.connectedDevices_[devices[i]] = devices[i];
+ callback(this.connectedDevices_[devices[i]]);
+ return;
+ }
+ }
+ if (devices.length == 0) {
+ console.log('Error: No connected devices!');
+ } else {
+ console.log('Error: There is no enough connected devices.');
+ }
+ process.exit(1);
+ }.bind(this));
+ },
+
+ listDevices_: function (callback) {
+ child.exec('adb devices' , function (error, stdout, stderr) {
+ var devices = [];
+ if (error || stderr) {
+ console.log('' + (error || stderr));
+ }
+ if (stdout) {
+ // The first line is "List of devices attached"
+ // and the following lines:
+ // <serial number> <device/emulator>
+ var tempList = ('' + stdout).split("\n").slice(1);
+ for (var i = 0; i < tempList.length; i++) {
+ if (tempList[i] == "") {
+ continue;
+ }
+ devices.push(tempList[i].split("\t")[0]);
+ }
+ }
+ callback(devices);
+ });
+ },
+}
module.exports = BotManager;
diff --git a/tools/rtcbot/test.js b/tools/rtcbot/test.js
index 83bb39f4..1768c091 100644
--- a/tools/rtcbot/test.js
+++ b/tools/rtcbot/test.js
@@ -16,11 +16,12 @@ var fs = require('fs');
var vm = require('vm');
var BotManager = require('./botmanager.js');
-function Test() {
+function Test(botType) {
// Make the test fail if not completed in 3 seconds.
this.timeout_ = setTimeout(
this.fail.bind(this, "Test timeout!"),
- 3000);
+ 5000);
+ this.botType_ = botType;
}
Test.prototype = {
@@ -71,14 +72,14 @@ Test.prototype = {
// Lazy initialization of botmanager.
if (!this.botManager_)
this.botManager_ = new BotManager();
- this.botManager_.spawnNewBot(name, doneCallback);
+ this.botManager_.spawnNewBot(name, this.botType_, doneCallback);
},
}
function runTest(testfile) {
console.log("Running test: " + testfile);
var script = vm.createScript(fs.readFileSync(testfile), testfile);
- script.runInNewContext({ test: new Test() });
+ script.runInNewContext({ test: new Test(process.argv[2]) });
}
runTest("./test/simple_offer_answer.js");
diff --git a/tools/rtcbot/test/ping_pong.js b/tools/rtcbot/test/ping_pong.js
new file mode 100644
index 00000000..e519738b
--- /dev/null
+++ b/tools/rtcbot/test/ping_pong.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree. An additional intellectual property rights grant can be found
+// in the file PATENTS. All contributing project authors may
+// be found in the AUTHORS file in the root of the source tree.
+//
+function testPingPong(bot) {
+ test.log('bot:alice > Sending Ping to bot');
+ bot.ping(gotAnswer);
+
+ function gotAnswer(answer) {
+ test.log('bot > ' + answer);
+ test.done();
+ }
+}
+
+test.spawnBot("alice", testPingPong);