scratch – Blame information for rev 87

Subversion Repositories:
Rev:
Rev Author Line No. Line
87 office 1 /**
2 * Guzzle node.js test server to return queued responses to HTTP requests and
3 * expose a RESTful API for enqueueing responses and retrieving the requests
4 * that have been received.
5 *
6 * - Delete all requests that have been received:
7 * DELETE /guzzle-server/requests
8 * Host: 127.0.0.1:8125
9 *
10 * - Enqueue responses
11 * PUT /guzzle-server/responses
12 * Host: 127.0.0.1:8125
13 *
14 * [{ "statusCode": 200, "reasonPhrase": "OK", "headers": {}, "body": "" }]
15 *
16 * - Get the received requests
17 * GET /guzzle-server/requests
18 * Host: 127.0.0.1:8125
19 *
20 * - Shutdown the server
21 * DELETE /guzzle-server
22 * Host: 127.0.0.1:8125
23 *
24 * @package Guzzle PHP <http://www.guzzlephp.org>
25 * @license See the LICENSE file that was distributed with this source code.
26 */
27  
28 var http = require("http");
29  
30 /**
31 * Guzzle node.js server
32 * @class
33 */
34 var GuzzleServer = function(port, log) {
35  
36 this.port = port;
37 this.log = log;
38 this.responses = [];
39 this.requests = [];
40 var that = this;
41  
42 var controlRequest = function(request, req, res) {
43 if (req.url == '/guzzle-server/perf') {
44 res.writeHead(200, "OK", {"Content-Length": 16});
45 res.end("Body of response");
46 } else if (req.method == "DELETE") {
47 if (req.url == "/guzzle-server/requests") {
48 // Clear the received requests
49 that.requests = [];
50 res.writeHead(200, "OK", { "Content-Length": 0 });
51 res.end();
52 if (this.log) {
53 console.log("Flushing requests");
54 }
55 } else if (req.url == "/guzzle-server") {
56 // Shutdown the server
57 res.writeHead(200, "OK", { "Content-Length": 0, "Connection": "close" });
58 res.end();
59 if (this.log) {
60 console.log("Shutting down");
61 }
62 that.server.close();
63 }
64 } else if (req.method == "GET") {
65 if (req.url === "/guzzle-server/requests") {
66 // Get received requests
67 var data = that.requests.join("\n----[request]\n");
68 res.writeHead(200, "OK", { "Content-Length": data.length });
69 res.end(data);
70 if (that.log) {
71 console.log("Sending receiving requests");
72 }
73 }
74 } else if (req.method == "PUT") {
75 if (req.url == "/guzzle-server/responses") {
76 if (that.log) {
77 console.log("Adding responses...");
78 }
79 // Received response to queue
80 var data = request.split("\r\n\r\n")[1];
81 if (!data) {
82 if (that.log) {
83 console.log("No response data was provided");
84 }
85 res.writeHead(400, "NO RESPONSES IN REQUEST", { "Content-Length": 0 });
86 } else {
87 that.responses = eval("(" + data + ")");
88 if (that.log) {
89 console.log(that.responses);
90 }
91 res.writeHead(200, "OK", { "Content-Length": 0 });
92 }
93 res.end();
94 }
95 }
96 };
97  
98 var receivedRequest = function(request, req, res) {
99 if (req.url.indexOf("/guzzle-server") === 0) {
100 controlRequest(request, req, res);
101 } else if (req.url.indexOf("/guzzle-server") == -1 && !that.responses.length) {
102 res.writeHead(500);
103 res.end("No responses in queue");
104 } else {
105 var response = that.responses.shift();
106 res.writeHead(response.statusCode, response.reasonPhrase, response.headers);
107 res.end(new Buffer(response.body, 'base64'));
108 that.requests.push(request);
109 }
110 };
111  
112 this.start = function() {
113  
114 that.server = http.createServer(function(req, res) {
115  
116 var request = req.method + " " + req.url + " HTTP/" + req.httpVersion + "\r\n";
117 for (var i in req.headers) {
118 request += i + ": " + req.headers[i] + "\r\n";
119 }
120 request += "\r\n";
121  
122 // Receive each chunk of the request body
123 req.addListener("data", function(chunk) {
124 request += chunk;
125 });
126  
127 // Called when the request completes
128 req.addListener("end", function() {
129 receivedRequest(request, req, res);
130 });
131 });
132 that.server.listen(port, "127.0.0.1");
133  
134 if (this.log) {
135 console.log("Server running at http://127.0.0.1:8125/");
136 }
137 };
138 };
139  
140 // Get the port from the arguments
141 port = process.argv.length >= 3 ? process.argv[2] : 8125;
142 log = process.argv.length >= 4 ? process.argv[3] : false;
143  
144 // Start the server
145 server = new GuzzleServer(port, log);
146 server.start();