Skip to content

Commit

Permalink
Support connection by instance name.
Browse files Browse the repository at this point in the history
Issue #20
  • Loading branch information
pekim committed Mar 18, 2012
1 parent 9e9724d commit 2dc70ae
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 3 deletions.
21 changes: 19 additions & 2 deletions lib/connection.coffee
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
require('./buffertools')
Debug = require('./debug')
EventEmitter = require('events').EventEmitter
instanceLookup = require('./instance-lookup')
TYPE = require('./packet').TYPE
PreloginPayload = require('./prelogin-payload')
Login7Payload = require('./login7-payload')
Expand Down Expand Up @@ -127,13 +128,18 @@ class Connection extends EventEmitter

defaultConfig: ->
@config.options ||= {}
@config.options.port ||= DEFAULT_PORT
@config.options.textsize ||= DEFAULT_TEXTSIZE
@config.options.connectTimeout ||= DEFAULT_CONNECT_TIMEOUT
@config.options.requestTimeout ||= DEFAULT_CLIENT_REQUEST_TIMEOUT
@config.options.cancelTimeout ||= DEFAULT_CANCEL_TIMEOUT
@config.options.packetSize ||= DEFAULT_PACKET_SIZE

if !@config.options.port && !@config.options.instanceName
@config.options.port = DEFAULT_PORT
else if @config.options.port && @config.options.instanceName
throw new Error("Port and instanceName are mutually exclusive, but #{config.options.port} and #{config.options.instanceName} provided")


createDebug: ->
@debug = new Debug(@config.options.debug)
@debug.on('debug', (message) =>
Expand Down Expand Up @@ -207,9 +213,20 @@ class Connection extends EventEmitter
)

connect: ->
if (@config.options.port)
@connectOnPort(@config.options.port)
else
instanceLookup(@config.server, @config.options.instanceName, (err, port) =>
if err
throw new Error(err)
else
@connectOnPort(port)
)

connectOnPort: (port) ->
@socket = new Socket({})
@socket.setKeepAlive(true, KEEP_ALIVE_INITIAL_DELAY)
@socket.connect(@config.options.port, @config.server)
@socket.connect(port, @config.server)
@socket.on('error', @socketError)
@socket.on('connect', @socketConnect)
@socket.on('close', @socketClose)
Expand Down
37 changes: 36 additions & 1 deletion test/integration/connection-test.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ fs = require('fs')

getConfig = ->
config = JSON.parse(fs.readFileSync(process.env.HOME + '/.tedious/test-connection.json', 'utf8')).config
instanceName = JSON.parse(fs.readFileSync(process.env.HOME + '/.tedious/test-connection.json', 'utf8')).instanceName

config.options.debug =
packet: true
Expand All @@ -14,6 +15,9 @@ getConfig = ->

config

getInstanceName = ->
JSON.parse(fs.readFileSync(process.env.HOME + '/.tedious/test-connection.json', 'utf8')).instanceName

exports.badServer = (test) ->
config = getConfig()
config.server = 'bad-server'
Expand Down Expand Up @@ -82,10 +86,41 @@ exports.badCredentials = (test) ->
#console.log(text)
)

exports.connect = (test) ->
exports.connectByPort = (test) ->
test.expect(2)

config = getConfig()

connection = new Connection(config)

connection.on('connect', (err) ->
test.ok(!err)

connection.close()
)

connection.on('end', (info) ->
test.done()
)

connection.on('databaseChange', (database) ->
test.strictEqual(database, config.options.database)
)

connection.on('infoMessage', (info) ->
#console.log("#{info.number} : #{info.message}")
)

connection.on('debug', (text) ->
#console.log(text)
)

exports.connectByInstanceName = (test) ->
test.expect(2)

config = getConfig()
delete config.options.port
config.options.instanceName = getInstanceName()

connection = new Connection(config)

Expand Down

0 comments on commit 2dc70ae

Please sign in to comment.