/src-extra/chaos/sql/chaos/server/actions/TestSupport.sql

http://github.com/JakeWheat/hssqlppp · SQL · 67 lines · 36 code · 6 blank · 25 comment · 2 complexity · 620ade95ffb82137c62ba65539196ed7 MD5 · raw file

  1. /*
  2. Action test support
  3. ===================
  4. for testing purposes sometimes want to make a given nondeterministic
  5. action always fail or always succeed.
  6. The categories are:
  7. castle disappear
  8. gooey blob spread
  9. attack
  10. ranged attack
  11. resist: decree, lightning, subversion
  12. cast spell
  13. you have to set the override each time you want to override something
  14. */
  15. select module('Chaos.Server.Actions.TestSupport');
  16. create domain random_test text check (value in
  17. ('disappear', 'spread', 'attack',
  18. 'ranged_attack', 'resist', 'cast',
  19. 'bonus','break_engaged'));
  20. create table test_action_overrides (
  21. override random_test unique,
  22. setting bool
  23. );
  24. select set_relvar_type('test_action_overrides', 'data');
  25. create function action_rig_action_success(poverride random_test,
  26. psetting boolean) returns void as $$
  27. begin
  28. insert into test_action_overrides (override, setting)
  29. values (poverride, psetting);
  30. end;
  31. $$ language plpgsql volatile;
  32. /*
  33. random numbers
  34. run all random tests through this, so that we can hook into them
  35. during testing.
  36. */
  37. create function check_random_success(t random_test, successPercentage int)
  38. returns boolean as $$
  39. declare
  40. o boolean;
  41. begin
  42. o := (select setting from test_action_overrides
  43. where override = t);
  44. if o is null then --normal random
  45. return (random() * 100) < successPercentage;
  46. else --overriden
  47. delete from test_action_overrides
  48. where override = t;
  49. return o;
  50. end if;
  51. end;
  52. $$ language plpgsql volatile;
  53. create function limit_chance(integer) returns integer as $$
  54. select greatest(10, least($1, 100));
  55. $$ language sql immutable;