Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions packages/network-controller/src/NetworkController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -723,12 +723,12 @@ export class NetworkController extends BaseControllerV2<
/**
* Rolls back provider config to the previous provider in case of errors or inability to connect during network switch.
*/
rollbackToPreviousProvider() {
async rollbackToPreviousProvider() {
const specifier = this.#previousNetworkSpecifier;
if (isNetworkType(specifier)) {
this.setProviderType(specifier);
await this.setProviderType(specifier);
} else if (typeof specifier === 'string') {
this.setActiveNetwork(specifier);
await this.setActiveNetwork(specifier);
}
}
}
Expand Down
100 changes: 41 additions & 59 deletions packages/network-controller/tests/NetworkController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4753,7 +4753,9 @@ describe('NetworkController', () => {
rpcTarget: rpcUrlOrTarget,
type: NetworkType.rpc,
});
controller.rollbackToPreviousProvider();

await controller.rollbackToPreviousProvider();

expect(controller.state.providerConfig).toStrictEqual(
initialProviderConfig,
);
Expand Down Expand Up @@ -4797,8 +4799,8 @@ describe('NetworkController', () => {
messenger,
'NetworkController:providerConfigChange',
{
produceEvents: () => {
controller.rollbackToPreviousProvider();
produceEvents: async () => {
await controller.rollbackToPreviousProvider();
},
},
);
Expand Down Expand Up @@ -4884,19 +4886,22 @@ describe('NetworkController', () => {
},
},
]);

createMetamaskProviderMock.mockReturnValue(fakeMetamaskProvider);
await controller.setActiveNetwork('testNetworkConfigurationId');
expect(controller.state.networkDetails).toStrictEqual({
isEIP1559Compatible: true,
});

await waitForStateChanges(messenger, {
propertyPath: ['networkId'],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you! I must have missed this when I wrote it.

propertyPath: ['networkStatus'],
count: 1,
produceStateChanges: () => {
// Intentionally not awaited because we want to check state
// partway through the operation
controller.rollbackToPreviousProvider();
},
});

expect(controller.state.networkStatus).toBe(
NetworkStatus.Unknown,
);
Expand Down Expand Up @@ -4947,16 +4952,11 @@ describe('NetworkController', () => {
},
},
]);

createMetamaskProviderMock.mockReturnValue(fakeMetamaskProvider);
await controller.setActiveNetwork('testNetworkConfigurationId');
await waitForStateChanges(messenger, {
propertyPath: ['networkId'],
count: 1,
produceStateChanges: () => {
controller.rollbackToPreviousProvider();
},
});

await controller.rollbackToPreviousProvider();

const { provider } = controller.getProviderAndBlockTracker();
const promisifiedSendAsync = promisify(provider.sendAsync).bind(
provider,
Expand Down Expand Up @@ -5005,13 +5005,8 @@ describe('NetworkController', () => {
const { provider: providerBefore } =
controller.getProviderAndBlockTracker();

await waitForStateChanges(messenger, {
propertyPath: ['networkId'],
count: 1,
produceStateChanges: () => {
controller.rollbackToPreviousProvider();
},
});
await controller.rollbackToPreviousProvider();

const { provider: providerAfter } =
controller.getProviderAndBlockTracker();

Expand Down Expand Up @@ -5072,13 +5067,8 @@ describe('NetworkController', () => {
await controller.setActiveNetwork('testNetworkConfigurationId');
expect(controller.state.networkId).toStrictEqual('999');

await waitForStateChanges(messenger, {
propertyPath: ['networkId'],
count: 2,
produceStateChanges: () => {
controller.rollbackToPreviousProvider();
},
});
await controller.rollbackToPreviousProvider();

expect(controller.state.networkId).toStrictEqual('1');
},
);
Expand Down Expand Up @@ -5128,7 +5118,9 @@ describe('NetworkController', () => {
rpcTarget: undefined,
id: undefined,
});
controller.rollbackToPreviousProvider();

await controller.rollbackToPreviousProvider();

expect(controller.state.providerConfig).toStrictEqual({
...networkConfiguration,
rpcTarget: rpcUrlOrTarget,
Expand Down Expand Up @@ -5190,7 +5182,9 @@ describe('NetworkController', () => {
rpcTarget: rpcUrlOrTarget2,
type: NetworkType.rpc,
});
controller.rollbackToPreviousProvider();

await controller.rollbackToPreviousProvider();

expect(controller.state.providerConfig).toStrictEqual({
...initialProviderConfig,
rpcTarget: rpcUrlOrTarget1,
Expand Down Expand Up @@ -5242,8 +5236,8 @@ describe('NetworkController', () => {
messenger,
'NetworkController:providerConfigChange',
{
produceEvents: () => {
controller.rollbackToPreviousProvider();
produceEvents: async () => {
await controller.rollbackToPreviousProvider();
},
},
);
Expand All @@ -5254,7 +5248,7 @@ describe('NetworkController', () => {
);
});

it('resets the network state to "unknown" and the isEIP before emitting NetworkController:providerConfigChange', async () => {
it('resets the network state to "unknown" and empties the network details before emitting NetworkController:providerConfigChange', async () => {
const messenger = buildMessenger();
const initialProviderConfigNetworkConfiguration = {
rpcUrl: 'https://mock-rpc-url-2',
Expand Down Expand Up @@ -5332,19 +5326,22 @@ describe('NetworkController', () => {
expect(controller.state.networkStatus).toStrictEqual(
NetworkStatus.Available,
);

await controller.rollbackToPreviousProvider();
await waitForStateChanges(messenger, {
propertyPath: ['networkStatus'],
count: 1,
produceStateChanges: () => {
// Intentionally not awaited because we want to check state
// partway through the operation
controller.rollbackToPreviousProvider();
},
});

expect(controller.state.networkStatus).toStrictEqual(
NetworkStatus.Unknown,
);
expect(controller.state.networkDetails).toStrictEqual({
isEIP1559Compatible: false,
});
expect(controller.state.networkDetails).toStrictEqual({});
},
);
});
Expand Down Expand Up @@ -5397,16 +5394,11 @@ describe('NetworkController', () => {
},
},
]);

createMetamaskProviderMock.mockReturnValue(fakeMetamaskProvider);
await controller.setActiveNetwork('testNetworkConfigurationId1');
await waitForStateChanges(messenger, {
propertyPath: ['networkId'],
count: 1,
produceStateChanges: () => {
controller.rollbackToPreviousProvider();
},
});

await controller.rollbackToPreviousProvider();

const { provider } = controller.getProviderAndBlockTracker();
const promisifiedSendAsync = promisify(provider.sendAsync).bind(
provider,
Expand Down Expand Up @@ -5466,13 +5458,8 @@ describe('NetworkController', () => {
const { provider: providerBefore } =
controller.getProviderAndBlockTracker();

await waitForStateChanges(messenger, {
propertyPath: ['networkId'],
count: 1,
produceStateChanges: () => {
controller.rollbackToPreviousProvider();
},
});
await controller.rollbackToPreviousProvider();

const { provider: providerAfter } =
controller.getProviderAndBlockTracker();

Expand Down Expand Up @@ -5542,13 +5529,8 @@ describe('NetworkController', () => {
await controller.setActiveNetwork('testNetworkConfigurationId1');
expect(controller.state.networkId).toStrictEqual('999');

await waitForStateChanges(messenger, {
propertyPath: ['networkId'],
count: 2,
produceStateChanges: () => {
controller.rollbackToPreviousProvider();
},
});
await controller.rollbackToPreviousProvider();

expect(controller.state.networkId).toStrictEqual('1');
},
);
Expand Down Expand Up @@ -5594,7 +5576,7 @@ describe('NetworkController', () => {
rpcTarget: rpcUrlOrTarget,
type: NetworkType.rpc,
});
controller.rollbackToPreviousProvider();
await controller.rollbackToPreviousProvider();

expect(controller.state.providerConfig).toStrictEqual(
initialProviderConfig,
Expand Down Expand Up @@ -5628,7 +5610,7 @@ describe('NetworkController', () => {
...BUILT_IN_NETWORKS.sepolia,
}),
});
controller.rollbackToPreviousProvider();
await controller.rollbackToPreviousProvider();
expect(controller.state.providerConfig).toStrictEqual(
initialProviderConfig,
);
Expand Down