blob: 4c2a07b11ea71a8ea303ea013ccc686c53d580bc [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.
*/
/*
* GraphBinaryWriter v4 request format tests.
* Tests the writer's ability to generate v4 request format:
* {version:0x84}{fields:Map bare}{gremlin:String bare}
*/
import { assert } from 'chai';
import { Buffer } from 'buffer';
import GraphBinaryWriter from '../../../lib/structure/io/binary/internals/GraphBinaryWriter.js';
import ioc from '../../../lib/structure/io/binary/GraphBinary.js';
describe('GraphBinaryWriter', () => {
const writer = new GraphBinaryWriter(ioc);
describe('version byte', () => {
it('first byte is 0x84', () => {
const result = writer.writeRequest({ gremlin: 'g.V()', fields: new Map() });
assert.equal(result[0], 0x84);
});
});
describe('empty fields + gremlin', () => {
it('empty map + bare string', () => {
const result = writer.writeRequest({ gremlin: 'g.V()', fields: new Map() });
const expected = Buffer.from([
0x84, // version
0x00, 0x00, 0x00, 0x00, // empty map bare (length=0)
0x00, 0x00, 0x00, 0x05, // string length=5
0x67, 0x2E, 0x56, 0x28, 0x29 // "g.V()"
]);
assert.deepEqual(result, expected);
});
});
describe('fields with entries', () => {
it('map with evaluationTimeout entry', () => {
const fields = new Map();
fields.set('evaluationTimeout', 1000);
const result = writer.writeRequest({ gremlin: 'g.V()', fields });
const expected = Buffer.from([
0x84, // version
0x00, 0x00, 0x00, 0x01, // map length=1
0x03, 0x00, // key type_code=STRING, value_flag=0x00
0x00, 0x00, 0x00, 0x11, // key string length=17
0x65, 0x76, 0x61, 0x6C, 0x75, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x54, 0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, // "evaluationTimeout"
0x01, 0x00, // value type_code=INT, value_flag=0x00
0x00, 0x00, 0x03, 0xE8, // value int=1000
0x00, 0x00, 0x00, 0x05, // gremlin string length=5
0x67, 0x2E, 0x56, 0x28, 0x29 // "g.V()"
]);
assert.deepEqual(result, expected);
});
});
describe('default fields', () => {
it('undefined fields defaults to empty map', () => {
const result = writer.writeRequest({ gremlin: 'g.V()', fields: undefined });
const expected = Buffer.from([
0x84, // version
0x00, 0x00, 0x00, 0x00, // empty map bare (length=0)
0x00, 0x00, 0x00, 0x05, // string length=5
0x67, 0x2E, 0x56, 0x28, 0x29 // "g.V()"
]);
assert.deepEqual(result, expected);
});
it('null fields defaults to empty map', () => {
const result = writer.writeRequest({ gremlin: 'g.V()', fields: null });
const expected = Buffer.from([
0x84, // version
0x00, 0x00, 0x00, 0x00, // empty map bare (length=0)
0x00, 0x00, 0x00, 0x05, // string length=5
0x67, 0x2E, 0x56, 0x28, 0x29 // "g.V()"
]);
assert.deepEqual(result, expected);
});
});
describe('gremlin as bare string', () => {
it('no type_code/value_flag prefix on gremlin', () => {
const result = writer.writeRequest({ gremlin: 'g.V().count()', fields: new Map() });
// Verify gremlin portion starts with length, not type_code
const gremlinStart = 5; // after version + empty map
assert.equal(result[gremlinStart], 0x00); // length byte 1
assert.equal(result[gremlinStart + 1], 0x00); // length byte 2
assert.equal(result[gremlinStart + 2], 0x00); // length byte 3
assert.equal(result[gremlinStart + 3], 0x0D); // length=13
assert.equal(result[gremlinStart + 4], 0x67); // 'g'
});
});
describe('empty gremlin', () => {
it('empty string has length 0', () => {
const result = writer.writeRequest({ gremlin: '', fields: new Map() });
const expected = Buffer.from([
0x84, // version
0x00, 0x00, 0x00, 0x00, // empty map bare (length=0)
0x00, 0x00, 0x00, 0x00 // empty string bare (length=0)
]);
assert.deepEqual(result, expected);
});
});
});