---
title: EPM integration tests
tags: parity, FRAME, staking
---
# EPM integration tests
Related to
- https://github.com/paritytech/substrate/issues/9057
- https://github.com/paritytech/substrate/pull/12972
**Goals**:
- Improve integration tests coverage for EPM, staking and related pallets;
- Test different edge and incident cases
- EPM flow incidents
- DataProvider incidents, insufficient data
- Set up testbed in Versi to tests against different network conditions;
- Document potential incident cases and how to solve them IRL;
### Testing scenarios
**1. Replicate the [Kusama incident](https://hackmd.io/Dt1L-JMtRc2y5FiOQik88A)**
**Root problem**: New session starts, staking is in `Forcing::ForceNew` due to slashes and calls into `EPM::elect()`. If EPM is in `Phase::Off` or the `Phase::Signed` has started recently, the solution queue may be empty as the election snapshot and/or solution for the era does not exist yet. As the election fails (and if the fallback election fails too), the EPM enters in emergency mode until a new solution is forced by `ForceOrigin`.
- 1.1. Kusama incident: `staking::SessionManager::new_session()` triggered a new election after slashes happened:
1. Slash enough validators in an era so that the list of offenders is larger than `T::OffendingValidatorsThreshold`.
- Expected behaviour: staking sets `Forcing::ForceNew`
2. New session starts, `staking::SessionManager::new_session()` is called.
- Expected behaviour: since `Forcing::ForceNew` is set, `fn try_trigger_new_era` is called, which calls into `<T::ElectionProvider>::elect()`
3. If EPM is in `Phase::Off` (or `Phase::Signed` and solution queue is still empty), the feasibility test does not complete.
- Expected behaviour: if `T::Fallback` fails, the election fails; EPM phase goes to `Phase::Emergency`.
**Related**:
- 1.2. EPM failing with empty snapshot
- 1.3. EPM failing with non-empty snapshot
**2. Large validator slash events**
- 2.1. Slash validator set 10% each era (+ document what happens).
- 2.2. Slashing event decreases score below `MinUntrustedScore`.
**3. OCW miner behavior**
- 3.1. No OCW miner solution during signed phase; No unsigned submission.
**4. Emergency phase**
- 4.1. During emergency phase, slash a % of the validators/nominators in the static snapshot.
---