Remove classic plugin infra
Summary: This removes all code duplication / old plugin infra that isn't needed anymore when all plugin run on the Sandy plugin infra structure. The diff is quite large, but the minimal one that passes tests and compiles. Existing tests are preserved by wrapping all remaining tests in `wrapSandy` for classic plugins where needed Reviewed By: passy Differential Revision: D29394738 fbshipit-source-id: 1315fabd9f048576aed15ed5f1cb6414d5fdbd40
This commit is contained in:
committed by
Facebook GitHub Bot
parent
9d6abd62c6
commit
16154e1343
@@ -7,8 +7,11 @@
|
||||
* @format
|
||||
*/
|
||||
|
||||
import {FlipperDevicePlugin} from '../../plugin';
|
||||
import {createMockFlipperWithPlugin} from '../../test-utils/createMockFlipperWithPlugin';
|
||||
import {FlipperPlugin} from '../../plugin';
|
||||
import {
|
||||
createMockFlipperWithPlugin,
|
||||
wrapSandy,
|
||||
} from '../../test-utils/createMockFlipperWithPlugin';
|
||||
import {Store, Client, sleep} from '../../';
|
||||
import {
|
||||
selectPlugin,
|
||||
@@ -26,6 +29,10 @@ import {
|
||||
_SandyPluginInstance,
|
||||
} from 'flipper-plugin';
|
||||
import {switchPlugin} from '../../reducers/pluginManager';
|
||||
import pluginMessageQueue, {
|
||||
State,
|
||||
queueMessages,
|
||||
} from '../../reducers/pluginMessageQueue';
|
||||
|
||||
type Events = {
|
||||
inc: {
|
||||
@@ -124,7 +131,6 @@ test('queue - events are NOT processed immediately if plugin is NOT selected (bu
|
||||
sendMessage('inc', {});
|
||||
sendMessage('inc', {delta: 2});
|
||||
sendMessage('inc', {delta: 3});
|
||||
expect(store.getState().pluginStates).toMatchInlineSnapshot(`Object {}`);
|
||||
expect(getTestPluginState(client).count).toBe(0);
|
||||
// the first message is already visible cause of the leading debounce
|
||||
expect(store.getState().pluginMessageQueue).toMatchInlineSnapshot(`
|
||||
@@ -482,21 +488,21 @@ test('queue - make sure resetting plugin state clears the message queue', async
|
||||
});
|
||||
|
||||
test('client - incoming messages are buffered and flushed together', async () => {
|
||||
class StubDeviceLogs extends FlipperDevicePlugin<any, any, any> {
|
||||
static id = 'DevicePlugin';
|
||||
|
||||
static supportsDevice() {
|
||||
return true;
|
||||
}
|
||||
class StubPlugin extends FlipperPlugin<any, any, any> {
|
||||
static id = 'StubPlugin';
|
||||
|
||||
static persistedStateReducer = jest.fn();
|
||||
}
|
||||
|
||||
const StubPluginWrapped = wrapSandy(StubPlugin);
|
||||
|
||||
const {client, store, device, sendMessage, pluginKey} =
|
||||
await createMockFlipperWithPlugin(TestPlugin);
|
||||
await createMockFlipperWithPlugin(TestPlugin, {
|
||||
additionalPlugins: [StubPluginWrapped],
|
||||
});
|
||||
selectDeviceLogs(store);
|
||||
|
||||
store.dispatch(registerPlugins([StubDeviceLogs]));
|
||||
store.dispatch(registerPlugins([StubPluginWrapped]));
|
||||
sendMessage('inc', {});
|
||||
sendMessage('inc', {delta: 2});
|
||||
sendMessage('inc', {delta: 3});
|
||||
@@ -506,14 +512,13 @@ test('client - incoming messages are buffered and flushed together', async () =>
|
||||
JSON.stringify({
|
||||
method: 'execute',
|
||||
params: {
|
||||
api: 'DevicePlugin',
|
||||
api: 'StubPlugin',
|
||||
method: 'log',
|
||||
params: {line: 'suff'},
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
expect(store.getState().pluginStates).toMatchInlineSnapshot(`Object {}`);
|
||||
expect(getTestPluginState(client).count).toBe(0);
|
||||
// the first message is already visible cause of the leading debounce
|
||||
expect(store.getState().pluginMessageQueue).toMatchInlineSnapshot(`
|
||||
@@ -529,17 +534,17 @@ test('client - incoming messages are buffered and flushed together', async () =>
|
||||
`);
|
||||
expect(client.messageBuffer).toMatchInlineSnapshot(`
|
||||
Object {
|
||||
"TestApp#Android#MockAndroidDevice#serial#DevicePlugin": Object {
|
||||
"TestApp#Android#MockAndroidDevice#serial#StubPlugin": Object {
|
||||
"messages": Array [
|
||||
Object {
|
||||
"api": "DevicePlugin",
|
||||
"api": "StubPlugin",
|
||||
"method": "log",
|
||||
"params": Object {
|
||||
"line": "suff",
|
||||
},
|
||||
},
|
||||
],
|
||||
"plugin": [Function],
|
||||
"plugin": "[SandyPluginInstance]",
|
||||
},
|
||||
"TestApp#Android#MockAndroidDevice#serial#TestPlugin": Object {
|
||||
"messages": Array [
|
||||
@@ -569,9 +574,9 @@ test('client - incoming messages are buffered and flushed together', async () =>
|
||||
await sleep(500);
|
||||
expect(store.getState().pluginMessageQueue).toMatchInlineSnapshot(`
|
||||
Object {
|
||||
"TestApp#Android#MockAndroidDevice#serial#DevicePlugin": Array [
|
||||
"TestApp#Android#MockAndroidDevice#serial#StubPlugin": Array [
|
||||
Object {
|
||||
"api": "DevicePlugin",
|
||||
"api": "StubPlugin",
|
||||
"method": "log",
|
||||
"params": Object {
|
||||
"line": "suff",
|
||||
@@ -602,19 +607,22 @@ test('client - incoming messages are buffered and flushed together', async () =>
|
||||
}
|
||||
`);
|
||||
expect(client.messageBuffer).toMatchInlineSnapshot(`Object {}`);
|
||||
expect(StubDeviceLogs.persistedStateReducer.mock.calls).toMatchInlineSnapshot(
|
||||
expect(StubPlugin.persistedStateReducer.mock.calls).toMatchInlineSnapshot(
|
||||
`Array []`,
|
||||
);
|
||||
|
||||
// tigger processing the queue
|
||||
const pluginKeyDevice = getPluginKey(client.id, device, StubDeviceLogs.id);
|
||||
await processMessageQueue(StubDeviceLogs, pluginKeyDevice, store);
|
||||
const pluginKeyDevice = getPluginKey(client.id, device, StubPlugin.id);
|
||||
await processMessageQueue(
|
||||
client.sandyPluginStates.get(StubPlugin.id)!,
|
||||
pluginKeyDevice,
|
||||
store,
|
||||
);
|
||||
|
||||
expect(StubDeviceLogs.persistedStateReducer.mock.calls)
|
||||
.toMatchInlineSnapshot(`
|
||||
expect(StubPlugin.persistedStateReducer.mock.calls).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
Array [
|
||||
Object {},
|
||||
undefined,
|
||||
"log",
|
||||
Object {
|
||||
"line": "suff",
|
||||
@@ -625,7 +633,7 @@ test('client - incoming messages are buffered and flushed together', async () =>
|
||||
|
||||
expect(store.getState().pluginMessageQueue).toMatchInlineSnapshot(`
|
||||
Object {
|
||||
"TestApp#Android#MockAndroidDevice#serial#DevicePlugin": Array [],
|
||||
"TestApp#Android#MockAndroidDevice#serial#StubPlugin": Array [],
|
||||
"TestApp#Android#MockAndroidDevice#serial#TestPlugin": Array [
|
||||
Object {
|
||||
"api": "TestPlugin",
|
||||
@@ -704,3 +712,39 @@ test('queue - messages that have not yet flushed be lost when disabling the plug
|
||||
);
|
||||
expect(getTestPluginState(client)).toEqual({count: 0});
|
||||
});
|
||||
|
||||
test('queue will be cleaned up when it exceeds maximum size', () => {
|
||||
let state: State = {};
|
||||
const pluginKey = 'test';
|
||||
const queueSize = 5000;
|
||||
let i = 0;
|
||||
for (i = 0; i < queueSize; i++) {
|
||||
state = pluginMessageQueue(
|
||||
state,
|
||||
queueMessages(pluginKey, [{method: 'test', params: {i}}], queueSize),
|
||||
);
|
||||
}
|
||||
// almost full
|
||||
expect(state[pluginKey][0]).toEqual({method: 'test', params: {i: 0}});
|
||||
expect(state[pluginKey].length).toBe(queueSize); // ~5000
|
||||
expect(state[pluginKey][queueSize - 1]).toEqual({
|
||||
method: 'test',
|
||||
params: {i: queueSize - 1}, // ~4999
|
||||
});
|
||||
|
||||
state = pluginMessageQueue(
|
||||
state,
|
||||
queueMessages(pluginKey, [{method: 'test', params: {i: ++i}}], queueSize),
|
||||
);
|
||||
|
||||
const newLength = Math.ceil(0.9 * queueSize) + 1; // ~4500
|
||||
expect(state[pluginKey].length).toBe(newLength);
|
||||
expect(state[pluginKey][0]).toEqual({
|
||||
method: 'test',
|
||||
params: {i: queueSize - newLength + 1}, // ~500
|
||||
});
|
||||
expect(state[pluginKey][newLength - 1]).toEqual({
|
||||
method: 'test',
|
||||
params: {i: i}, // ~50001
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user