1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | "use strict";
|
14 |
|
15 | var fluid = require("infusion"),
|
16 | jqUnit = fluid.registerNamespace("jqUnit"),
|
17 | kettle = fluid.require("%kettle");
|
18 |
|
19 | kettle.loadTestingSupport();
|
20 |
|
21 | require("./shared/SingleRequestTestDefs.js");
|
22 | require("./shared/HTTPMethodsTestDefs.js");
|
23 |
|
24 | kettle.tests.slowishMiddlewareHandler = function (req, res, next) {
|
25 | setTimeout(function () {
|
26 | next();
|
27 | }, 500);
|
28 | };
|
29 |
|
30 | fluid.defaults("kettle.tests.slowishMiddleware", {
|
31 | gradeNames: "kettle.plainAsyncMiddleware",
|
32 | middleware: kettle.tests.slowishMiddlewareHandler
|
33 | });
|
34 |
|
35 | fluid.registerNamespace("kettle.tests.requestAbort");
|
36 |
|
37 | kettle.tests.requestAbort.exceptionHandler = function () {
|
38 | jqUnit.fail("Client abort should not cause global error");
|
39 | };
|
40 |
|
41 | kettle.tests.requestAbort.abortRequest = function (req) {
|
42 | setTimeout(function () {
|
43 | req.abort();
|
44 | }, 10);
|
45 | };
|
46 |
|
47 | kettle.tests.requestAbort.assertResponse = function (response) {
|
48 | jqUnit.assert("Received special response structure");
|
49 | jqUnit.assertTrue("Message mentions socket", response.string.includes("socket"));
|
50 | };
|
51 |
|
52 | kettle.tests.requestAbort.waitExplosion = function () {
|
53 | var togo = fluid.promise();
|
54 | setInterval(togo.resolve, 1000);
|
55 | return togo;
|
56 | };
|
57 |
|
58 | fluid.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 | {
|
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 |
|
98 | fluid.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 |
|
117 | fluid.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 |
|
126 | kettle.tests.singleRequest.executeTests(["kettle.tests.requestAbort.config"],
|
127 | "kettle.tests.requestAbort.testDefTemplate", false);
|