broker.spec.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /* global expect, it, describe, spyOn, Broker */
  2. /*
  3. jasmine tests for Snowflake broker
  4. */
  5. // fake xhr
  6. // class XMLHttpRequest
  7. class XMLHttpRequest {
  8. constructor() {
  9. this.onreadystatechange = null;
  10. }
  11. open() {}
  12. setRequestHeader() {}
  13. send() {}
  14. };
  15. XMLHttpRequest.prototype.DONE = 1;
  16. describe('Broker', function() {
  17. it('can be created', function() {
  18. var b;
  19. b = new Broker('fake');
  20. expect(b.url).toEqual('https://fake/');
  21. expect(b.id).not.toBeNull();
  22. });
  23. describe('getClientOffer', function() {
  24. it('polls and promises a client offer', function(done) {
  25. var b, poll;
  26. b = new Broker('fake');
  27. // fake successful request and response from broker.
  28. spyOn(b, '_postRequest').and.callFake(function() {
  29. b._xhr.readyState = b._xhr.DONE;
  30. b._xhr.status = Broker.STATUS.OK;
  31. b._xhr.responseText = 'fake offer';
  32. return b._xhr.onreadystatechange();
  33. });
  34. poll = b.getClientOffer();
  35. expect(poll).not.toBeNull();
  36. expect(b._postRequest).toHaveBeenCalled();
  37. return poll.then(function(desc) {
  38. expect(desc).toEqual('fake offer');
  39. return done();
  40. }).catch(function() {
  41. fail('should not reject on Broker.STATUS.OK');
  42. return done();
  43. });
  44. });
  45. it('rejects if the broker timed-out', function(done) {
  46. var b, poll;
  47. b = new Broker('fake');
  48. // fake timed-out request from broker
  49. spyOn(b, '_postRequest').and.callFake(function() {
  50. b._xhr.readyState = b._xhr.DONE;
  51. b._xhr.status = Broker.STATUS.GATEWAY_TIMEOUT;
  52. return b._xhr.onreadystatechange();
  53. });
  54. poll = b.getClientOffer();
  55. expect(poll).not.toBeNull();
  56. expect(b._postRequest).toHaveBeenCalled();
  57. return poll.then(function(desc) {
  58. fail('should not fulfill on Broker.STATUS.GATEWAY_TIMEOUT');
  59. return done();
  60. }, function(err) {
  61. expect(err).toBe(Broker.MESSAGE.TIMEOUT);
  62. return done();
  63. });
  64. });
  65. it('rejects on any other status', function(done) {
  66. var b, poll;
  67. b = new Broker('fake');
  68. // fake timed-out request from broker
  69. spyOn(b, '_postRequest').and.callFake(function() {
  70. b._xhr.readyState = b._xhr.DONE;
  71. b._xhr.status = 1337;
  72. return b._xhr.onreadystatechange();
  73. });
  74. poll = b.getClientOffer();
  75. expect(poll).not.toBeNull();
  76. expect(b._postRequest).toHaveBeenCalled();
  77. return poll.then(function(desc) {
  78. fail('should not fulfill on non-OK status');
  79. return done();
  80. }, function(err) {
  81. expect(err).toBe(Broker.MESSAGE.UNEXPECTED);
  82. expect(b._xhr.status).toBe(1337);
  83. return done();
  84. });
  85. });
  86. });
  87. it('responds to the broker with answer', function() {
  88. var b = new Broker('fake');
  89. spyOn(b, '_postRequest');
  90. b.sendAnswer('fake id', 123);
  91. expect(b._postRequest).toHaveBeenCalledWith('fake id', jasmine.any(Object), 'answer', '123');
  92. });
  93. it('POST XMLHttpRequests to the broker', function() {
  94. var b = new Broker('fake');
  95. b._xhr = new XMLHttpRequest();
  96. spyOn(b._xhr, 'open');
  97. spyOn(b._xhr, 'setRequestHeader');
  98. spyOn(b._xhr, 'send');
  99. b._postRequest(0, b._xhr, 'test', 'data');
  100. expect(b._xhr.open).toHaveBeenCalled();
  101. expect(b._xhr.setRequestHeader).toHaveBeenCalled();
  102. expect(b._xhr.send).toHaveBeenCalled();
  103. });
  104. });