mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 19:35:51 +00:00
bug 1600330: remote: test nsIRemoteAgent r=remote-protocol-reviewers,maja_zf,whimboo
Adds browser-chrome tests for the main entry point of the remote agent, nsIRemoteAgent. add_agent_task() wraps add_plain_task() (which again wraps the original add_task()) so we can ensure that the agent isn't listening before a test runs, and that any modified state such as preferences is reset afterwards. The tests rely heavily on the assumption that nsIRemoteAgent.close() behaves as a no-op when the server is not listening. This patch is a follow-up to bug 1590828. Differential Revision: https://phabricator.services.mozilla.com/D55456 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
ff89580849
commit
b7a5c8548a
@ -6,6 +6,7 @@ support-files =
|
||||
chrome-remote-interface.js
|
||||
head.js
|
||||
|
||||
[browser_agent.js]
|
||||
[browser_cdp.js]
|
||||
[browser_main_target.js]
|
||||
[browser_session.js]
|
||||
|
109
remote/test/browser/browser_agent.js
Normal file
109
remote/test/browser/browser_agent.js
Normal file
@ -0,0 +1,109 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
const { Preferences } = ChromeUtils.import(
|
||||
"resource://gre/modules/Preferences.jsm"
|
||||
);
|
||||
|
||||
const URL = Services.io.newURI("http://localhost:0");
|
||||
|
||||
// set up test conditions and clean up
|
||||
function add_agent_task(taskFn) {
|
||||
add_plain_task(async () => {
|
||||
try {
|
||||
await RemoteAgent.close();
|
||||
await taskFn();
|
||||
} finally {
|
||||
Preferences.reset("remote.enabled");
|
||||
Preferences.reset("remote.force-local");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
add_agent_task(async function listening() {
|
||||
is(RemoteAgent.listening, false, "Agent is not listening");
|
||||
await RemoteAgent.listen(URL);
|
||||
is(RemoteAgent.listening, true, "Agent is listening");
|
||||
});
|
||||
|
||||
add_agent_task(async function listen() {
|
||||
const port = getNonAtomicFreePort();
|
||||
|
||||
let boundURL;
|
||||
function observer(subject, topic, data) {
|
||||
Services.obs.removeObserver(observer, topic);
|
||||
boundURL = Services.io.newURI(data);
|
||||
}
|
||||
Services.obs.addObserver(observer, "remote-listening");
|
||||
|
||||
await RemoteAgent.listen("http://localhost:" + port);
|
||||
isnot(boundURL, undefined, "remote-listening observer notified");
|
||||
is(
|
||||
boundURL.port,
|
||||
port,
|
||||
`expected default port ${port}, got ${boundURL.port}`
|
||||
);
|
||||
});
|
||||
|
||||
add_agent_task(async function listenWhenDisabled() {
|
||||
Preferences.set("remote.enabled", false);
|
||||
try {
|
||||
await RemoteAgent.listen(URL);
|
||||
fail("listen() did not return exception");
|
||||
} catch (e) {
|
||||
is(e.result, Cr.NS_ERROR_NOT_AVAILABLE);
|
||||
is(e.message, "Disabled by preference");
|
||||
}
|
||||
});
|
||||
|
||||
// TODO(ato): https://bugzil.la/1590829
|
||||
add_agent_task(async function listenTakesString() {
|
||||
await RemoteAgent.listen("http://localhost:0");
|
||||
await RemoteAgent.close();
|
||||
});
|
||||
|
||||
// TODO(ato): https://bugzil.la/1590829
|
||||
add_agent_task(async function listenNonURL() {
|
||||
try {
|
||||
await RemoteAgent.listen("foobar");
|
||||
fail("listen() did not reject non-URL");
|
||||
} catch (e) {
|
||||
is(e.result, Cr.NS_ERROR_MALFORMED_URI);
|
||||
}
|
||||
});
|
||||
|
||||
add_agent_task(async function listenRestrictedToLoopbackDevice() {
|
||||
try {
|
||||
await RemoteAgent.listen("http://0.0.0.0:0");
|
||||
fail("listen() did not reject non-loopback device");
|
||||
} catch (e) {
|
||||
is(e.result, Cr.NS_ERROR_ILLEGAL_VALUE);
|
||||
is(e.message, "Restricted to loopback devices");
|
||||
}
|
||||
});
|
||||
|
||||
add_agent_task(async function listenNonLoopbackDevice() {
|
||||
Preferences.set("remote.force-local", false);
|
||||
await RemoteAgent.listen("http://0.0.0.0:0");
|
||||
});
|
||||
|
||||
add_agent_task(async function test_close() {
|
||||
await RemoteAgent.listen(URL);
|
||||
await RemoteAgent.close();
|
||||
// no-op when not listening
|
||||
await RemoteAgent.close();
|
||||
});
|
||||
|
||||
function getNonAtomicFreePort() {
|
||||
const so = Cc["@mozilla.org/network/server-socket;1"].createInstance(
|
||||
Ci.nsIServerSocket
|
||||
);
|
||||
try {
|
||||
so.init(-1, true /* aLoopbackOnly */, -1 /* aBackLog */);
|
||||
return so.port;
|
||||
} finally {
|
||||
so.close();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user