forked from electron/electron
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add linux powerMonitor tests using python-dbusmock
- Loading branch information
Showing
4 changed files
with
118 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
from dbusmock import DBusTestCase | ||
|
||
import atexit | ||
|
||
def cleanup(): | ||
DBusTestCase.stop_dbus(DBusTestCase.system_bus_pid) | ||
|
||
|
||
atexit.register(cleanup) | ||
DBusTestCase.start_system_bus() | ||
# create a mock for "org.freedesktop.login1" using python-dbusmock | ||
# preconfigured template | ||
(logind_mock, logind) = DBusTestCase.spawn_server_template('logind') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
// For these tests we use a fake DBus daemon to verify powerMonitor module | ||
// interaction with the system bus. This requires python-dbusmock installed and | ||
// running (with the DBUS_SYSTEM_BUS_ADDRESS environment variable set). | ||
// script/test.py will take care of spawning the fake DBus daemon and setting | ||
// DBUS_SYSTEM_BUS_ADDRESS when python-dbusmock is installed. | ||
// | ||
// See https://pypi.python.org/pypi/python-dbusmock for more information about | ||
// python-dbusmock. | ||
const assert = require('assert') | ||
const dbus = require('dbus-native') | ||
const Promise = require('bluebird') | ||
|
||
const skip = process.platform !== 'linux' || !process.env.DBUS_SYSTEM_BUS_ADDRESS; | ||
|
||
(skip ? describe.skip : describe)('powerMonitor', () => { | ||
let logindMock, powerMonitor, getCalls, emitSignal, reset | ||
|
||
before(async () => { | ||
const systemBus = dbus.systemBus() | ||
const loginService = systemBus.getService('org.freedesktop.login1') | ||
const getInterface = Promise.promisify(loginService.getInterface, {context: loginService}) | ||
logindMock = await getInterface('/org/freedesktop/login1', 'org.freedesktop.DBus.Mock') | ||
getCalls = Promise.promisify(logindMock.GetCalls, {context: logindMock}) | ||
emitSignal = Promise.promisify(logindMock.EmitSignal, {context: logindMock}) | ||
reset = Promise.promisify(logindMock.Reset, {context: logindMock}) | ||
}) | ||
|
||
after(async () => { | ||
await reset() | ||
}) | ||
|
||
describe('when powerMonitor module is loaded', () => { | ||
function onceMethodCalled (done) { | ||
function cb () { | ||
logindMock.removeListener('MethodCalled', cb) | ||
} | ||
done() | ||
return cb | ||
} | ||
|
||
before((done) => { | ||
logindMock.on('MethodCalled', onceMethodCalled(done)) | ||
// lazy load powerMonitor after we listen to MethodCalled mock signal | ||
powerMonitor = require('electron').remote.powerMonitor | ||
}) | ||
|
||
it('should call Inhibit to delay suspend', async () => { | ||
const calls = await getCalls() | ||
assert.equal(calls.length, 1) | ||
assert.deepEqual(calls[0].slice(1), [ | ||
'Inhibit', [ | ||
[[{type: 's', child: []}], ['sleep']], | ||
[[{type: 's', child: []}], ['electron']], | ||
[[{type: 's', child: []}], ['Application cleanup before suspend']], | ||
[[{type: 's', child: []}], ['delay']] | ||
] | ||
]) | ||
}) | ||
|
||
describe('when PrepareForSleep(true) signal is sent by logind', () => { | ||
it('should emit "suspend" event', (done) => { | ||
powerMonitor.once('suspend', () => done()) | ||
emitSignal('org.freedesktop.login1.Manager', 'PrepareForSleep', | ||
'b', [['b', true]]) | ||
}) | ||
|
||
describe('when PrepareForSleep(false) signal is sent by logind', () => { | ||
it('should emit "resume" event', (done) => { | ||
powerMonitor.once('resume', () => done()) | ||
emitSignal('org.freedesktop.login1.Manager', 'PrepareForSleep', | ||
'b', [['b', false]]) | ||
}) | ||
|
||
it('should have called Inhibit again', async () => { | ||
const calls = await getCalls() | ||
assert.equal(calls.length, 2) | ||
assert.deepEqual(calls[1].slice(1), [ | ||
'Inhibit', [ | ||
[[{type: 's', child: []}], ['sleep']], | ||
[[{type: 's', child: []}], ['electron']], | ||
[[{type: 's', child: []}], ['Application cleanup before suspend']], | ||
[[{type: 's', child: []}], ['delay']] | ||
] | ||
]) | ||
}) | ||
}) | ||
}) | ||
}) | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters