UNPKG

3.61 kBJavaScriptView Raw
1/**
2 * Kettle Bad Request Tests
3 *
4 * Copyright 2020 Raising The Floor - International
5 *
6 * Licensed under the New BSD license. You may not use this file except in
7 * compliance with this License.
8 *
9 * You may obtain a copy of the License at
10 * https://github.com/fluid-project/kettle/blob/master/LICENSE.txt
11 */
12
13"use strict";
14
15var fluid = require("infusion"),
16 jqUnit = fluid.registerNamespace("jqUnit"),
17 kettle = fluid.require("%kettle");
18
19kettle.loadTestingSupport();
20
21require("./shared/SingleRequestTestDefs.js");
22require("./shared/HTTPMethodsTestDefs.js");
23
24kettle.tests.slowishMiddlewareHandler = function (req, res, next) {
25 setTimeout(function () {
26 next();
27 }, 500);
28};
29
30fluid.defaults("kettle.tests.slowishMiddleware", {
31 gradeNames: "kettle.plainAsyncMiddleware",
32 middleware: kettle.tests.slowishMiddlewareHandler
33});
34
35fluid.registerNamespace("kettle.tests.requestAbort");
36
37kettle.tests.requestAbort.exceptionHandler = function () {
38 jqUnit.fail("Client abort should not cause global error");
39};
40
41kettle.tests.requestAbort.abortRequest = function (req) {
42 setTimeout(function () {
43 req.abort();
44 }, 10);
45};
46
47kettle.tests.requestAbort.assertResponse = function (response) {
48 jqUnit.assert("Received special response structure");
49 jqUnit.assertTrue("Message mentions socket", response.string.includes("socket"));
50};
51
52kettle.tests.requestAbort.waitExplosion = function () {
53 var togo = fluid.promise();
54 setInterval(togo.resolve, 1000);
55 return togo;
56};
57
58fluid.defaults("kettle.tests.requestAbort.testDefTemplate", {
59 gradeNames: "fluid.component",
60 mergePolicy: {
61 sequence: "noexpand"
62 },
63 components: {
64 testRequest: {
65 type: "kettle.test.request.http",
66 options: {
67 path: "/",
68 method: "GET",
69 failOnError: false
70 }
71 }
72 },
73 sequence: [
74 { // Beat jqUnit's failure handler so we can test Kettle's
75 funcName: "kettle.test.pushInstrumentedErrors",
76 args: "kettle.tests.requestAbort.exceptionHandler"
77 }, {
78 func: "{testRequest}.send"
79 }, {
80 func: "kettle.tests.requestAbort.abortRequest",
81 args: "{testRequest}.nativeRequest"
82 }, {
83 event: "{testRequest}.events.onComplete",
84 listener: "kettle.tests.requestAbort.assertResponse",
85 args: {
86 string: "{arguments}.0",
87 request: "{testRequest}"
88 }
89 }, {
90 task: "kettle.tests.requestAbort.waitExplosion",
91 resolve: "fluid.identity"
92 }, {
93 funcName: "kettle.test.popInstrumentedErrors"
94 }
95 ]
96});
97
98fluid.defaults("kettle.tests.requestAbort.handler", {
99 gradeNames: "kettle.request.http",
100 components: {
101 slowishMiddleware: {
102 type: "kettle.tests.slowishMiddleware"
103 }
104 },
105 requestMiddleware: {
106 slowishMiddleware: {
107 middleware: "{kettle.request.http}.slowishMiddleware"
108 }
109 },
110 invokers: {
111 handleRequest: {
112 funcName: "kettle.tests.HTTPMethods.get.handleRequest"
113 }
114 }
115});
116
117fluid.defaults("kettle.tests.requestAbort.config", {
118 handler: {
119 type: "kettle.tests.requestAbort.handler"
120 },
121 name: "Request abort test",
122 message: "Client abort should not have produced global error",
123 errorTexts: ["socket"]
124});
125
126kettle.tests.singleRequest.executeTests(["kettle.tests.requestAbort.config"],
127 "kettle.tests.requestAbort.testDefTemplate", false);