Update Iot.js
[platform/upstream/iotjs.git] / test / run_pass / test_httpserver.js
1 /* Copyright 2015-present Samsung Electronics Co., Ltd. and other contributors
2  *
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15
16 var assert = require('assert');
17 var http = require('http');
18
19
20 var responseCheck = '';
21 var connectionEvent = 0;
22 var serverCloseEvent = 0;
23 var requestEvent = 0;
24 var responseEvent = 0;
25 var socketEvent = 0;
26 // server side code
27 // server will return the received msg from client
28 // and shutdown
29 var server = http.createServer(function (req, res) {
30
31   var body = '';
32   var url = req.url;
33
34   req.on('data', function (chunk) {
35     body += chunk;
36   });
37
38   var endHandler = function () {
39
40     res.writeHead(200, { 'Connection' : 'close',
41                          'Content-Length' : body.length
42                        });
43     res.write(body);
44     res.end(function(){
45       if(body == 'close server') {
46         server.close();
47       }
48     });
49   };
50
51   req.on('end', endHandler);
52
53 });
54
55 server.on('request', function() {
56   requestEvent++;
57 });
58
59 server.on('connection', function() {
60   connectionEvent++;
61 });
62
63 server.on('close', function() {
64   serverCloseEvent++;
65 });
66
67 server.listen(3001, 3);
68
69
70 // client side code
71 // 1. send POST req to server and check response msg
72 // 2. send GET req to server and check response msg
73 // 3. send 'close server' msg
74
75 // 1. POST req
76 var msg = 'http request test msg';
77 var options = {
78   method : 'POST',
79   port : 3001,
80   headers : {'Content-Length': msg.length}
81 };
82
83
84 var postResponseHandler = function (res) {
85   var res_body = '';
86
87   assert.equal(200, res.statusCode);
88   var endHandler = function(){
89     assert.equal(msg, res_body);
90     responseCheck += '1';
91   };
92   res.on('end', endHandler);
93
94   res.on('data', function(chunk){
95     res_body += chunk.toString();
96   });
97 };
98
99 var req = http.request(options, postResponseHandler);
100 req.on('response', function() {
101   responseEvent++;
102 });
103 req.on('socket', function() {
104   socketEvent++;
105 });
106 req.write(msg);
107 req.end();
108
109
110 // 2. GET req
111 options = {
112   method : 'GET',
113   port : 3001
114 };
115
116 var getResponseHandler = function (res) {
117   var res_body = '';
118
119   assert.equal(200, res.statusCode);
120
121   var endHandler = function(){
122     // GET msg, no received body
123     assert.equal('', res_body);
124     responseCheck += '2';
125   };
126   res.on('end', endHandler);
127
128   res.on('data', function(chunk){
129     res_body += chunk.toString();
130   });
131 };
132
133
134 var getReq = http.request(options, getResponseHandler);
135 getReq.on('response', function() {
136   responseEvent++;
137 });
138 getReq.on('socket', function() {
139   socketEvent++;
140 });
141 getReq.end();
142
143
144
145 // 3. close server req
146 var finalMsg = 'close server';
147 var finalOptions = {
148   method : 'POST',
149   port : 3001,
150   headers : {'Content-Length': finalMsg.length}
151 };
152
153 var finalResponseHandler = function (res) {
154   var res_body = '';
155
156   assert.equal(200, res.statusCode);
157
158   var endHandler = function(){
159     assert.equal(finalMsg, res_body);
160     responseCheck += '3';
161   };
162   res.on('end', endHandler);
163
164   res.on('data', function(chunk){
165     res_body += chunk.toString();
166   });
167 };
168
169 var finalReq = http.request(finalOptions, finalResponseHandler);
170 finalReq.on('response', function() {
171   responseEvent++;
172 });
173 finalReq.on('socket', function() {
174   socketEvent++;
175 });
176 finalReq.write(finalMsg);
177 finalReq.end();
178
179 process.on('exit', function() {
180   assert.equal(responseCheck.length, 3);
181   assert.equal(connectionEvent, 3);
182   assert.equal(serverCloseEvent, 1);
183   assert.equal(requestEvent, 3);
184   assert.equal(responseEvent, 3);
185   assert.equal(socketEvent, 3);
186 });