THRIFT-2969
Client: nodejs
Patch: Andrew de Andrade

General node test cleanup and consolidation.
diff --git a/lib/nodejs/test/server.js b/lib/nodejs/test/server.js
old mode 100755
new mode 100644
index b6d28c7..2d53e11
--- a/lib/nodejs/test/server.js
+++ b/lib/nodejs/test/server.js
@@ -1,4 +1,4 @@
-#!/usr/bin/env nodejs
+#!/usr/bin/env node
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -21,53 +21,78 @@
 
 var fs = require('fs');
 var path = require('path');
-var thrift = require('thrift');
-var ThriftTest = require('./gen-nodejs/ThriftTest');
-var ThriftTestHandler = require('./test_handler').ThriftTestHandler;
-var ThriftTestHandlerPromise = require('./test_handler_promise').ThriftTestHandler;
-
+var thrift = require('../lib/thrift');
 var program = require('commander');
+var helpers = require('./helpers');
+
+var ThriftTest = require('./gen-nodejs/ThriftTest');
+var SecondService = require('./gen-nodejs/SecondService');
+var ThriftTestHandler = require('./test_handler').AsyncThriftTestHandler;
+var ThriftTestHandlerPromise = require('./test_handler').SyncThriftTestHandler;
+var ttypes = require('./gen-nodejs/ThriftTest_types');
 
 program
-  .option('-p, --protocol <protocol>', 'Set thift protocol (binary|json) [protocol]')
-  .option('-t, --transport <transport>', 'Set thift transport (buffered|framed) [transport]')
-  .option('--port <port>', 'Set thift server port')
+  .option('-p, --protocol <protocol>', 'Set thift protocol (binary|json|compact)', 'binary')
+  .option('-t, --transport <transport>', 'Set thift transport (buffered|framed)', 'buffered')
   .option('--ssl', 'use ssl transport')
+  .option('--port <port>', 'Set thift server port', 9090)
   .option('--promise', 'test with promise style functions')
+  .option('-t, --type <type>', 'Select server type (tcp|multiplex|http)', 'tcp')
   .parse(process.argv);
 
-var transport =  thrift.TBufferedTransport;
-if (program.transport === "framed") {
-  transport = thrift.TFramedTransport;
-}
+var port = program.port;
+var type = program.type;
+var ssl = program.ssl;
+var promise = program.promise;
 
-var protocol = thrift.TBinaryProtocol;
-if (program.protocol === "json") {
-  protocol = thrift.TJSONProtocol;
-} else if (program.protocol === "compact") {
-  protocol = thrift.TCompactProtocol;
-}
-
-var port = 9090;
-if (String(program.port) === "undefined"){
-} else {
-  port = program.port;
-}
-
-var handler = ThriftTestHandler;
-if (program.promise) {
-  handler = ThriftTestHandlerPromise;
-}
+var handler = program.promise ? ThriftTestHandler : ThriftTestHandlerPromise;
 
 var options = {
-  protocol: protocol,
-  transport: transport
+  transport: helpers.transports[program.transport],
+  protocol: helpers.protocols[program.protocol]
 };
-if (program.ssl) {
+
+if (type === 'http' || type ==='websocket') {
+  options.handler = handler;
+  options.processor = ThriftTest;
+
+  options = {
+    services: { "/test": options }
+  }
+}
+
+if (type === 'multiplex') {
+  var SecondServiceHandler = {
+    secondtestString: function(thing, result) {
+      console.log('testString(\'' + thing + '\')');
+      result(null, thing);
+    }
+  };
+
+  var processor = new thrift.MultiplexedProcessor();
+
+  processor.registerProcessor("ThriftTest",
+    new ThriftTest.Processor(ThriftTestHandler));
+
+  processor.registerProcessor("SecondService",
+    new SecondService.Processor(SecondServiceHandler));
+
+}
+
+if (ssl) {
   options.tls = {
     key: fs.readFileSync(path.resolve(__dirname, 'server.key')),
     cert: fs.readFileSync(path.resolve(__dirname, 'server.crt'))
   };
 }
-thrift.createServer(ThriftTest, handler, options).listen(port);
 
+var server;
+if (type === 'tcp') {
+  server = thrift.createServer(ThriftTest, handler, options);
+} else if (type === 'multiplex') {
+  server = thrift.createMultiplexServer(processor, options);
+} else if (type === 'http' || type === 'websocket') {
+  server = thrift.createWebServer(options);
+}
+
+server.listen(port);