1 | // Tests with 'rest' library
|
2 |
|
3 | var CodeGradX = require('../codegradxlib.js');
|
4 | var when = require('when');
|
5 | var rest = require('rest');
|
6 | var mime = require('rest/interceptor/mime');
|
7 |
|
8 | describe("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 | /*
|
81 | Error: Protocol "tldr:" not supported. Expected "http:"
|
82 | at new ClientRequest (_http_client.js:131:11)
|
83 |
|
84 | NOTA: 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 | });
|