UNPKG

10.1 kBJavaScriptView Raw
1// Tests with 'rest' library
2
3var CodeGradX = require('../codegradxlib.js');
4var when = require('when');
5var rest = require('rest');
6var mime = require('rest/interceptor/mime');
7
8describe("rest", function () {
9
10 function make_faildone (done) {
11 return function faildone (reason) {
12 console.log(reason);
13 fail(reason);
14 done();
15 };
16 }
17
18 it("incorrect host", function (done) {
19 var faildone = make_faildone(done);
20 rest('http://absent.o/12345')
21 .then(function (response) {
22 console.log('response', response);
23 faildone();
24 }).catch(function (result) {
25 /*
26{ request:
27 { path: 'http://absent.o/12345',
28 method: 'GET',
29 canceled: false,
30 cancel: [Function: cancel] },
31 url: 'http://absent.o/12345',
32 error:
33 { Error: getaddrinfo ENOTFOUND absent.o absent.o:80
34 at errnoException (dns.js:50:10)
35 at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:92:26)
36 code: 'ENOTFOUND',
37 errno: 'ENOTFOUND',
38 syscall: 'getaddrinfo',
39 hostname: 'absent.o',
40 host: 'absent.o',
41 port: 80 } }
42
43 */
44 //console.log(result);
45 done();
46 });
47 });
48
49 it("invalid certificate host", function (done) {
50 var faildone = make_faildone(done);
51 rest('https://neverssl.com/12345')
52 .then(function (response) {
53 console.log('response', response);
54 faildone();
55 }).catch(function (result) {
56 /*
57{ request:
58 { path: 'https://neverssl.com/12345',
59 method: 'GET',
60 canceled: false,
61 cancel: [Function: cancel] },
62 url: 'https://neverssl.com/12345',
63 error:
64 { Error: Hostname/IP doesn't match certificate's altnames: "Host: neverssl.com. is not in the cert's altnames: DNS:*.cloudfront.net, DNS:cloudfront.net"
65 at Object.checkServerIdentity (tls.js:222:17)
66 ...
67 */
68 //console.log(result);
69 done();
70 });
71 });
72
73 it("incorrect protocol", function (done) {
74 var faildone = make_faildone(done);
75 rest('tldr://paracamplus.com/12345')
76 .then(function (response) {
77 console.log('response', response);
78 faildone();
79 }).catch(function (result) {
80 /*
81Error: Protocol "tldr:" not supported. Expected "http:"
82 at new ClientRequest (_http_client.js:131:11)
83
84NOTA: this is an Error object not a Response!
85 */
86 //console.log(result);
87 done();
88 });
89 });
90
91 it("Required https", function (done) {
92 var faildone = make_faildone(done);
93 rest('http://auth.upmc.fr/')
94 .timeout(3*1000)
95 .then(function (response) {
96 console.log('response', response);
97 faildone();
98 }).catch(function (result) {
99 /*
100{ TimeoutError: timed out after 3000ms
101 at onTimeout (/home/queinnec/Paracamplus/ExerciseFrameWork-V2/JQuery/CodeGradXlib/node_modules/when/lib/decorators/timed.js:69:7)
102 ...
103 */
104 //console.log(result);
105 done();
106 });
107 });
108
109 it("bad port", function (done) {
110 var faildone = make_faildone(done);
111 rest('http://paracamplus.com:12345/')
112 .then(function (response) {
113 console.log('response', response);
114 faildone();
115 }).catch(function (result) {
116 /*
117{ request:
118 { path: 'http://paracamplus.com:12345/',
119 method: 'GET',
120 canceled: false,
121 cancel: [Function: cancel] },
122 url: 'http://paracamplus.com:12345/',
123 error:
124 { Error: connect ECONNREFUSED 91.121.101.157:12345
125 at Object._errnoException (util.js:1024:11)
126 at _exceptionWithHostPort (util.js:1046:20)
127 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1182:14)
128 code: 'ECONNREFUSED',
129 errno: 'ECONNREFUSED',
130 syscall: 'connect',
131 address: '91.121.101.157',
132 port: 12345 } }
133 */
134 //console.log(result);
135 done();
136 });
137 });
138
139 it("redirection 301", function (done) {
140 var faildone = make_faildone(done);
141 rest('http://cloud.google.com/')
142 .then(function (response) {
143 /*
144{ request:
145 { path: 'http://cloud.google.com/',
146 method: 'GET',
147 canceled: false,
148 cancel: [Function: cancel] },
149 url: 'http://cloud.google.com/',
150 raw:
151 { request:
152 ClientRequest {
153 domain: null,
154 _events: [Object],
155 _eventsCount: 2,
156 _maxListeners: undefined,
157 output: [],
158 outputEncodings: [],
159 outputCallbacks: [],
160 outputSize: 0,
161 writable: true,
162 _last: true,
163 upgrading: false,
164 chunkedEncoding: false,
165 shouldKeepAlive: false,
166 useChunkedEncodingByDefault: false,
167 sendDate: false,
168 _removedConnection: false,
169 _removedContLen: false,
170 _removedTE: false,
171 _contentLength: 0,
172 _hasBody: true,
173 _trailer: '',
174 finished: true,
175 _headerSent: true,
176 socket: [Object],
177 connection: [Object],
178 _header: 'GET / HTTP/1.1\r\nContent-Length: 0\r\nHost: cloud.google.com\r\nConnection: close\r\n\r\n',
179 _onPendingData: [Function: noopPendingOutput],
180 agent: [Object],
181 socketPath: undefined,
182 timeout: undefined,
183 method: 'GET',
184 path: '/',
185 _ended: true,
186 res: [Object],
187 aborted: undefined,
188 timeoutCb: null,
189 upgradeOrConnect: false,
190 parser: null,
191 maxHeadersCount: null,
192 [Symbol(outHeadersKey)]: [Object] },
193 response:
194 IncomingMessage {
195 _readableState: [Object],
196 readable: false,
197 domain: null,
198 _events: [Object],
199 _eventsCount: 2,
200 _maxListeners: undefined,
201 socket: [Object],
202 connection: [Object],
203 httpVersionMajor: 1,
204 httpVersionMinor: 1,
205 httpVersion: '1.1',
206 complete: true,
207 headers: [Object],
208 rawHeaders: [Array],
209 trailers: {},
210 rawTrailers: [],
211 upgrade: false,
212 url: '',
213 method: null,
214 statusCode: 301,
215 statusMessage: 'Moved Permanently',
216 client: [Object],
217 _consuming: true,
218 _dumped: false,
219 req: [Object],
220 read: [Function] } },
221 status: { code: 301 },
222 headers:
223 { Location: 'https://cloud.google.com/',
224 'X-Cloud-Trace-Context': '21ed3c5de7de67687544b56d0ef8f109',
225 Date: 'Wed, 21 Mar 2018 17:38:25 GMT',
226 'Content-Type': 'text/html',
227 Server: 'Google Frontend',
228 'Content-Length': '0',
229 Connection: 'close' },
230 entity: '' }
231 */
232 //console.log('response', response);
233 expect(response.status.code).toBe(301);
234 done();
235 }).catch(faildone);
236 });
237
238 it("incorrect json but no error!", function (done) {
239 var faildone = make_faildone(done);
240 rest.wrap(mime)('http://www.codegradx.org/incorrect.json')
241 .then(function (response) {
242 console.log('response', response);
243 faildone();
244 }).catch(function (result) {
245 /*
246{ request:
247 { path: 'http://www.codegradx.org/incorrect.json',
248 method: 'GET',
249 canceled: false,
250 cancel: [Function: cancel] },
251 url: 'http://www.codegradx.org/incorrect.json',
252 raw:
253 { request:
254 ClientRequest {
255 domain: null,
256 _events: [Object],
257 _eventsCount: 2,
258 _maxListeners: undefined,
259 output: [],
260 outputEncodings: [],
261 outputCallbacks: [],
262 outputSize: 0,
263 writable: true,
264 _last: true,
265 upgrading: false,
266 chunkedEncoding: false,
267 shouldKeepAlive: false,
268 useChunkedEncodingByDefault: false,
269 sendDate: false,
270 _removedConnection: false,
271 _removedContLen: false,
272 _removedTE: false,
273 _contentLength: 0,
274 _hasBody: true,
275 _trailer: '',
276 finished: true,
277 _headerSent: true,
278 socket: [Object],
279 connection: [Object],
280 _header: 'GET /incorrect.json HTTP/1.1\r\nContent-Length: 0\r\nHost: www.codegradx.org\r\nConnection: close\r\n\r\n',
281 _onPendingData: [Function: noopPendingOutput],
282 agent: [Object],
283 socketPath: undefined,
284 timeout: undefined,
285 method: 'GET',
286 path: '/incorrect.json',
287 _ended: true,
288 res: [Object],
289 aborted: undefined,
290 timeoutCb: null,
291 upgradeOrConnect: false,
292 parser: null,
293 maxHeadersCount: null,
294 [Symbol(outHeadersKey)]: [Object] },
295 response:
296 IncomingMessage {
297 _readableState: [Object],
298 readable: false,
299 domain: null,
300 _events: [Object],
301 _eventsCount: 2,
302 _maxListeners: undefined,
303 socket: [Object],
304 connection: [Object],
305 httpVersionMajor: 1,
306 httpVersionMinor: 1,
307 httpVersion: '1.1',
308 complete: true,
309 headers: [Object],
310 rawHeaders: [Array],
311 trailers: {},
312 rawTrailers: [],
313 upgrade: false,
314 url: '',
315 method: null,
316 statusCode: 200,
317 statusMessage: 'OK',
318 client: [Object],
319 _consuming: true,
320 _dumped: false,
321 req: [Object],
322 read: [Function] } },
323 status: { code: 200 },
324 headers:
325 { Server: 'nginx/1.10.3',
326 Date: 'Wed, 21 Mar 2018 17:52:34 GMT',
327 'Content-Type': 'application/json',
328 'Content-Length': '21',
329 'Last-Modified': 'Wed, 21 Mar 2018 17:51:02 GMT',
330 Connection: 'close',
331 Etag: '"5ab29b86-15"',
332 'Accept-Ranges': 'bytes' },
333 entity: '{ "incorrect": json,\n' }
334
335 */
336 //console.log(result);
337 done();
338 });
339 });
340
341
342});