Skip to content

Commit

Permalink
SNOW-728803: Add test for special case when resubmitting requets
Browse files Browse the repository at this point in the history
  • Loading branch information
sfc-gh-ext-simba-lf committed Sep 21, 2023
1 parent 84d6dd3 commit 2f6a4ab
Show file tree
Hide file tree
Showing 3 changed files with 176 additions and 0 deletions.
6 changes: 6 additions & 0 deletions lib/connection/statement.js
Original file line number Diff line number Diff line change
Expand Up @@ -420,6 +420,12 @@ function createContextPreExec(
{
statementContext.requestId = statementOptions.requestId;
}

// SNOW-728803: In QA mode, set resubmitRequest to true to test that sqlText
// is not overwritten if a sqlText is already specified by the user
if (statementOptions.requestId === 'SNOW-728803-requestId') {
statementContext.resubmitRequest = true;
}
}

return statementContext;
Expand Down
105 changes: 105 additions & 0 deletions test/unit/mock/mock_http_client.js
Original file line number Diff line number Diff line change
Expand Up @@ -697,6 +697,111 @@ function buildRequestOutputMappings(clientInfo)
}
}
},
{
request:
{
method: 'POST',
url: 'http://fakeaccount.snowflakecomputing.com/queries/v1/query-request?requestId=',
headers:
{
'Accept': 'application/snowflake',
'Authorization': 'Snowflake Token="SESSION_TOKEN"',
'Content-Type': 'application/json'
},
json:
{
disableOfflineChunks: false,
sqlText: 'select 1;'
}
},
output:
{
err: null,
response:
{
statusCode: 401,
statusMessage: 'Unauthorized',
body:
{
'data' : null,
'code': '390103',
'message': 'Session token not found in the request data.',
'success': false,
}
}
}
},
{
request:
{
method: 'POST',
url: 'http://fakeaccount.snowflakecomputing.com/queries/v1/query-request?requestId=SNOW-728803-requestId',
headers:
{
'Accept': 'application/snowflake',
'Authorization': 'Snowflake Token="SESSION_TOKEN"',
'Content-Type': 'application/json'
},
json:
{
disableOfflineChunks: false,
sqlText: 'SELECT \'Error retrieving query results for request id: SNOW-728803-requestId, please use RESULT_SCAN instead\' AS ErrorMessage;'
}
},
output:
{
err: null,
response:
{
body:
{
'message': 'The specified sqlText should not be overwritten when resubmitting the request',
'success': false
}
}
}
},
{
request:
{
method: 'POST',
url: 'http://fakeaccount.snowflakecomputing.com/queries/v1/query-request?requestId=SNOW-728803-requestId',
headers:
{
'Accept': 'application/snowflake',
'Authorization': 'Snowflake Token="SESSION_TOKEN"',
'Content-Type': 'application/json'
},
json:
{
disableOfflineChunks: false,
sqlText: 'select 1;'
}
},
output:
{
err: null,
response:
{
statusCode: 200,
statusMessage: 'OK',
body:
{
'data':
{
'parameters': [],
'rowtype': [],
'rowset': [['1']],
'total': 1,
'returned': 1
},
'message': null,
'code': null,
'success': true
}
}
}
},
{
request:
{
Expand Down
65 changes: 65 additions & 0 deletions test/unit/snowflake_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -936,6 +936,71 @@ describe('connection.execute() statement failure', function ()
});
});

describe('connection.execute() with requestId', function () {
const connection = snowflake.createConnection(connectionOptions);
const sqlText = 'select 1;';
const requestId = 'SNOW-728803-requestId';

it('keep original sqlText when resubmitting requests', function (done) {
let statement;

async.series(
[
function (callback) {
connection.connect(function (err, conn) {
assert.ok(!err, 'there should be no error');
assert.strictEqual(conn, connection,
'the connect() callback should be invoked with the statement');

callback();
});
},
function (callback) {
// 1st request fails with an error
statement = connection.execute(
{
sqlText: sqlText,
complete: function (err, stmt) {
assert.ok(err, 'there should be an error');
assert.strictEqual(stmt, statement,
'the execute() callback should be invoked with the statement');

callback();
}
});
},
function (callback) {
// 2nd request with sqlText and requestId specified
statement = connection.execute(
{
sqlText: sqlText,
requestId: requestId,
complete: function (err, stmt) {
// if there's an error, fail the test with the error
if (err) {
done(err);
}

assert.ok(!err, 'there should be no error');
assert.strictEqual(stmt, statement,
'the execute() callback should be invoked with the statement');

callback();
}
});

// the sql text and request id should be the same as what was passed
// in
assert.strictEqual(statement.getSqlText(), sqlText);
assert.strictEqual(statement.getRequestId(), requestId);
}
],
function () {
done();
});
});
});

describe('too many concurrent requests', function ()
{
it('too many concurrent requests per user', function (done)
Expand Down

0 comments on commit 2f6a4ab

Please sign in to comment.