core/plugins/c9.ide.run.debug/debuggers/chrome/chrome-debug-proxy_test.js

120 lines
3.8 KiB
JavaScript

"use strict";
"use server";
require("c9/inline-mocha")(module);
require("amd-loader");
var childProcess = require("child_process");
var fs = require("fs");
var net = require("net");
var socketPath = process.env.HOME + "/.c9/chrome.sock";
if (process.platform == "win32")
socketPath = "\\\\.\\pipe\\" + socketPath.replace(/\//g, "\\");
process.chdir(__dirname);
function debuggerProxy(id, handlers) {
var p1 = childProcess.spawn(process.execPath, ["./chrome-debug-proxy.js"]);
p1.stdout.once("data", function(data) {
handlers.onStart && handlers.onStart();
});
p1.stdout.on("data", function(data) {
console.log(id, data + "");
});
p1.stderr.on("data", function(data) {
console.log(id, data + "");
});
p1.on("close", function(code) {
console.log(id, code);
});
p1.on("exit", function(code) {
handlers.onExit && handlers.onExit(code);
console.log(id, code);
});
p1.on("error", function(code) {
console.log(id, code);
});
return {
kill: p1.kill.bind(p1),
};
}
describe.skip(__filename, function() {
var p1, p2, p3;
this.timeout(100000);
it("should exit if another server is running", function(done) {
try {
fs.unlinkSync(socketPath);
} catch (e) {}
p1 = debuggerProxy("p1", {
onStart: function() {
},
onExit: function() {
done();
}
});
p2 = debuggerProxy("p2", {
onExit: function() {
done();
}
});
});
it("should connect to new node", function(done) {
var port = 58974;
p3 = childProcess.spawn(process.execPath, [
"--inspect=" + port, "-e", "var fs=require('fs'); path=process.argv[1];"
+ "setInterval(x=>fs.existsSync(path) || process.exit(1), 100)", socketPath
], { stdio: "inherit" });
var client = net.connect(socketPath, function() {
client.on("data", function handShake(data) {
console.log("=====" + data);
var msg = JSON.parse(data.slice(0, -1));
if (msg.$ == "connected") {
p3.kill();
done();
}
});
client.write(JSON.stringify({ m: "ping" }) + "\0");
client.write(JSON.stringify({ $: "connect", port: port }) + "\0");
});
});
it("should connect to old node", function(done) {
var port = 58374;
p3 = childProcess.spawn(process.execPath, [
"--debug=" + port, "-e", "var fs=require('fs'); path=process.argv[1];"
+ "setInterval(x=>fs.existsSync(path) || process.exit(1), 100)", socketPath
], { stdio: "inherit" });
var client = net.connect(socketPath, function() {
client.on("data", function handShake(data) {
data = data.toString("utf8");
console.log("=====" + data.toString("utf8"));
var msg = data[0] == "{" && JSON.parse(data.slice(0, -1));
console.log(msg)
if (msg.$ == "connected") {
var req = {
seq: 3,
type: 'request',
command: 'scripts',
arguments: { types: 4, includeSource: false }
};
client.write(JSON.stringify(req) + "\0");
}
else if (msg.request_seq == 3) {
p3.kill();
done();
}
});
client.write(JSON.stringify({ $: "connect", port: port }) + "\0");
});
});
after(function() {
p1 && p1.kill();
p2 && p2.kill();
p3 && p3.kill();
fs.unlinkSync(socketPath);
});
});