github.com/insolar/vanilla@v0.0.0-20201023172447-248fdf805322/throw/minimizer_test.go (about) 1 // Copyright 2020 Insolar Network Ltd. 2 // All rights reserved. 3 // This material is licensed under the Insolar License version 1.0, 4 // available at https://github.com/insolar/assured-ledger/blob/master/LICENSE.md. 5 6 package throw 7 8 import ( 9 "testing" 10 11 "github.com/stretchr/testify/require" 12 ) 13 14 const testStackDebugCall = "runtime/debug.Stack(0xc000313cc0, 0x1020601, 0x6)\n" + 15 "\t/go1.14.2/src/runtime/debug/stack.go:24 +0xa4\n" 16 17 const testStackDebug = testStackDebugCall + 18 testStackClear 19 20 const testStackPanic = testStackDebugCall + 21 testStackPanicNoDebug 22 23 const testStackPanicNoDebug = testStackPanicDefer + 24 testPanic + 25 testStackClear 26 27 const testStackPanicDefer = "github.com/insolar/assured-ledger/ledger-core/conveyor/smachine.RecoverSlotPanicWithStack(...)\n" + 28 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/smachine/api_panic.go:73\n" + 29 "github.com/insolar/assured-ledger/ledger-core/conveyor/smachine.recoverSlotPanicAsUpdate(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)\n" + 30 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/smachine/state_update_type.go:66 +0x169\n" + 31 "github.com/insolar/assured-ledger/ledger-core/conveyor/smachine.(*contextTemplate).discardAndUpdate(...)\n" + 32 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/smachine/context_basic.go:94\n" + 33 "github.com/insolar/assured-ledger/ledger-core/conveyor/smachine.(*executionContext).executeNextStep.func1(0xc000336ab0, 0xc0002748c0)\n" + 34 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/smachine/context_exec.go:123 +0x126\n" 35 36 const testPanic = "panic(0xe6b060, 0x11875c0)\n" + 37 "\t/go1.14.2/src/runtime/panic.go:975 +0x3f1\n" 38 39 const testStackValuable = testStackValuableOnce + testStackValuableOnce 40 41 const testStackValuableOnce = "github.com/insolar/assured-ledger/ledger-core/virtual/execute.(*SMExecute).stepWaitObjectReady(0xc000352000, 0x11d51a0, 0xc000336ab0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)\n" + 42 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/virtual/execute/execute.go:161 +0x7ce\n" 43 44 const testStackBoundary = "github.com/insolar/assured-ledger/ledger-core/conveyor/smachine.(*executionContext).executeNextStep(0xc000336ab0, 0xc000336ab0, 0x1, 0x2208038, 0xc0003369c0, 0x101f001, 0x0, 0x0, 0x0, 0xb, ...)\n" + 45 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/smachine/context_exec.go:128 +0xfb\n" 46 47 const testStackClear = testStackValuable + 48 testStackBoundary + 49 testStackUseless 50 51 const testStackUseless = "github.com/insolar/assured-ledger/ledger-core/conveyor/smachine.(*SlotMachine)._executeSlot.func1(0x11c8fa0, 0xc000336aa0)\n" + 52 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/smachine/slot_machine_execute.go:222 +0x200\n" + 53 "github.com/insolar/assured-ledger/ledger-core/conveyor/sworker.(*SimpleSlotWorker).DetachableCall(0xc000336a80, 0xc000266b00, 0x1912640)\n" + 54 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/sworker/worker_simple.go:114 +0x49\n" + 55 "github.com/insolar/assured-ledger/ledger-core/conveyor/smachine.(*SlotMachine)._executeSlot(0xc0001da800, 0xc000480000, 0x4, 0x11c4bc0, 0xc000336a80, 0x2711, 0x0, 0x0)\n" + 56 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/smachine/slot_machine_execute.go:203 +0x210\n" + 57 "github.com/insolar/assured-ledger/ledger-core/conveyor/smachine.(*SlotMachine).executeWorkingSlots(0xc0001da800, 0x5, 0x11c4bc0, 0xc000336a80)\n" + 58 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/smachine/slot_machine_execute.go:183 +0x1ba\n" + 59 "github.com/insolar/assured-ledger/ledger-core/conveyor/smachine.(*SlotMachine).ScanOnce(0xc0001da800, 0x0, 0x11c4bc0, 0xc000336a80, 0xc0004473c8, 0x40dcbf, 0x20, 0xef77a0)\n" + 60 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/smachine/slot_machine_execute.go:120 +0x462\n" + 61 "github.com/insolar/assured-ledger/ledger-core/conveyor/smachine.(*SlotMachine).ScanNested.func1(0x11c4bc0, 0xc000336a80)\n" + 62 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/smachine/slot_machine_execute.go:35 +0x63\n" + 63 "github.com/insolar/assured-ledger/ledger-core/conveyor/sworker.(*AttachableSimpleSlotWorker).AttachAsNested(0xc00002ad90, 0xc0001da800, 0x11c8fa0, 0xc000336950, 0x2710, 0xc000336a50, 0x117e300)\n" + 64 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/sworker/worker_simple.go:44 +0x14b\n" + 65 "github.com/insolar/assured-ledger/ledger-core/conveyor/smachine.(*SlotMachine).ScanNested(0xc0001da800, 0x11d51a0, 0xc000336a20, 0x271000274800, 0x11ac860, 0xc00002ad90, 0xfac100, 0xc000336960, 0x0, 0x40)\n" + 66 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/smachine/slot_machine_execute.go:34 +0x126\n" + 67 "github.com/insolar/assured-ledger/ledger-core/conveyor.(*PulseSlotMachine).stepPresentLoop(0xc000067900, 0x11d51a0, 0xc000336a20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)\n" + 68 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/sm_pulse_slot.go:207 +0x91\n" + 69 "github.com/insolar/assured-ledger/ledger-core/conveyor/smachine.(*executionContext).executeNextStep(0xc000336a20, 0xc000336a20, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)\n" + 70 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/smachine/context_exec.go:128 +0xfb\n" + 71 "github.com/insolar/assured-ledger/ledger-core/conveyor/smachine.(*SlotMachine)._executeSlot.func1(0x11c8fa0, 0xc000336950)\n" + 72 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/smachine/slot_machine_execute.go:222 +0x200\n" + 73 "github.com/insolar/assured-ledger/ledger-core/conveyor/sworker.(*SimpleSlotWorker).DetachableCall(0xc000336930, 0xc000266a80, 0x1912640)\n" + 74 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/sworker/worker_simple.go:114 +0x49\n" + 75 "github.com/insolar/assured-ledger/ledger-core/conveyor/smachine.(*SlotMachine)._executeSlot(0xc0001da000, 0xc000400000, 0x2, 0x11c4bc0, 0xc000336930, 0x2711, 0x0, 0x0)\n" + 76 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/smachine/slot_machine_execute.go:203 +0x210\n" + 77 "github.com/insolar/assured-ledger/ledger-core/conveyor/smachine.(*SlotMachine).executeWorkingSlots(0xc0001da000, 0x6, 0x11c4bc0, 0xc000336930)\n" + 78 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/smachine/slot_machine_execute.go:183 +0x1ba\n" + 79 "github.com/insolar/assured-ledger/ledger-core/conveyor/smachine.(*SlotMachine).ScanOnce(0xc0001da000, 0xc00026ee00, 0x11c4bc0, 0xc000336930, 0xc000447e68, 0x40dcbf, 0x30, 0xf7c160)\n" + 80 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/smachine/slot_machine_execute.go:120 +0x462\n" + 81 "github.com/insolar/assured-ledger/ledger-core/conveyor.(*PulseConveyor).runWorker.func2(0x11c4bc0, 0xc000336930)\n" + 82 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/conveyor.go:488 +0x67\n" + 83 "github.com/insolar/assured-ledger/ledger-core/conveyor/sworker.(*AttachableSimpleSlotWorker).AttachTo(0xc00002ac70, 0xc0001da000, 0xc0001af500, 0xffffffff, 0xc00026ee20, 0x0)\n" + 84 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/sworker/worker_simple.go:59 +0xda\n" + 85 "github.com/insolar/assured-ledger/ledger-core/conveyor.(*PulseConveyor).runWorker(0xc000072f00, 0x0, 0xc0001864e0, 0xc0001b46d0)\n" + 86 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/conveyor.go:487 +0x1ad\n" + 87 testCreatedBy 88 89 const testCreatedBy = "created by github.com/insolar/assured-ledger/ledger-core/conveyor.(*PulseConveyor).StartWorker\n" + 90 "\t/go/src/github.com/insolar/assured-ledger/ledger-core/conveyor/conveyor.go:462 +0xe0\n" 91 92 const testBoundary = "github.com/insolar/assured-ledger/ledger-core/conveyor" 93 94 func TestMinimizeDebugStack(t *testing.T) { 95 require.Equal(t, []byte(testStackValuable), MinimizeDebugStack([]byte(testStackDebug), testBoundary, false)) 96 require.Equal(t, []byte(testStackValuable+testStackBoundary), MinimizeDebugStack([]byte(testStackDebug), testBoundary, true)) 97 98 require.Equal(t, []byte(testStackClear), MinimizeDebugStack([]byte(testStackDebug), "not found", false)) 99 require.Equal(t, []byte(testStackClear), MinimizeDebugStack([]byte(testStackDebug), "not found", true)) 100 101 require.Equal(t, []byte(testStackUseless), MinimizeDebugStack([]byte(testStackUseless), testBoundary, false)) 102 require.Equal(t, []byte(testStackUseless), MinimizeDebugStack([]byte(testStackUseless), testBoundary, true)) 103 104 require.Equal(t, []byte(testStackUseless), MinimizeDebugStack([]byte(testStackDebugCall+testStackUseless), testBoundary, false)) 105 require.Equal(t, []byte(testStackUseless), MinimizeDebugStack([]byte(testStackDebugCall+testStackUseless), testBoundary, true)) 106 } 107 108 func TestMinimizePanicStack(t *testing.T) { 109 const testPanicValuable = testPanic + testStackValuable 110 111 require.Equal(t, []byte(testPanicValuable), MinimizePanicStack([]byte(testStackPanic), testBoundary, false)) 112 require.Equal(t, []byte(testPanicValuable+testStackBoundary), MinimizePanicStack([]byte(testStackPanic), testBoundary, true)) 113 114 require.Equal(t, []byte(testStackPanicNoDebug), MinimizePanicStack([]byte(testStackPanic), "not found", false)) 115 require.Equal(t, []byte(testStackPanicNoDebug), MinimizePanicStack([]byte(testStackPanic), "not found", true)) 116 117 const testStackPanicUseless = testStackPanicDefer + testPanic + testStackUseless 118 119 require.Equal(t, []byte(testStackPanicUseless), MinimizePanicStack([]byte(testStackPanicUseless), testBoundary, false)) 120 require.Equal(t, []byte(testStackPanicUseless), MinimizePanicStack([]byte(testStackPanicUseless), testBoundary, true)) 121 } 122 123 func TestMinimizeMismatchedStack(t *testing.T) { 124 require.Equal(t, []byte(testStackValuable), MinimizePanicStack([]byte(testStackDebug), testBoundary, false)) 125 require.Equal(t, []byte(testStackValuable+testStackBoundary), MinimizePanicStack([]byte(testStackDebug), testBoundary, true)) 126 127 require.Equal(t, []byte(testStackClear), MinimizePanicStack([]byte(testStackDebug), "not found", false)) 128 require.Equal(t, []byte(testStackClear), MinimizePanicStack([]byte(testStackDebug), "not found", true)) 129 130 require.Equal(t, []byte(testStackUseless), MinimizePanicStack([]byte(testStackUseless), testBoundary, false)) 131 require.Equal(t, []byte(testStackUseless), MinimizePanicStack([]byte(testStackUseless), testBoundary, true)) 132 133 require.Equal(t, []byte(testStackUseless), MinimizePanicStack([]byte(testStackDebugCall+testStackUseless), testBoundary, false)) 134 require.Equal(t, []byte(testStackUseless), MinimizePanicStack([]byte(testStackDebugCall+testStackUseless), testBoundary, true)) 135 } 136 137 func TestMinimizeStackTrace(t *testing.T) { 138 require.Nil(t, MinimizeStackTrace(nil, testBoundary, false)) 139 require.Equal(t, testStackValuable, 140 MinimizeStackTrace(stackTrace{data: []byte(testStackDebug)}, testBoundary, false).StackTraceAsText()) 141 142 st := StackTrace(stackTrace{data: []byte(testStackUseless)}) 143 require.Equal(t, st, MinimizeStackTrace(st, testBoundary, false)) 144 }