Skip to content
This repository has been archived by the owner on May 5, 2023. It is now read-only.

Commit

Permalink
Merge branch 'dev' of github.com:burmisov/azure-sdk-for-node into sb-…
Browse files Browse the repository at this point in the history
…renew-lock
  • Loading branch information
Chris Tavares committed Oct 24, 2014
2 parents f275857 + 12d69dc commit eec9b00
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 0 deletions.
33 changes: 33 additions & 0 deletions lib/services/serviceBus/lib/servicebusservice.js
Expand Up @@ -352,6 +352,39 @@ ServiceBusService.prototype.unlockMessage = function (message, callback) {
this.performRequest(webResource, null, null, processResponseCallback);
};

/**
* Renew-lock for message.
*
* @param {object|string} message The message object or a string with the message location.
* @param {Function(error, response)} callback `error` will contain information
* if an error occurs; otherwise `response` will contain information related to this operation.
* @return {undefined}
*/
ServiceBusService.prototype.renewLockForMessage = function (message, callback) {
validateCallback(callback);

if (azureutil.objectIsString(message)) {
message = { location: message };
}

var relativePath = message.location.substr(
message.location.indexOf(ServiceClientConstants.CLOUD_SERVICEBUS_HOST + '/') +
ServiceClientConstants.CLOUD_SERVICEBUS_HOST.length + 1);

var webResource = WebResource.post(relativePath)
.withRawResponse();

var processResponseCallback = function (responseObject, next) {
var finalCallback = function (returnObject) {
callback(returnObject.error, returnObject.response);
};

next(responseObject, finalCallback);
};

this.performRequest(webResource, null, null, processResponseCallback);
};

/**
* Sends a queue message.
*
Expand Down
82 changes: 82 additions & 0 deletions test/services/serviceBus/servicebusservice-tests.js
Expand Up @@ -588,6 +588,88 @@ suite('servicebusservice-tests', function () {
});
});

test('LockCanBeRenewedForPeekLockedMessage', function (done) {
var queueName = testutil.generateId(queueNamesPrefix, queueNames, suiteUtil.isMocked);
var messageText = 'hi there again';

serviceBusService.createQueue(queueName, function (createError, queue) {
assert.equal(createError, null);
assert.notEqual(queue, null);

serviceBusService.sendQueueMessage(queueName, messageText, function (sendError) {
assert.equal(sendError, null);

// Peek the message
serviceBusService.receiveQueueMessage(queueName, { isPeekLock: true, timeoutIntervalInS: 5 }, function (receiveError1, message1) {
assert.equal(receiveError1, null);
assert.equal(message1.body, messageText);

assert.notEqual(message1.location, null);
assert.notEqual(message1.brokerProperties.LockToken, null);
assert.notEqual(message1.brokerProperties.LockedUntilUtc, null);

// Renew lock for message
serviceBusService.renewLockForMessage(message1.location, function (renewLockError) {
assert.equal(renewLockError, null);

// deleted message
serviceBusService.unlockMessage(message1.location, function (unlockError) {
assert.equal(unlockError, null);

serviceBusService.receiveQueueMessage(queueName, function (receiveError2, receiveMessage2) {
assert.equal(receiveError2, null);
assert.notEqual(receiveMessage2, null);

done();
});
});
});
});
});
});
});

test('LockCanBeRenewedForPeekLockedMessageWithObject', function (done) {
var queueName = testutil.generateId(queueNamesPrefix, queueNames, suiteUtil.isMocked);
var messageText = 'hi there again';

serviceBusService.createQueue(queueName, function (createError, queue) {
assert.equal(createError, null);
assert.notEqual(queue, null);

serviceBusService.sendQueueMessage(queueName, messageText, function (sendError) {
assert.equal(sendError, null);

// Peek the message
serviceBusService.receiveQueueMessage(queueName, { isPeekLock: true, timeoutIntervalInS: 5 }, function (receiveError1, message1) {
assert.equal(receiveError1, null);
assert.equal(message1.body, messageText);

assert.notEqual(message1.location, null);
assert.notEqual(message1.brokerProperties.LockToken, null);
assert.notEqual(message1.brokerProperties.LockedUntilUtc, null);

// Renew lock for message
serviceBusService.renewLockForMessage(message1, function (renewLockError) {
assert.equal(renewLockError, null);

// deleted message
serviceBusService.unlockMessage(message1, function (unlockError) {
assert.equal(unlockError, null);

serviceBusService.receiveQueueMessage(queueName, function (receiveError2, receiveMessage2) {
assert.equal(receiveError2, null);
assert.notEqual(receiveMessage2, null);

done();
});
});
});
});
});
});
});

test('CreateTopic', function (done) {
var topicName = testutil.generateId(topicNamesPrefix, topicNames, suiteUtil.isMocked);
var topicOptions = {
Expand Down

0 comments on commit eec9b00

Please sign in to comment.