blob: 471c53125783e3ddff4b7f575eb9a5baed96d85a [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';
const assert = require('chai').assert;
const utils = require('../../../lib/utils');
const types = require('../../../lib/types/index');
const simulacron = require('../simulacron');
const util = require('util');
describe('Metadata', function () {
this.timeout(20000);
describe("#getTrace()", function () {
const setupInfo = simulacron.setup('3', null);
const sCluster = setupInfo.cluster;
const client = setupInfo.client;
it('should set consistency level', function (done) {
const traceId = types.Uuid.random();
const sessionQuery = util.format('SELECT * FROM system_traces.sessions WHERE session_id=%s', traceId);
const eventsQuery = util.format('SELECT * FROM system_traces.events WHERE session_id=%s', traceId);
const resultSessions = {
result: 'success',
delay_in_ms: 0,
rows: [
{
session_id: traceId,
client: '127.0.0.1',
command: 'QUERY',
coordinator: "127.0.0.101",
duration: 10000,
request: 'Execute CQL3 query',
started_at: new types.LocalTime.now().getTotalNanoseconds()
}
],
column_types: {
session_id: "uuid",
command: "varchar",
coordinator: "inet",
duration: "int",
request: "varchar",
started_at: "timestamp"
}
};
const resultEvents = {
result: 'success',
delay_in_ms: 0,
rows: [
{
session_id: traceId,
event_id: types.Uuid.random(),
activity: 'Parsing...',
source: "127.0.0.1",
source_elapsed: 1000,
thread: 'Native-Transport-Requests-2'
}
],
column_types: {
session_id: "uuid",
event_id: "uuid",
activity: "varchar",
source: "inet",
source_elapsed: "int",
thread: "varchar"
}
};
utils.series([
function primeTraceSessionsQueries(next) {
sCluster.prime({
when: {
query: sessionQuery,
},
then : resultSessions
}, next);
},
function primeTraceEventsQueries(next) {
sCluster.prime({
when: {
query: eventsQuery,
},
then : resultEvents
}, next);
},
function getTrace(next) {
client.metadata.getTrace(traceId, types.consistencies.all, function (err, trace) {
assert.ifError(err);
assert.ok(trace);
assert.ok(trace.events.length);
next();
});
},
function getTraceWithConsistency(next) {
const node0 = sCluster.node(0);
node0.getLogs(function (err, logs) {
assert.ifError(err);
assert.notEqual(logs, null);
const verifyQuery = function(logsToSearch, query, consistency) {
for (let i = 0; i < logsToSearch.length; i++) {
const log = logsToSearch[i];
if (log.type === "QUERY" && log.query === query && log.consistency_level === consistency) {
return true;
}
}
return false;
};
assert(verifyQuery(logs, sessionQuery, 'ALL'));
assert(verifyQuery(logs, eventsQuery, 'ALL'));
next();
});
}
], done);
});
});
describe('#compareSchemaVersions()', function () {
const setupInfo = simulacron.setup('6');
const client = setupInfo.client;
// Validate that simulacron is returning values for this queries
before(() =>
client.execute('SELECT schema_version FROM system.peers')
.then(rs => assert.lengthOf(rs.rows, 5)));
before(() =>
client.execute('SELECT schema_version FROM system.local')
.then(rs => assert.lengthOf(rs.rows, 1)));
context('with callback specified', () => {
it('should return true when the schema version is the same', done =>
client.metadata.checkSchemaAgreement((err, agreement) => {
assert.ifError(err);
assert.strictEqual(agreement, true);
done();
}));
});
context('with no callback specified', () => {
it('should return true when the schema version is the same', () =>
client.metadata.checkSchemaAgreement().then(agreement => assert.strictEqual(agreement, true)));
});
});
});