refactor to invalidate timer after succ/fail callbacks
nil out timer after invalidate
add more tests with multiple scenarios to validate timeout.