http-retry.json 1.6 KB

1234567891011121314151617181920
  1. {
  2. "name": "verify-http-retry",
  3. "nodes": [
  4. {"id": "n1", "name": "Trigger", "type": "click-trigger", "position": {"x": 0, "y": 0}, "config": {}},
  5. {"id": "once", "name": "Without Retry", "type": "code", "position": {"x": 0, "y": 100},
  6. "config": {"timeout": 60,
  7. "code": "const t = Date.now(); let err = ''; try { smartbotic.http.request({ method: 'GET', url: 'http://10.255.255.1/nowhere', timeout: 1000 }); } catch (e) { err = String(e.message || e); } const elapsed = Date.now() - t; return { elapsed: elapsed, err: err, tookOneAttempt: elapsed < 2500 && err.indexOf('after 1 attempt') !== -1 };"}},
  8. {"id": "thrice", "name": "With Retry", "type": "code", "position": {"x": 0, "y": 200},
  9. "config": {"timeout": 60,
  10. "code": "const t = Date.now(); let err = ''; try { smartbotic.http.request({ method: 'GET', url: 'http://10.255.255.1/nowhere', timeout: 1000, retries: 2, retryDelayMs: 1000, retryMaxDelayMs: 5000 }); } catch (e) { err = String(e.message || e); } const elapsed = Date.now() - t; return { elapsed: elapsed, err: err, tookThreeAttempts: err.indexOf('after 3 attempt') !== -1, waitedAndDoubled: elapsed >= 5500 && elapsed < 9000 };"}}
  11. ],
  12. "connections": [
  13. {"sourceNodeId": "n1", "sourceOutput": "main", "targetNodeId": "once", "targetInput": "data"},
  14. {"sourceNodeId": "once", "sourceOutput": "main", "targetNodeId": "thrice", "targetInput": "data"}
  15. ],
  16. "expect": {
  17. "once": {"status": "completed", "output": {"result": {"tookOneAttempt": true}}},
  18. "thrice": {"status": "completed", "output": {"result": {"tookThreeAttempts": true, "waitedAndDoubled": true}}}
  19. }
  20. }