2020-02-25 21:14:44 +08:00
'use strict' ;
const assert = require ( 'assert' ) ;
const TestClient = require ( '../support/test-client' ) ;
2020-04-29 16:40:45 +08:00
const MetricsBackend = require ( '../../lib/backends/metrics' ) ;
2020-04-29 20:32:08 +08:00
const LayergroupToken = require ( '../../lib/models/layergroup-token' ) ;
2020-04-28 00:40:28 +08:00
const apikey = 1234 ;
2020-02-25 21:14:44 +08:00
const mapConfig = {
2020-04-28 00:02:06 +08:00
version : '1.8.0' ,
2020-02-25 21:14:44 +08:00
layers : [
{
options : {
2020-04-28 00:02:06 +08:00
sql : TestClient . SQL . ONE _POINT ,
2020-02-25 21:14:44 +08:00
cartocss : TestClient . CARTOCSS . POINTS ,
cartocss _version : '2.3.0'
}
}
]
} ;
2020-04-29 01:17:00 +08:00
2020-05-01 17:43:37 +08:00
const mapConfigWithTable = {
version : '1.8.0' ,
layers : [
{
options : {
sql : 'select * from test_table' ,
cartocss : TestClient . CARTOCSS . POINTS ,
cartocss _version : '2.3.0'
}
}
]
} ;
2020-04-29 01:17:00 +08:00
function templateBuilder ( { name } ) {
2020-05-01 17:43:37 +08:00
const templateName = ` metrics-template- ${ name } - ${ Date . now ( ) } ` ;
2020-04-29 01:17:00 +08:00
return {
version : '0.0.1' ,
2020-05-01 17:43:37 +08:00
name : templateName ,
2020-04-29 01:17:00 +08:00
layergroup : {
2020-05-01 17:43:37 +08:00
stat _tag : ` stat-tag- ${ templateName } ` ,
2020-04-29 01:17:00 +08:00
version : '1.8.0' ,
layers : [
{
type : 'cartodb' ,
options : {
sql : TestClient . SQL . ONE _POINT ,
cartocss : TestClient . CARTOCSS . POINTS ,
cartocss _version : '2.3.0'
}
2020-04-28 00:40:28 +08:00
}
2020-04-29 01:17:00 +08:00
]
}
} ;
2020-05-01 17:43:37 +08:00
}
2020-04-28 00:02:06 +08:00
2020-05-01 17:43:37 +08:00
function templateMissingCartoCSSVersionBuilder ( ) {
const templateName = ` missing-cartocss-version- ${ Date . now ( ) } ` ;
2020-02-25 21:14:44 +08:00
2020-05-01 17:43:37 +08:00
return {
version : '0.0.1' ,
name : templateName ,
layergroup : {
stat _tag : ` stat-tag- ${ templateName } ` ,
version : '1.8.0' ,
layers : [
{
type : 'cartodb' ,
options : {
sql : TestClient . SQL . ONE _POINT ,
cartocss : TestClient . CARTOCSS . POINTS
}
}
]
}
} ;
}
const suites = [
{
desc : 'map config with live query' ,
mapConfig
} ,
{
desc : 'map config with query against table' ,
mapConfig : mapConfigWithTable
}
] ;
suites . forEach ( function ( { desc , mapConfig } ) {
describe ( ` metrics: ${ desc } ` , function ( ) {
beforeEach ( function ( ) {
this . originalMetricsBackendSendMethod = MetricsBackend . prototype . send ;
this . pubSubMetricsBackendSendMethodCalled = false ;
MetricsBackend . prototype . send = ( event , attributes ) => {
this . pubSubMetricsBackendSendMethodCalled = true ;
this . pubSubMetricsBackendSendMethodCalledWith = { event , attributes } ;
return Promise . resolve ( ) ;
} ;
} ) ;
2020-02-25 21:14:44 +08:00
2020-05-01 17:43:37 +08:00
afterEach ( function ( done ) {
MetricsBackend . prototype . send = this . originalMetricsBackendSendMethod ;
return this . testClient . drain ( done ) ;
} ) ;
2020-02-25 21:14:44 +08:00
2020-05-01 17:43:37 +08:00
it ( 'should not send event if not enabled' , function ( done ) {
const extraHeaders = {
'Carto-Event' : 'test-event' ,
'Carto-Event-Source' : 'test' ,
'Carto-Event-Group-Id' : '1'
} ;
const overrideServerOptions = { pubSubMetrics : { enabled : false } } ;
2020-04-29 20:32:08 +08:00
2020-05-01 17:43:37 +08:00
this . testClient = new TestClient ( mapConfig , apikey , extraHeaders , overrideServerOptions ) ;
this . testClient . getLayergroup ( ( err , body ) => {
if ( err ) {
return done ( err ) ;
}
2020-02-25 21:14:44 +08:00
2020-05-01 17:43:37 +08:00
assert . strictEqual ( typeof body . layergroupid , 'string' ) ;
assert . ok ( ! this . pubSubMetricsBackendSendMethodCalled ) ;
2020-04-28 00:02:06 +08:00
2020-05-01 17:43:37 +08:00
return done ( ) ;
} ) ;
2020-02-25 21:14:44 +08:00
} ) ;
2020-05-01 17:43:37 +08:00
it ( 'should not send event if headers not present' , function ( done ) {
const extraHeaders = { } ;
const overrideServerOptions = { pubSubMetrics : { enabled : false } } ;
2020-02-25 21:14:44 +08:00
2020-05-01 17:43:37 +08:00
this . testClient = new TestClient ( mapConfig , apikey , extraHeaders , overrideServerOptions ) ;
2020-04-29 20:32:08 +08:00
2020-05-01 17:43:37 +08:00
this . testClient . getLayergroup ( ( err , body ) => {
if ( err ) {
return done ( err ) ;
}
2020-02-25 21:14:44 +08:00
2020-05-01 17:43:37 +08:00
assert . strictEqual ( typeof body . layergroupid , 'string' ) ;
assert . ok ( ! this . pubSubMetricsBackendSendMethodCalled ) ;
2020-04-28 00:02:06 +08:00
2020-05-01 17:43:37 +08:00
return done ( ) ;
} ) ;
2020-02-25 21:14:44 +08:00
} ) ;
2020-05-01 17:43:37 +08:00
it ( 'should send event for map requests' , function ( done ) {
const expectedEvent = 'map_view' ;
const expectedMetricsEvent = 'event-test' ;
const expectedEventSource = 'event-source-test' ;
const expectedEventGroupId = '1' ;
const expectedResponseCode = '200' ;
const expectedMapType = 'anonymous' ;
const extraHeaders = {
'Carto-Event' : expectedMetricsEvent ,
'Carto-Event-Source' : expectedEventSource ,
'Carto-Event-Group-Id' : expectedEventGroupId
} ;
const overrideServerOptions = { pubSubMetrics : { enabled : true , topic : 'topic-test' } } ;
this . testClient = new TestClient ( mapConfig , apikey , extraHeaders , overrideServerOptions ) ;
this . testClient . getLayergroup ( ( err , body ) => {
if ( err ) {
return done ( err ) ;
}
2020-02-26 20:24:46 +08:00
2020-05-01 17:43:37 +08:00
assert . strictEqual ( typeof body . layergroupid , 'string' ) ;
2020-04-29 20:32:08 +08:00
2020-05-01 17:43:37 +08:00
const { token , cacheBuster } = LayergroupToken . parse ( body . layergroupid ) ;
2020-04-29 20:32:08 +08:00
2020-05-01 17:43:37 +08:00
assert . ok ( this . pubSubMetricsBackendSendMethodCalled ) ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
const { event , attributes } = this . pubSubMetricsBackendSendMethodCalledWith ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
assert . strictEqual ( event , expectedEvent ) ;
assert . strictEqual ( attributes . client _event , expectedMetricsEvent ) ;
assert . strictEqual ( attributes . event _source , expectedEventSource ) ;
assert . strictEqual ( attributes . client _event _group _id , expectedEventGroupId ) ;
assert . strictEqual ( attributes . response _code , expectedResponseCode ) ;
assert . strictEqual ( attributes . map _type , expectedMapType ) ;
assert . strictEqual ( attributes . map _id , token ) ;
assert . strictEqual ( attributes . cache _buster , cacheBuster ) ;
2020-04-28 00:02:06 +08:00
2020-05-01 17:43:37 +08:00
return done ( ) ;
} ) ;
2020-02-26 20:24:46 +08:00
} ) ;
2020-05-01 17:43:37 +08:00
it ( 'should normalized headers type and length' , function ( done ) {
const expectedEvent = 'map_view' ;
const eventLong = 'If you are sending a text this long in a header you kind of deserve the worst, honestly. I mean this is not a header, it is almost a novel, and you do not see any Novel cookie here, right?' ;
const expectedMetricsEvent = eventLong . trim ( ) . substr ( 0 , 100 ) ;
const expectedEventGroupId = '1' ;
const expectedEventSource = 'test' ;
const expectedResponseCode = '200' ;
const expectedMapType = 'anonymous' ;
const extraHeaders = {
'Carto-Event' : eventLong ,
'Carto-Event-Source' : 'test' ,
'Carto-Event-Group-Id' : 1
} ;
const overrideServerOptions = { pubSubMetrics : { enabled : true , topic : 'topic-test' } } ;
this . testClient = new TestClient ( mapConfig , apikey , extraHeaders , overrideServerOptions ) ;
this . testClient . getLayergroup ( ( err , body ) => {
if ( err ) {
return done ( err ) ;
}
2020-02-25 21:14:44 +08:00
2020-05-01 17:43:37 +08:00
assert . strictEqual ( typeof body . layergroupid , 'string' ) ;
2020-04-29 20:32:08 +08:00
2020-05-01 17:43:37 +08:00
const { token , cacheBuster } = LayergroupToken . parse ( body . layergroupid ) ;
2020-04-29 20:32:08 +08:00
2020-05-01 17:43:37 +08:00
assert . ok ( this . pubSubMetricsBackendSendMethodCalled ) ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
const { event , attributes } = this . pubSubMetricsBackendSendMethodCalledWith ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
assert . strictEqual ( event , expectedEvent ) ;
assert . strictEqual ( attributes . client _event , expectedMetricsEvent ) ;
assert . strictEqual ( attributes . event _source , expectedEventSource ) ;
assert . strictEqual ( attributes . client _event _group _id , expectedEventGroupId ) ;
assert . strictEqual ( attributes . response _code , expectedResponseCode ) ;
assert . strictEqual ( attributes . map _type , expectedMapType ) ;
assert . strictEqual ( attributes . map _id , token ) ;
assert . strictEqual ( attributes . cache _buster , cacheBuster ) ;
2020-04-28 00:02:06 +08:00
2020-05-01 17:43:37 +08:00
return done ( ) ;
} ) ;
2020-02-25 21:14:44 +08:00
} ) ;
2020-05-01 17:43:37 +08:00
it ( 'should send event when error' , function ( done ) {
const expectedEvent = 'map_view' ;
const expectedMetricsEvent = 'event-test' ;
const expectedEventSource = 'event-source-test' ;
const expectedEventGroupId = '1' ;
const expectedResponseCode = '400' ;
const expectedMapType = 'anonymous' ;
const extraHeaders = {
'Carto-Event' : expectedMetricsEvent ,
'Carto-Event-Source' : expectedEventSource ,
'Carto-Event-Group-Id' : expectedEventGroupId
} ;
const overrideServerOptions = { pubSubMetrics : { enabled : true , topic : 'topic-test' } } ;
const mapConfigMissingCartoCSS = {
version : '1.8.0' ,
layers : [
{
options : {
sql : TestClient . SQL . ONE _POINT ,
cartocss : TestClient . CARTOCSS . POINTS
}
2020-04-29 01:17:00 +08:00
}
2020-05-01 17:43:37 +08:00
]
} ;
2020-04-29 20:32:08 +08:00
2020-05-01 17:43:37 +08:00
this . testClient = new TestClient ( mapConfigMissingCartoCSS , apikey , extraHeaders , overrideServerOptions ) ;
2020-04-29 20:32:08 +08:00
2020-05-01 17:43:37 +08:00
const params = { response : { status : 400 } } ;
2020-04-28 00:02:06 +08:00
2020-05-01 17:43:37 +08:00
this . testClient . getLayergroup ( params , ( err , body ) => {
if ( err ) {
return done ( err ) ;
}
2020-02-25 21:14:44 +08:00
2020-05-01 17:43:37 +08:00
assert . ok ( this . pubSubMetricsBackendSendMethodCalled ) ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
const { event , attributes } = this . pubSubMetricsBackendSendMethodCalledWith ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
assert . strictEqual ( event , expectedEvent ) ;
assert . strictEqual ( attributes . client _event , expectedMetricsEvent ) ;
assert . strictEqual ( attributes . event _source , expectedEventSource ) ;
assert . strictEqual ( attributes . client _event _group _id , expectedEventGroupId ) ;
assert . strictEqual ( attributes . response _code , expectedResponseCode ) ;
assert . strictEqual ( attributes . map _type , expectedMapType ) ;
assert . strictEqual ( typeof attributes . map _id , 'string' ) ;
assert . strictEqual ( typeof attributes . cache _buster , 'string' ) ;
2020-04-28 00:40:28 +08:00
2020-05-01 17:43:37 +08:00
return done ( ) ;
} ) ;
2020-04-28 00:40:28 +08:00
} ) ;
2020-05-01 17:43:37 +08:00
it . skip ( 'should send event for tile requests' , function ( done ) {
const expectedEvent = 'event-tile-test' ;
const expectedEventSource = 'event-source-tile-test' ;
const expectedEventGroupId = '12345' ;
const expectedResponseCode = '200' ;
const extraHeaders = {
'Carto-Event' : expectedEvent ,
'Carto-Event-Source' : expectedEventSource ,
'Carto-Event-Group-Id' : expectedEventGroupId
} ;
const overrideServerOptions = { pubSubMetrics : { enabled : true , topic : 'topic-test' } } ;
this . testClient = new TestClient ( mapConfig , apikey , extraHeaders , overrideServerOptions ) ;
this . testClient . getTile ( 0 , 0 , 0 , ( err , res , tile ) => {
if ( err ) {
return done ( err ) ;
}
2020-04-28 00:40:28 +08:00
2020-05-01 17:43:37 +08:00
assert . ok ( this . pubSubMetricsBackendSendMethodCalled ) ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
const { event , attributes } = this . pubSubMetricsBackendSendMethodCalledWith ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
assert . strictEqual ( event , expectedEvent ) ;
assert . strictEqual ( attributes . event _source , expectedEventSource ) ;
assert . strictEqual ( attributes . client _event _group _id , expectedEventGroupId ) ;
assert . strictEqual ( attributes . response _code , expectedResponseCode ) ;
assert . strictEqual ( typeof attributes . map _id , 'string' ) ;
assert . strictEqual ( typeof attributes . cache _buster , 'string' ) ;
2020-04-28 00:40:28 +08:00
2020-05-01 17:43:37 +08:00
return done ( ) ;
} ) ;
2020-04-28 00:40:28 +08:00
} ) ;
2020-05-01 17:43:37 +08:00
it . skip ( 'should send event for errored tile requests' , function ( done ) {
const expectedEvent = 'event-tile-test' ;
const expectedEventSource = 'event-source-tile-test' ;
const expectedEventGroupId = '12345' ;
const expectedResponseCode = '400' ;
const extraHeaders = {
'Carto-Event' : expectedEvent ,
'Carto-Event-Source' : expectedEventSource ,
'Carto-Event-Group-Id' : expectedEventGroupId
} ;
const overrideServerOptions = { pubSubMetrics : { enabled : true , topic : 'topic-test' } } ;
this . testClient = new TestClient ( mapConfig , apikey , extraHeaders , overrideServerOptions ) ;
const params = {
response : {
status : 400 ,
headers : {
'Content-Type' : 'application/json; charset=utf-8'
}
2020-04-28 00:40:28 +08:00
}
2020-05-01 17:43:37 +08:00
} ;
2020-04-28 00:40:28 +08:00
2020-05-01 17:43:37 +08:00
this . testClient . getTile ( 0 , 0 , 2 , params , ( err , res , tile ) => {
if ( err ) {
return done ( err ) ;
}
2020-04-28 00:40:28 +08:00
2020-05-01 17:43:37 +08:00
assert . ok ( this . pubSubMetricsBackendSendMethodCalled ) ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
const { event , attributes } = this . pubSubMetricsBackendSendMethodCalledWith ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
assert . strictEqual ( event , expectedEvent ) ;
assert . strictEqual ( attributes . event _source , expectedEventSource ) ;
assert . strictEqual ( attributes . client _event _group _id , expectedEventGroupId ) ;
assert . strictEqual ( attributes . response _code , expectedResponseCode ) ;
assert . strictEqual ( typeof attributes . map _id , 'string' ) ;
assert . strictEqual ( typeof attributes . cache _buster , 'string' ) ;
2020-04-28 00:40:28 +08:00
2020-05-01 17:43:37 +08:00
return done ( ) ;
} ) ;
2020-04-28 00:40:28 +08:00
} ) ;
2020-05-01 17:43:37 +08:00
it ( 'should send event for named map requests' , function ( done ) {
const expectedEvent = 'map_view' ;
const expectedMetricsEvent = 'event-test' ;
const expectedEventSource = 'event-source-test' ;
const expectedEventGroupId = '1' ;
const expectedResponseCode = '200' ;
const expectedMapType = 'named' ;
const extraHeaders = {
'Carto-Event' : expectedMetricsEvent ,
'Carto-Event-Source' : expectedEventSource ,
'Carto-Event-Group-Id' : expectedEventGroupId
} ;
const overrideServerOptions = { pubSubMetrics : { enabled : true , topic : 'topic-test' } } ;
const template = templateBuilder ( { name : 'map' } ) ;
this . testClient = new TestClient ( template , apikey , extraHeaders , overrideServerOptions ) ;
this . testClient . getLayergroup ( ( err , body ) => {
if ( err ) {
return done ( err ) ;
}
2020-04-29 01:17:00 +08:00
2020-05-01 17:43:37 +08:00
assert . strictEqual ( typeof body . layergroupid , 'string' ) ;
2020-04-29 20:32:08 +08:00
2020-05-01 17:43:37 +08:00
const { token , cacheBuster , templateHash } = LayergroupToken . parse ( body . layergroupid ) ;
2020-04-29 20:32:08 +08:00
2020-05-01 17:43:37 +08:00
assert . ok ( this . pubSubMetricsBackendSendMethodCalled ) ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
const { event , attributes } = this . pubSubMetricsBackendSendMethodCalledWith ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
assert . strictEqual ( event , expectedEvent ) ;
assert . strictEqual ( attributes . client _event , expectedMetricsEvent ) ;
assert . strictEqual ( attributes . event _source , expectedEventSource ) ;
assert . strictEqual ( attributes . client _event _group _id , expectedEventGroupId ) ;
assert . strictEqual ( attributes . response _code , expectedResponseCode ) ;
assert . strictEqual ( attributes . map _type , expectedMapType ) ;
assert . strictEqual ( attributes . map _id , token ) ;
assert . strictEqual ( attributes . cache _buster , cacheBuster ) ;
assert . strictEqual ( attributes . template _hash , templateHash ) ;
assert . strictEqual ( attributes . stat _tag , template . layergroup . stat _tag ) ;
2020-04-29 01:17:00 +08:00
2020-05-01 17:43:37 +08:00
return done ( ) ;
} ) ;
2020-04-29 01:17:00 +08:00
} ) ;
2020-05-01 17:43:37 +08:00
it ( 'should send event for errored named map requests' , function ( done ) {
const expectedEvent = 'map_view' ;
const expectedMetricsEvent = 'event-test' ;
const expectedEventSource = 'event-source-test' ;
const expectedEventGroupId = '1' ;
const expectedResponseCode = '400' ;
const expectedMapType = 'named' ;
const extraHeaders = {
'Carto-Event' : expectedMetricsEvent ,
'Carto-Event-Source' : expectedEventSource ,
'Carto-Event-Group-Id' : expectedEventGroupId
} ;
const overrideServerOptions = { pubSubMetrics : { enabled : true , topic : 'topic-test' } } ;
const templateMissingCartoCSSVersion = templateMissingCartoCSSVersionBuilder ( ) ;
this . testClient = new TestClient ( templateMissingCartoCSSVersion , apikey , extraHeaders , overrideServerOptions ) ;
const params = {
response : {
status : 400 ,
headers : {
'Content-Type' : 'application/json; charset=utf-8'
2020-04-29 01:17:00 +08:00
}
}
2020-05-01 17:43:37 +08:00
} ;
2020-04-29 20:32:08 +08:00
2020-05-01 17:43:37 +08:00
this . testClient . getLayergroup ( params , ( err , body ) => {
if ( err ) {
return done ( err ) ;
}
2020-04-29 01:17:00 +08:00
2020-05-01 17:43:37 +08:00
assert . ok ( this . pubSubMetricsBackendSendMethodCalled ) ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
const { event , attributes } = this . pubSubMetricsBackendSendMethodCalledWith ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
assert . strictEqual ( event , expectedEvent ) ;
assert . strictEqual ( attributes . client _event , expectedMetricsEvent ) ;
assert . strictEqual ( attributes . event _source , expectedEventSource ) ;
assert . strictEqual ( attributes . client _event _group _id , expectedEventGroupId ) ;
assert . strictEqual ( attributes . response _code , expectedResponseCode ) ;
assert . strictEqual ( attributes . map _type , expectedMapType ) ;
assert . strictEqual ( typeof attributes . map _id , 'string' ) ;
assert . strictEqual ( typeof attributes . cache _buster , 'string' ) ;
assert . strictEqual ( typeof attributes . template _hash , 'string' ) ;
assert . strictEqual ( attributes . stat _tag , templateMissingCartoCSSVersion . layergroup . stat _tag ) ;
2020-04-29 01:17:00 +08:00
2020-05-01 17:43:37 +08:00
return done ( ) ;
} ) ;
2020-04-29 01:17:00 +08:00
} ) ;
2020-05-01 17:43:37 +08:00
it . skip ( 'should send event for named map tile requests' , function ( done ) {
const expectedEvent = 'event-named-map-tile-test' ;
const expectedEventSource = 'event-source-named-map-tile-test' ;
const expectedEventGroupId = '1' ;
const expectedResponseCode = '200' ;
const extraHeaders = {
'Carto-Event' : expectedEvent ,
'Carto-Event-Source' : expectedEventSource ,
'Carto-Event-Group-Id' : expectedEventGroupId
} ;
const overrideServerOptions = { pubSubMetrics : { enabled : true , topic : 'topic-test' } } ;
const template = templateBuilder ( { name : 'tile' } ) ;
this . testClient = new TestClient ( template , apikey , extraHeaders , overrideServerOptions ) ;
this . testClient . getTile ( 0 , 0 , 0 , ( err , body ) => {
if ( err ) {
return done ( err ) ;
}
2020-04-28 00:40:28 +08:00
2020-05-01 17:43:37 +08:00
assert . ok ( this . pubSubMetricsBackendSendMethodCalled ) ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
const { event , attributes } = this . pubSubMetricsBackendSendMethodCalledWith ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
assert . strictEqual ( event , expectedEvent ) ;
assert . strictEqual ( attributes . event _source , expectedEventSource ) ;
assert . strictEqual ( attributes . client _event _group _id , expectedEventGroupId ) ;
assert . strictEqual ( attributes . response _code , expectedResponseCode ) ;
assert . strictEqual ( typeof attributes . map _id , 'string' ) ;
assert . strictEqual ( typeof attributes . cache _buster , 'string' ) ;
assert . strictEqual ( typeof attributes . template _hash , 'string' ) ;
assert . strictEqual ( attributes . stat _tag , template . layergroup . stat _tag ) ;
2020-02-25 21:14:44 +08:00
2020-05-01 17:43:37 +08:00
return done ( ) ;
} ) ;
2020-02-25 21:14:44 +08:00
} ) ;
2020-04-29 01:17:00 +08:00
2020-05-01 17:43:37 +08:00
it ( 'should send event for static named map requests' , function ( done ) {
const expectedEvent = 'map_view' ;
const expectedMetricsEvent = 'event-test' ;
const expectedEventSource = 'event-source-test' ;
const expectedEventGroupId = '1' ;
const expectedResponseCode = '200' ;
const expectedMapType = 'static' ;
const extraHeaders = {
'Carto-Event' : expectedMetricsEvent ,
'Carto-Event-Source' : expectedEventSource ,
'Carto-Event-Group-Id' : expectedEventGroupId
} ;
const overrideServerOptions = { pubSubMetrics : { enabled : true , topic : 'topic-test' } } ;
const template = templateBuilder ( { name : 'preview' } ) ;
this . testClient = new TestClient ( template , apikey , extraHeaders , overrideServerOptions ) ;
this . testClient . getPreview ( 640 , 480 , { } , ( err , res , body ) => {
if ( err ) {
return done ( err ) ;
}
2020-04-29 01:17:00 +08:00
2020-05-01 17:43:37 +08:00
assert . ok ( this . pubSubMetricsBackendSendMethodCalled ) ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
const { event , attributes } = this . pubSubMetricsBackendSendMethodCalledWith ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
assert . strictEqual ( event , expectedEvent ) ;
assert . strictEqual ( attributes . client _event , expectedMetricsEvent ) ;
assert . strictEqual ( attributes . event _source , expectedEventSource ) ;
assert . strictEqual ( attributes . client _event _group _id , expectedEventGroupId ) ;
assert . strictEqual ( attributes . response _code , expectedResponseCode ) ;
assert . strictEqual ( attributes . map _type , expectedMapType ) ;
assert . strictEqual ( typeof attributes . map _id , 'string' ) ;
assert . strictEqual ( typeof attributes . cache _buster , 'string' ) ;
assert . strictEqual ( typeof attributes . template _hash , 'string' ) ;
assert . strictEqual ( attributes . stat _tag , template . layergroup . stat _tag ) ;
2020-04-29 01:17:00 +08:00
2020-05-01 17:43:37 +08:00
return done ( ) ;
} ) ;
2020-04-29 01:17:00 +08:00
} ) ;
2020-04-29 16:28:10 +08:00
2020-05-01 17:43:37 +08:00
it ( 'should send event for errored static named map requests' , function ( done ) {
const expectedEvent = 'map_view' ;
const expectedMetricsEvent = 'event-test' ;
const expectedEventSource = 'event-source-test' ;
const expectedEventGroupId = '1' ;
const expectedResponseCode = '400' ;
const expectedMapType = 'static' ;
const extraHeaders = {
'Carto-Event' : expectedMetricsEvent ,
'Carto-Event-Source' : expectedEventSource ,
'Carto-Event-Group-Id' : expectedEventGroupId
} ;
const overrideServerOptions = { pubSubMetrics : { enabled : true , topic : 'topic-test' } } ;
const template = templateBuilder ( { name : 'preview-errored' } ) ;
this . testClient = new TestClient ( template , apikey , extraHeaders , overrideServerOptions ) ;
const widthTooLarge = 8193 ;
const params = {
response : {
status : 400 ,
headers : {
'Content-Type' : 'application/json; charset=utf-8'
}
2020-04-29 16:28:10 +08:00
}
2020-05-01 17:43:37 +08:00
} ;
2020-04-29 16:28:10 +08:00
2020-05-01 17:43:37 +08:00
this . testClient . getPreview ( widthTooLarge , 480 , params , ( err , res , body ) => {
if ( err ) {
return done ( err ) ;
}
2020-04-29 16:28:10 +08:00
2020-05-01 17:43:37 +08:00
assert . ok ( this . pubSubMetricsBackendSendMethodCalled ) ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
const { event , attributes } = this . pubSubMetricsBackendSendMethodCalledWith ;
2020-04-30 18:30:31 +08:00
2020-05-01 17:43:37 +08:00
assert . strictEqual ( event , expectedEvent ) ;
assert . strictEqual ( attributes . client _event , expectedMetricsEvent ) ;
assert . strictEqual ( attributes . event _source , expectedEventSource ) ;
assert . strictEqual ( attributes . client _event _group _id , expectedEventGroupId ) ;
assert . strictEqual ( attributes . response _code , expectedResponseCode ) ;
assert . strictEqual ( attributes . map _type , expectedMapType ) ;
assert . strictEqual ( typeof attributes . map _id , 'string' ) ;
assert . strictEqual ( typeof attributes . cache _buster , 'string' ) ;
assert . strictEqual ( typeof attributes . template _hash , 'string' ) ;
assert . strictEqual ( attributes . stat _tag , template . layergroup . stat _tag ) ;
2020-04-29 16:28:10 +08:00
2020-05-01 17:43:37 +08:00
return done ( ) ;
} ) ;
2020-04-29 16:28:10 +08:00
} ) ;
} ) ;
2020-02-25 21:14:44 +08:00
} ) ;