network_utils_spec.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /* Copyright 2017 Mozilla Foundation
  2. *
  3. * Licensed under the Apache License, Version 2.0 (the "License");
  4. * you may not use this file except in compliance with the License.
  5. * You may obtain a copy of the License at
  6. *
  7. * http://www.apache.org/licenses/LICENSE-2.0
  8. *
  9. * Unless required by applicable law or agreed to in writing, software
  10. * distributed under the License is distributed on an "AS IS" BASIS,
  11. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. * See the License for the specific language governing permissions and
  13. * limitations under the License.
  14. */
  15. 'use strict';
  16. var _network_utils = require('../../display/network_utils');
  17. var _util = require('../../shared/util');
  18. describe('network_utils', function () {
  19. describe('validateRangeRequestCapabilities', function () {
  20. var defaultValues = {
  21. allowRangeRequests: false,
  22. suggestedLength: undefined
  23. };
  24. it('rejects range chunk sizes that are not larger than zero', function () {
  25. expect(function () {
  26. (0, _network_utils.validateRangeRequestCapabilities)({ rangeChunkSize: 0 });
  27. }).toThrow(new Error('Range chunk size must be larger than zero'));
  28. });
  29. it('rejects disabled or non-HTTP range requests', function () {
  30. expect((0, _network_utils.validateRangeRequestCapabilities)({
  31. disableRange: true,
  32. isHttp: true,
  33. rangeChunkSize: 64
  34. })).toEqual(defaultValues);
  35. expect((0, _network_utils.validateRangeRequestCapabilities)({
  36. disableRange: false,
  37. isHttp: false,
  38. rangeChunkSize: 64
  39. })).toEqual(defaultValues);
  40. });
  41. it('rejects invalid Accept-Ranges header values', function () {
  42. expect((0, _network_utils.validateRangeRequestCapabilities)({
  43. disableRange: false,
  44. isHttp: true,
  45. getResponseHeader: function getResponseHeader(headerName) {
  46. if (headerName === 'Accept-Ranges') {
  47. return 'none';
  48. }
  49. },
  50. rangeChunkSize: 64
  51. })).toEqual(defaultValues);
  52. });
  53. it('rejects invalid Content-Encoding header values', function () {
  54. expect((0, _network_utils.validateRangeRequestCapabilities)({
  55. disableRange: false,
  56. isHttp: true,
  57. getResponseHeader: function getResponseHeader(headerName) {
  58. if (headerName === 'Accept-Ranges') {
  59. return 'bytes';
  60. } else if (headerName === 'Content-Encoding') {
  61. return 'gzip';
  62. }
  63. },
  64. rangeChunkSize: 64
  65. })).toEqual(defaultValues);
  66. });
  67. it('rejects invalid Content-Length header values', function () {
  68. expect((0, _network_utils.validateRangeRequestCapabilities)({
  69. disableRange: false,
  70. isHttp: true,
  71. getResponseHeader: function getResponseHeader(headerName) {
  72. if (headerName === 'Accept-Ranges') {
  73. return 'bytes';
  74. } else if (headerName === 'Content-Encoding') {
  75. return null;
  76. } else if (headerName === 'Content-Length') {
  77. return 'eight';
  78. }
  79. },
  80. rangeChunkSize: 64
  81. })).toEqual(defaultValues);
  82. });
  83. it('rejects file sizes that are too small for range requests', function () {
  84. expect((0, _network_utils.validateRangeRequestCapabilities)({
  85. disableRange: false,
  86. isHttp: true,
  87. getResponseHeader: function getResponseHeader(headerName) {
  88. if (headerName === 'Accept-Ranges') {
  89. return 'bytes';
  90. } else if (headerName === 'Content-Encoding') {
  91. return null;
  92. } else if (headerName === 'Content-Length') {
  93. return 8;
  94. }
  95. },
  96. rangeChunkSize: 64
  97. })).toEqual({
  98. allowRangeRequests: false,
  99. suggestedLength: 8
  100. });
  101. });
  102. it('accepts file sizes large enough for range requests', function () {
  103. expect((0, _network_utils.validateRangeRequestCapabilities)({
  104. disableRange: false,
  105. isHttp: true,
  106. getResponseHeader: function getResponseHeader(headerName) {
  107. if (headerName === 'Accept-Ranges') {
  108. return 'bytes';
  109. } else if (headerName === 'Content-Encoding') {
  110. return null;
  111. } else if (headerName === 'Content-Length') {
  112. return 8192;
  113. }
  114. },
  115. rangeChunkSize: 64
  116. })).toEqual({
  117. allowRangeRequests: true,
  118. suggestedLength: 8192
  119. });
  120. });
  121. });
  122. describe('createResponseStatusError', function () {
  123. it('handles missing PDF file responses', function () {
  124. expect((0, _network_utils.createResponseStatusError)(404, 'https://foo.com/bar.pdf')).toEqual(new _util.MissingPDFException('Missing PDF "https://foo.com/bar.pdf".'));
  125. expect((0, _network_utils.createResponseStatusError)(0, 'file://foo.pdf')).toEqual(new _util.MissingPDFException('Missing PDF "file://foo.pdf".'));
  126. });
  127. it('handles unexpected responses', function () {
  128. expect((0, _network_utils.createResponseStatusError)(302, 'https://foo.com/bar.pdf')).toEqual(new _util.UnexpectedResponseException('Unexpected server response (302) while retrieving PDF ' + '"https://foo.com/bar.pdf".'));
  129. expect((0, _network_utils.createResponseStatusError)(0, 'https://foo.com/bar.pdf')).toEqual(new _util.UnexpectedResponseException('Unexpected server response (0) while retrieving PDF ' + '"https://foo.com/bar.pdf".'));
  130. });
  131. });
  132. describe('validateResponseStatus', function () {
  133. it('accepts valid response statuses', function () {
  134. expect((0, _network_utils.validateResponseStatus)(200)).toEqual(true);
  135. expect((0, _network_utils.validateResponseStatus)(206)).toEqual(true);
  136. });
  137. it('rejects invalid response statuses', function () {
  138. expect((0, _network_utils.validateResponseStatus)(302)).toEqual(false);
  139. expect((0, _network_utils.validateResponseStatus)(404)).toEqual(false);
  140. expect((0, _network_utils.validateResponseStatus)(null)).toEqual(false);
  141. expect((0, _network_utils.validateResponseStatus)(undefined)).toEqual(false);
  142. });
  143. });
  144. });