(t *testing.T)
| 1010 | } |
| 1011 | |
| 1012 | func TestRuntimeTimeoutOpaqueNotFreedInHandler(t *testing.T) { |
| 1013 | base := timeoutOpaqueCount() |
| 1014 | |
| 1015 | rt := NewRuntime() |
| 1016 | defer rt.Close() |
| 1017 | ctx := rt.NewContext() |
| 1018 | defer ctx.Close() |
| 1019 | |
| 1020 | rt.SetExecuteTimeout(1) |
| 1021 | require.Equal(t, base+1, timeoutOpaqueCount()) |
| 1022 | |
| 1023 | result := ctx.Eval(`while(true){}`) |
| 1024 | defer result.Free() |
| 1025 | require.True(t, result.IsException()) |
| 1026 | |
| 1027 | err := ctx.Exception() |
| 1028 | require.Error(t, err) |
| 1029 | require.Contains(t, err.Error(), "interrupted") |
| 1030 | |
| 1031 | // timeoutHandler should not free opaque state; cleanup happens on clear/replace. |
| 1032 | require.Equal(t, base+1, timeoutOpaqueCount()) |
| 1033 | |
| 1034 | rt.ClearInterruptHandler() |
| 1035 | require.Equal(t, base, timeoutOpaqueCount()) |
| 1036 | } |
| 1037 | |
| 1038 | func TestRuntimeTimeoutOpaqueConcurrentLifecycle(t *testing.T) { |
| 1039 | base := timeoutOpaqueCount() |
nothing calls this directly
no test coverage detected