text: /*
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements. See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership. The ASF licenses this file
   * to you under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance
   * with the License. You may obtain a copy of the License at
   *
   *   http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing,
   * software distributed under the License is distributed on an
   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   * KIND, either express or implied. See the License for the
   * specific language governing permissions and limitations
   * under the License.
   */
  var thrift = require('thrift');
  
  var ThriftTest = require('./gen-nodejs/ThriftTest'),
      ttypes = require('./gen-nodejs/ThriftTest_types');
  
  var connection = thrift.createConnection('localhost', 9090),
      client = thrift.createClient(ThriftTest, connection);
  
  var tfailed = 0;
  var tpassed = 0;
  
  function failed(err) {
    console.trace(err);
  	return tfailed++;
  }
  function passed() {
  	return tpassed++;
  }
  
  connection.on('error', function(err) {
    failed(err);
  });
  
  console.time("Tests completed in");
  
  client.testVoid(function(err, response) {
    if (err) { return failed(err); }
    console.log("testVoid() = ", response);
  	passed();
  });
  
  client.testString("Test", function(err, response) {
    if (err) { return failed(err); }
    console.log("testString('Test') = ", response);
  	passed();
  });
  
  client.testByte(1, function(err, response) {
    if (err) { return failed(err); }
    console.log("testByte(1) = ", response);
  	passed();
  });
  
  client.testI32(-1, function(err, response) {
    if (err) { return failed(err); }
    console.log("testI32(-1) = ", response);
  	passed();
  });
  
  client.testI64(5, function(err, response) {
    if (err) { return failed(err); }
    console.log("testI64(5) = ", response);
  	passed();
  });
  
  /*
   * FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory
  client.testI64(-5, function(err, response) {
    if (err) { return failed(err); }
    console.log("testI64(-5) = ", response);
  	passed();
  });
   */
  
  client.testI64(-34359738368, function(err, response) {
    if (err) { return failed(err); }
    console.log("testI64(-34359738368) = ", response);
  	passed();
  });
  
  client.testDouble(-5.2098523, function(err, response) {
    if (err) { return failed(err); }
    console.log("testDouble(-5.2098523) = ", response);
  	passed();
  });
  
  var out = new ttypes.Xtruct({
  	string_thing: 'Zero',
  	byte_thing: 1,
  	i32_thing: -3,
  	i64_thing: 1000000
  });
  client.testStruct(out, function(err, response) {
    if (err) { return failed(err); }
    console.log("testStruct(", out, ") = \n", response);
  	passed();
  });
  
  var out2 = new ttypes.Xtruct2();
  out2.byte_thing = 1;
  out2.struct_thing = out;
  out2.i32_thing = 5;
  client.testNest(out2, function(err, response) {
    if (err) { return failed(err); }
    console.log("testNest(", out2, ") = \n", response);
  	passed();
  });
  
  var mapout = {};
  for (var i = 0; i < 5; ++i) {
    mapout[i] = i-10;
  }
  client.testMap(mapout, function(err, response) {
    if (err) { return failed(err); }
    console.log("testMap(", mapout, ") = \n", response);
  	passed();
  });
  
  /*
   * TODO: testSet, testList, testEnum, testTypedef, testMapMap, testInsanity
   */
  
  
  client.testException('ApplicationException', function(err, response) {
    console.log("testException('ApplicationException') = ", err);
    if (response) { return failed(response); }
  	passed();
  });
  
  client.testException('Xception', function(err, response) {
    console.log("testException('Xception') = ", err);
    if (response) { return failed(response); }
  	passed();
  });
  
  client.testException('success', function(err, response) {
    if (err) { return failed(err); }
    console.log("testException('success') = ", response);
  	passed();
  });
  
  setTimeout(function(){
    console.timeEnd("Tests completed in");
  	console.log(tpassed + " passed, " + tfailed + " failed");
  	connection.end();
  }, 200);
  