simple query scenario tested

This commit is contained in:
brianc 2010-10-09 02:48:41 -05:00
parent d20e47f644
commit 98856f0e9c
3 changed files with 84 additions and 6 deletions

View File

@ -56,6 +56,7 @@ Client.prototype.connect = function() {
});
this.on('ReadyForQuery', function() {
self.readyForQuery = true;
self.pulseQueryQueue();
});
};
@ -70,22 +71,35 @@ Client.prototype.query = function(text) {
query.client = this;
query.text = text;
this.queryQueue.push(query);
this.pulseQueryQueue();
return query;
};
Client.prototype.pulseQueryQueue = function() {
if(!this.readyForQuery) {
return;
};
var query = this.queryQueue.shift();
if(query) {
var self = this;
this.readyForQuery = false;
this.stream.write(query.toBuffer());
var rowHandler = function(msg) {
query.emit('row',msg.fields)
};
var endHandler;
endHandler = function(msg) {
query.emit('end');
self.removeListener('CommandComplete', endHandler);
self.removeListener('DataRow', rowHandler);
};
this.on('DataRow', rowHandler);
this.on('CommandComplete', endHandler);
}
};
var Query = function() {
EventEmitter.call(this);
var self = this;
process.nextTick(function() {
self.emit('end');
});
};
sys.inherits(Query, EventEmitter);

View File

@ -76,3 +76,61 @@ test('query queue', function() {
});
});
var dataTypes = {
char: 18
};
test('simple query scenario', function() {
var stream = new MemoryStream();
stream.readyState = 'open';
var client = new Client({
stream: stream
});
client.connect();
assert.ok(stream.emit('data', buffers.readyForQuery()));
var query = client.query('!');
test('stream got packet', function() {
assert.length(stream.packets, 1);
});
stream.emit('data', buffers.rowDescription([{
name: 'id',
dataTypeID: dataTypes.char,
dataTypeSize: 1
}]));
var rowData = [];
query.on('row',function(data) {
rowData = data;
});
var ended = 0;
query.on('end', function() {
ended++;
});
stream.emit('data', buffers.dataRow(["!"]));
test('row has one item', function() {
assert.length(rowData, 1);
});
test('row has correct data', function() {
assert.equal(rowData[0], "!");
});
test('query ends', function() {
stream.emit('data', buffers.commandComplete());
assert.equal(ended, 1);
});
test('after query is ended, it emits nothing else', function() {
stream.emit('data', buffers.dataRow(["X","Y","Z"]));
stream.emit('data', buffers.commandComplete());
assert.length(rowData, 1);
assert.equal(ended, 1);
});
});

View File

@ -39,8 +39,14 @@ test = function(name, action) {
name = ' ' + name;
}
test.tabout += 2;
console.log(name);
action();
process.stdout.write('.');
try{
action();
}catch(e) {
console.log(name);
console.log(e.toString());
}
test.tabout -= 2;
};