Skip to content

Commit fcd1097

Browse files
add system tests
1 parent e7211c2 commit fcd1097

File tree

3 files changed

+74
-13
lines changed

3 files changed

+74
-13
lines changed

packages/pubsub/src/topic.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
var arrify = require('arrify');
2424
var common = require('@google-cloud/common');
25+
var extend = require('extend');
2526
var is = require('is');
2627
var util = require('util');
2728

@@ -367,6 +368,9 @@ Topic.prototype.publish = function(messages, options, callback) {
367368
topic: this.name,
368369
messages: messages
369370
.map(function(message) {
371+
if (is.object(message)) {
372+
message = extend(true, {}, message);
373+
}
370374
return options.raw ? message : { data: message };
371375
})
372376
.map(Topic.formatMessage_)

packages/pubsub/system-test/pubsub.js

Lines changed: 56 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,6 @@ var uuid = require('node-uuid');
2424
var env = require('../../../system-test/env.js');
2525
var pubsub = require('../')(env);
2626

27-
function generateSubName() {
28-
return 'test-subscription-' + uuid.v4();
29-
}
30-
31-
function generateTopicName() {
32-
return 'test-topic-' + uuid.v4();
33-
}
34-
3527
describe('pubsub', function() {
3628
var TOPIC_NAMES = [
3729
generateTopicName(),
@@ -51,6 +43,53 @@ describe('pubsub', function() {
5143
TOPICS[2].name
5244
];
5345

46+
function generateSubName() {
47+
return 'test-subscription-' + uuid.v4();
48+
}
49+
50+
function generateTopicName() {
51+
return 'test-topic-' + uuid.v4();
52+
}
53+
54+
function publishPop(message, options, callback) {
55+
if (!callback) {
56+
callback = options;
57+
options = {};
58+
}
59+
60+
options = options || {};
61+
62+
var topic = pubsub.topic(generateTopicName());
63+
var subscription = topic.subscription(generateSubName());
64+
65+
async.series([
66+
topic.create.bind(topic),
67+
subscription.create.bind(subscription),
68+
function(callback) {
69+
async.times(6, function(_, callback) {
70+
topic.publish(message, options, callback);
71+
}, callback);
72+
}
73+
], function(err) {
74+
if (err) {
75+
callback(err);
76+
return;
77+
}
78+
79+
subscription.pull({
80+
returnImmediately: true,
81+
maxResults: 1
82+
}, function(err, messages) {
83+
if (err) {
84+
callback(err);
85+
return;
86+
}
87+
88+
callback(null, messages.pop());
89+
});
90+
});
91+
}
92+
5493
before(function(done) {
5594
// create all needed topics
5695
async.each(TOPICS, function(topic, cb) {
@@ -128,15 +167,19 @@ describe('pubsub', function() {
128167
});
129168

130169
it('should publish a message with attributes', function(done) {
131-
var topic = pubsub.topic(TOPIC_NAMES[1]);
132-
topic.publish({
170+
var rawMessage = {
133171
data: 'raw message data',
134172
attributes: {
135-
raw: true
173+
customAttribute: 'value'
136174
}
137-
}, function(err, messageIds) {
175+
};
176+
177+
publishPop(rawMessage, { raw: true }, function(err, message) {
138178
assert.ifError(err);
139-
assert.strictEqual(messageIds.length, 1);
179+
180+
assert.strictEqual(message.data, rawMessage.data);
181+
assert.deepEqual(message.attributes, rawMessage.attributes);
182+
140183
done();
141184
});
142185
});

packages/pubsub/test/topic.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,20 @@ describe('Topic', function() {
228228
}, { raw: true }, assert.ifError);
229229
});
230230

231+
it('should clone the provided message', function(done) {
232+
var message = {
233+
data: 'data'
234+
};
235+
var originalMessage = extend({}, message);
236+
237+
topic.request = function() {
238+
assert.deepEqual(message, originalMessage);
239+
done();
240+
};
241+
242+
topic.publish(message, { raw: true }, assert.ifError);
243+
});
244+
231245
it('should execute callback', function(done) {
232246
topic.request = function(protoOpts, reqOpts, callback) {
233247
callback(null, {});

0 commit comments

Comments
 (0)