third version
This commit is contained in:
@@ -96,20 +96,20 @@ func legalTransition(from, to domain.SystemState) bool {
|
||||
return true
|
||||
}
|
||||
allowed := map[domain.SystemState][]domain.SystemState{
|
||||
domain.StateInit: {domain.StateSyncInstruments, domain.StateWaitExitWindow},
|
||||
domain.StateInit: {domain.StateSyncInstruments, domain.StateWaitExitWindow, domain.StatePlaceExitOrders, domain.StateMonitorExitOrders, domain.StateGenerateSignals, domain.StatePlaceEntryOrders, domain.StateHoldOvernight, domain.StateReconcile, domain.StateSleep},
|
||||
domain.StateSyncInstruments: {domain.StateSyncMarketData},
|
||||
domain.StateSyncMarketData: {domain.StateGenerateSignals},
|
||||
domain.StateGenerateSignals: {domain.StateWaitEntryWindow},
|
||||
domain.StateGenerateSignals: {domain.StateWaitEntryWindow, domain.StatePlaceEntryOrders, domain.StateHoldOvernight, domain.StateSleep},
|
||||
domain.StateWaitEntryWindow: {domain.StatePlaceEntryOrders, domain.StateSleep},
|
||||
domain.StatePlaceEntryOrders: {domain.StateMonitorEntryOrders, domain.StateReconcile},
|
||||
domain.StateMonitorEntryOrders: {domain.StateHoldOvernight, domain.StateReconcile},
|
||||
domain.StateHoldOvernight: {domain.StateWaitExitWindow},
|
||||
domain.StatePlaceEntryOrders: {domain.StateMonitorEntryOrders, domain.StateHoldOvernight, domain.StateWaitExitWindow, domain.StatePlaceExitOrders, domain.StateMonitorExitOrders, domain.StateReconcile},
|
||||
domain.StateMonitorEntryOrders: {domain.StateHoldOvernight, domain.StateWaitExitWindow, domain.StatePlaceExitOrders, domain.StateMonitorExitOrders, domain.StateReconcile},
|
||||
domain.StateHoldOvernight: {domain.StateWaitExitWindow, domain.StatePlaceExitOrders, domain.StateMonitorExitOrders, domain.StateReconcile},
|
||||
domain.StateWaitExitWindow: {domain.StatePlaceExitOrders},
|
||||
domain.StatePlaceExitOrders: {domain.StateMonitorExitOrders, domain.StateReconcile},
|
||||
domain.StateMonitorExitOrders: {domain.StateReconcile},
|
||||
domain.StateReconcile: {domain.StateReport, domain.StateHalted},
|
||||
domain.StateReconcile: {domain.StateReport, domain.StateHalted, domain.StateGenerateSignals, domain.StateSleep},
|
||||
domain.StateReport: {domain.StateSleep},
|
||||
domain.StateSleep: {domain.StateInit, domain.StateWaitExitWindow, domain.StateGenerateSignals},
|
||||
domain.StateSleep: {domain.StateInit, domain.StateWaitExitWindow, domain.StatePlaceExitOrders, domain.StateMonitorExitOrders, domain.StateGenerateSignals, domain.StatePlaceEntryOrders, domain.StateHoldOvernight, domain.StateReconcile},
|
||||
}
|
||||
for _, candidate := range allowed[from] {
|
||||
if candidate == to {
|
||||
|
||||
@@ -62,6 +62,21 @@ func TestUnhaltPreservesMode(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestCalendarRecoveryAllowsRestartInsideExitWindow(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
repo := testutil.NewMemoryRepository()
|
||||
system := New(repo, domain.ModePaper)
|
||||
if err := system.Transition(ctx, domain.StateInit, domain.StatePlaceExitOrders); err != nil {
|
||||
t.Fatalf("INIT -> PLACE_EXIT_ORDERS should be legal on restart: %v", err)
|
||||
}
|
||||
if err := repo.SaveSystemState(ctx, domain.StateHoldOvernight, domain.ModePaper, false, "", "{}"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := system.Transition(ctx, domain.StateHoldOvernight, domain.StatePlaceExitOrders); err != nil {
|
||||
t.Fatalf("HOLD_OVERNIGHT -> PLACE_EXIT_ORDERS should be legal on restart: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRecoverFromMonitorEntryHaltsOnCriticalReconciliationDiff(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
repo := testutil.NewMemoryRepository()
|
||||
|
||||
Reference in New Issue
Block a user