Files
SillyTavern/node_modules/node-rest-client/test/server/mock-server.js
Ashen One a417031af4 main
2022-12-22 07:22:29 +04:00

211 lines
5.0 KiB
JavaScript

var http = require('http'), fs = require('fs');
var RouterOptions = {
"baseMessageDir" : "",
"JSONMessageFile" : './test/server/message.json',
"XMLMessageFile" : './test/server/message.xml'
};
var RouteManager = {
"findRoute" : function(req, res) {
var handler = null;
for ( var route in this.routes) {
if (req.url.startsWith(route)) {
handler = this.routes[route];
}
}
if (!handler)
throw "cannot find route " + req.url;
handler.call(this, req, res);
},
"routes" : {
"/json" : function(req, res) {
// this.sleep(5000);
var message = fs
.readFileSync(RouterOptions.JSONMessageFile, 'utf8');
res.writeHead(200, {
'Content-Type' : 'application/json',
'test-header' : 'test'
});
res.write(message.toString());
res.end();
},
"/json/path" : function(req, res) {
// this.sleep(5000);
var message = {
"url" : req.url
};
res.writeHead(200, {
'Content-Type' : 'application/json',
'test-header' : req.url
});
res.write(JSON.stringify(message));
res.end();
},
"/xml" : function(req, res) {
var message = fs.readFileSync(RouterOptions.XMLMessageFile, 'utf8');
res.writeHead(200, {
'Content-Type' : 'application/xml'
});
res.write(message.toString());
res.end();
},
"/120/json?arg1=hello&arg2=world" : function(req, res) {
if (!req.headers["test-header"])
throw "no test-header found!!";
res.setHeader("test-response-header", req.headers["test-header"]);
this.routes["/json"](req, res);
},
"/json?post" : function(req, res) {
req.on('data', function(data) {
// console.log("[SERVER] data = ", data);
res.writeHead(200, {
'Content-Type' : 'application/json'
});
// res.writeHead(200, {'Content-Type': 'text/plain'});
res.write(data.toString());
res.end();
});
},
"/json/path/post" : function(req, res) {
req.on('data', function(data) {
var message = {
"url" : req.url
};
// console.log("[SERVER] data = ", data);
res.writeHead(200, {
'Content-Type' : 'application/json'
});
// res.writeHead(200, {'Content-Type': 'text/plain'});
message.postData = data.toString();
res.write(JSON.stringify(message));
res.end();
});
},
"/json/error" : function(req, res) {
// this.sleep(5000);
res.writeHead(500, {'Content-Type': 'text/plain'});
res.end();
},
"/xml/path/post" : function(req, res) {
req.on('data', function(data) {
// console.log("[SERVER] data = ", data);
res.writeHead(200, {
'Content-Type' : 'application/xml'
});
// res.writeHead(200, {'Content-Type': 'text/plain'});
res.write(data.toString());
res.end();
});
},
"/json/empty" : function(req, res) {
res.writeHead(200, {
'Content-Type' : 'application/json'
});
res.end();
},
"/xml/empty" : function(req, res) {
res.writeHead(204, {
'Content-Type' : 'application/xml'
});
res.end();
},
"/json/contenttypewithspace" : function(req, res) {
var message = fs.readFileSync('./message.json', 'utf8');
res.writeHead(200, {
'Content-Type' : 'application/json; charset=utf-8'
});
res.write(message.toString());
res.end();
},
"/json/test/content/type" : function(req, res) {
var message = fs.readFileSync(RouterOptions.JSONMessageFile, 'utf8');
res.writeHead(200, {
'Content-Type' : 'test/json'
});
res.write(message.toString());
res.end();
},
"/xml/test/content/type" : function(req, res) {
var message = fs.readFileSync(RouterOptions.XMLMessageFile, 'utf8');
res.writeHead(200, {
'Content-Type' : 'test/xml'
});
res.write(message.toString());
res.end();
},
"/followRedirects":function(req, res){
var repeatOffset = req.url.indexOf("?"),
repeat = parseInt(req.url.substring(repeatOffset + 1),10),
location = "";
if (repeatOffset === 0){
res.writeHead(301, {
'Location':'http://localhost:4444/redirected'
});
}else{
if (repeat > 0){
res.writeHead(301, {
'Location':'http://localhost:4444/followRedirects?' + --repeat
});
}else{
res.writeHead(301, {
'Location':'http://localhost:4444/redirected'
});
}
}
res.end();
},
"/redirected":function(req, res){
var message={"redirected":++this.redirectCount};
res.writeHead(200, {
'Content-Type' : 'application/json; charset=utf-8'
});
res.write(JSON.stringify(message));
res.end();
}
},
"sleep" : function(ms) {
var stop = new Date().getTime();
while (new Date().getTime() < stop + ms) {
;
}
},
"redirectCount":0,
"redirectLimit":10
};
// Create an HTTP server
this.server = http.createServer(function(req, res) {
// console.log("[SERVER] req.url", req.url);
RouteManager.findRoute(req, res);
});
exports.baseURL = "http://localhost:4444";
exports.listen = function() {
this.server.listen.apply(this.server, arguments);
};
exports.close = function(callback) {
this.server.close(callback);
};
exports.on = function(event, cb) {
this.server.on.apply(this.server, event, cb);
};