From a5816b52838bbd0eee7df7a73d839532e21d6ea5 Mon Sep 17 00:00:00 2001 From: Pasha Semenov Date: Wed, 11 Sep 2019 23:07:48 +0500 Subject: [PATCH] * Fixed names at Pinba message schema (camelCase reverted back to snake_style) * Added test of ProtoBuf message verification --- resources/pinba.json | 32 +++++++++++++++---------------- test/test.js | 45 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 16 deletions(-) diff --git a/resources/pinba.json b/resources/pinba.json index d840c0b..198fe30 100644 --- a/resources/pinba.json +++ b/resources/pinba.json @@ -12,47 +12,47 @@ "type": "string", "id": 1 }, - "serverName": { + "server_name": { "rule": "required", "type": "string", "id": 2 }, - "scriptName": { + "script_name": { "rule": "required", "type": "string", "id": 3 }, - "requestCount": { + "request_count": { "rule": "required", "type": "uint32", "id": 4 }, - "documentSize": { + "document_size": { "rule": "required", "type": "uint32", "id": 5 }, - "memoryPeak": { + "memory_peak": { "rule": "required", "type": "uint32", "id": 6 }, - "requestTime": { + "request_time": { "rule": "required", "type": "float", "id": 7 }, - "ruUtime": { + "ru_utime": { "rule": "required", "type": "float", "id": 8 }, - "ruStime": { + "ru_stime": { "rule": "required", "type": "float", "id": 9 }, - "timerHitCount": { + "timer_hit_count": { "rule": "repeated", "type": "uint32", "id": 10, @@ -60,7 +60,7 @@ "packed": false } }, - "timerValue": { + "timer_value": { "rule": "repeated", "type": "float", "id": 11, @@ -68,7 +68,7 @@ "packed": false } }, - "timerTagCount": { + "timer_tag_count": { "rule": "repeated", "type": "uint32", "id": 12, @@ -76,7 +76,7 @@ "packed": false } }, - "timerTagName": { + "timer_tag_name": { "rule": "repeated", "type": "uint32", "id": 13, @@ -84,7 +84,7 @@ "packed": false } }, - "timerTagValue": { + "timer_tag_value": { "rule": "repeated", "type": "uint32", "id": 14, @@ -101,7 +101,7 @@ "type": "uint32", "id": 16 }, - "memoryFootprint": { + "memory_footprint": { "type": "uint32", "id": 17 }, @@ -114,7 +114,7 @@ "type": "string", "id": 19 }, - "tagName": { + "tag_name": { "rule": "repeated", "type": "uint32", "id": 20, @@ -122,7 +122,7 @@ "packed": false } }, - "tagValue": { + "tag_value": { "rule": "repeated", "type": "uint32", "id": 21, diff --git a/test/test.js b/test/test.js index 24bd554..e684615 100644 --- a/test/test.js +++ b/test/test.js @@ -941,6 +941,51 @@ describe('Pinba', function () { done(); }); }); + + it('flush() must verify message before sending', function () { + var validData = { + hostname: 'hostname', + server_name: 'server_name', + script_name: 'script_name', + schema: 'schema' + }; + var socket_create_stub = sinon.stub(require('dgram'), "createSocket"); + socket_create_stub.returns({ + on: noop, + send: noop + }); + + try { + checkMessageVerification(validData, null); + checkMessageVerification(Object.assign({}, validData, {hostname: 42}), 'hostname'); + checkMessageVerification(Object.assign({}, validData, {server_name: 42}), 'server_name'); + checkMessageVerification(Object.assign({}, validData, {script_name: 42}), 'script_name'); + checkMessageVerification(Object.assign({}, validData, {schema: 42}), 'schema'); + } finally { + socket_create_stub.restore(); + } + + function checkMessageVerification(data, invalidFieldName) { + var error = null; + + try { + (new Pinba.Request(data)).flush(); + } catch (err) { + error = err; + } finally { + if (invalidFieldName) { + assert.ok(error instanceof Error, + 'Verification error is missing'); + assert.ok(error.message.indexOf(invalidFieldName + ':') === 0, + 'Verification error message must refer on invalid field name'); + } else { + assert.strictEqual(error, null, 'Got unexpected verification error'); + } + } + } + + function noop() {} + }); }); }); });