From 42b92c794f8724c2078717a04a7bd67ad434b52c Mon Sep 17 00:00:00 2001 From: Frank Celler Date: Tue, 2 Apr 2013 17:46:19 +0200 Subject: [PATCH] fixed error messages and tests --- arangod/V8Server/v8-vocbase.cpp | 20 +++++++++---------- arangod/VocBase/index.c | 2 +- html/admin/js/bootstrap/errors.js | 1 + html/admin/js/modules/org/arangodb-common.js | 8 +++++++- .../admin/js/modules/org/arangodb/arangosh.js | 9 +++++++-- js/client/modules/org/arangodb/arangosh.js | 9 +++++++-- js/common/bootstrap/errors.js | 1 + js/server/modules/org/arangodb/actions.js | 8 ++++---- lib/BasicsC/errors.dat | 1 + lib/BasicsC/voc-errors.c | 1 + lib/BasicsC/voc-errors.h | 16 +++++++++++++-- 11 files changed, 53 insertions(+), 23 deletions(-) diff --git a/arangod/V8Server/v8-vocbase.cpp b/arangod/V8Server/v8-vocbase.cpp index 3bda3dc8f0..58877c6da7 100644 --- a/arangod/V8Server/v8-vocbase.cpp +++ b/arangod/V8Server/v8-vocbase.cpp @@ -453,7 +453,7 @@ int AttributeNamesFromArguments (v8::Arguments const& argv, error = "invalid attribute name"; TRI_FreeContentVectorPointer(TRI_CORE_MEM_ZONE, result); - return TRI_set_errno(TRI_ERROR_ILLEGAL_OPTION); + return TRI_set_errno(TRI_ERROR_BAD_PARAMETER); } TRI_Utf8ValueNFC argumentString(TRI_UNKNOWN_MEM_ZONE, argument); @@ -471,7 +471,7 @@ int AttributeNamesFromArguments (v8::Arguments const& argv, error = "invalid attribute name"; TRI_FreeContentVectorPointer(TRI_CORE_MEM_ZONE, result); - return TRI_set_errno(TRI_ERROR_ILLEGAL_OPTION); + return TRI_set_errno(TRI_ERROR_BAD_PARAMETER); } TRI_PushBackVectorPointer(result, cArgument); @@ -491,7 +491,7 @@ int AttributeNamesFromArguments (v8::Arguments const& argv, error = "duplicate attribute names"; TRI_FreeContentVectorPointer(TRI_CORE_MEM_ZONE, result); - return TRI_set_errno(TRI_ERROR_ILLEGAL_OPTION); + return TRI_set_errno(TRI_ERROR_BAD_PARAMETER); } } @@ -3703,7 +3703,7 @@ static v8::Handle EnsureBitarray (v8::Arguments const& argv, bool sup if (! argument->IsString() ) { errorString = "invalid parameter -- expected string parameter"; - errorCode = TRI_ERROR_ILLEGAL_OPTION; + errorCode = TRI_ERROR_BAD_PARAMETER; ok = false; break; } @@ -3722,12 +3722,11 @@ static v8::Handle EnsureBitarray (v8::Arguments const& argv, bool sup if (! argument->IsArray() ) { errorString = "invalid parameter -- expected an array (list)"; - errorCode = TRI_ERROR_ILLEGAL_OPTION; + errorCode = TRI_ERROR_BAD_PARAMETER; ok = false; break; } - // ......................................................................... // Attempt to convert the V8 javascript function argument into a TRI_json_t // ......................................................................... @@ -3741,7 +3740,7 @@ static v8::Handle EnsureBitarray (v8::Arguments const& argv, bool sup if (value == 0) { errorString = "invalid parameter -- expected an array (list)"; - errorCode = TRI_ERROR_ILLEGAL_OPTION; + errorCode = TRI_ERROR_BAD_PARAMETER; ok = false; break; } @@ -3753,7 +3752,7 @@ static v8::Handle EnsureBitarray (v8::Arguments const& argv, bool sup if (value->_type != TRI_JSON_LIST) { errorString = "invalid parameter -- expected an array (list)"; - errorCode = TRI_ERROR_ILLEGAL_OPTION; + errorCode = TRI_ERROR_BAD_PARAMETER; ok = false; break; } @@ -3772,13 +3771,11 @@ static v8::Handle EnsureBitarray (v8::Arguments const& argv, bool sup if (attributes._length != values._length) { errorString = "invalid parameter -- expected an array (list)"; - errorCode = TRI_ERROR_ILLEGAL_OPTION; + errorCode = TRI_ERROR_BAD_PARAMETER; ok = false; } } - - // ............................................................................. // Actually create the index here // ............................................................................. @@ -3786,6 +3783,7 @@ static v8::Handle EnsureBitarray (v8::Arguments const& argv, bool sup if (ok) { char* errorStr = 0; bitarrayIndex = TRI_EnsureBitarrayIndexDocumentCollection(document, &attributes, &values, supportUndef, &indexCreated, &errorCode, &errorStr); + if (bitarrayIndex == 0) { if (errorStr == 0) { errorString = "index could not be created from Simple Collection"; diff --git a/arangod/VocBase/index.c b/arangod/VocBase/index.c index d2bc24f6ed..460b5272b8 100644 --- a/arangod/VocBase/index.c +++ b/arangod/VocBase/index.c @@ -2780,7 +2780,7 @@ TRI_index_t* TRI_CreateBitarrayIndex (struct TRI_primary_collection_s* primary, if (valueList == NULL || valueList->_type != TRI_JSON_LIST) { LOG_WARNING("bitarray index creation failed -- list of values for index undefined"); - *errorNum = TRI_ERROR_ILLEGAL_OPTION; + *errorNum = TRI_ERROR_BAD_PARAMETER; *errorStr = TRI_DuplicateString("bitarray index creation failed -- list of values for index undefined"); return NULL; } diff --git a/html/admin/js/bootstrap/errors.js b/html/admin/js/bootstrap/errors.js index 037966e79f..61d4e36911 100644 --- a/html/admin/js/bootstrap/errors.js +++ b/html/admin/js/bootstrap/errors.js @@ -32,6 +32,7 @@ "ERROR_FILE_NOT_FOUND" : { "code" : 14, "message" : "file not found" }, "ERROR_CANNOT_WRITE_FILE" : { "code" : 15, "message" : "cannot write file" }, "ERROR_CANNOT_OVERWRITE_FILE" : { "code" : 16, "message" : "cannot overwrite file" }, + "ERROR_TYPE_ERROR" : { "code" : 17, "message" : "type error" }, "ERROR_HTTP_BAD_PARAMETER" : { "code" : 400, "message" : "bad parameter" }, "ERROR_HTTP_FORBIDDEN" : { "code" : 403, "message" : "forbidden" }, "ERROR_HTTP_NOT_FOUND" : { "code" : 404, "message" : "not found" }, diff --git a/html/admin/js/modules/org/arangodb-common.js b/html/admin/js/modules/org/arangodb-common.js index ad6d047af5..97f9b7a095 100644 --- a/html/admin/js/modules/org/arangodb-common.js +++ b/html/admin/js/modules/org/arangodb-common.js @@ -287,7 +287,13 @@ exports.printTable = function (list, columns, framed) { fixedLength = columns[col] >= pad.length ? columns[col] : pad.length; } - descriptions.push({ id: col, name: col, fixedLength: fixedLength, length: fixedLength || col.length }); + descriptions.push({ + id: col, + name: col, + fixedLength: fixedLength, + length: fixedLength || col.length + }); + matrix[0][j++] = col; } } diff --git a/html/admin/js/modules/org/arangodb/arangosh.js b/html/admin/js/modules/org/arangodb/arangosh.js index 8817576669..6595458b08 100644 --- a/html/admin/js/modules/org/arangodb/arangosh.js +++ b/html/admin/js/modules/org/arangodb/arangosh.js @@ -90,18 +90,23 @@ exports.createHelpHeadline = function (text) { // must came after the export of createHelpHeadline var ArangoError = require("org/arangodb/arango-error").ArangoError; +var arangodb = require("org/arangodb"); exports.checkRequestResult = function (requestResult) { if (requestResult === undefined) { requestResult = { "error" : true, - "code" : 0, - "errorNum" : 0, + "code" : 500, + "errorNum" : arangodb.ERROR_INTERNAL, "errorMessage" : "Unknown error. Request result is empty" }; } if (requestResult.error !== undefined && requestResult.error) { + if (requestResult.errorNum === arangodb.ERROR_TYPE_ERROR) { + throw new TypeError(requestResult.errorMessage); + } + throw new ArangoError(requestResult); } }; diff --git a/js/client/modules/org/arangodb/arangosh.js b/js/client/modules/org/arangodb/arangosh.js index 282e0a12b8..c2036d7e60 100644 --- a/js/client/modules/org/arangodb/arangosh.js +++ b/js/client/modules/org/arangodb/arangosh.js @@ -89,18 +89,23 @@ exports.createHelpHeadline = function (text) { // must came after the export of createHelpHeadline var ArangoError = require("org/arangodb/arango-error").ArangoError; +var arangodb = require("org/arangodb"); exports.checkRequestResult = function (requestResult) { if (requestResult === undefined) { requestResult = { "error" : true, - "code" : 0, - "errorNum" : 0, + "code" : 500, + "errorNum" : arangodb.ERROR_INTERNAL, "errorMessage" : "Unknown error. Request result is empty" }; } if (requestResult.error !== undefined && requestResult.error) { + if (requestResult.errorNum === arangodb.ERROR_TYPE_ERROR) { + throw new TypeError(requestResult.errorMessage); + } + throw new ArangoError(requestResult); } }; diff --git a/js/common/bootstrap/errors.js b/js/common/bootstrap/errors.js index 037966e79f..61d4e36911 100644 --- a/js/common/bootstrap/errors.js +++ b/js/common/bootstrap/errors.js @@ -32,6 +32,7 @@ "ERROR_FILE_NOT_FOUND" : { "code" : 14, "message" : "file not found" }, "ERROR_CANNOT_WRITE_FILE" : { "code" : 15, "message" : "cannot write file" }, "ERROR_CANNOT_OVERWRITE_FILE" : { "code" : 16, "message" : "cannot overwrite file" }, + "ERROR_TYPE_ERROR" : { "code" : 17, "message" : "type error" }, "ERROR_HTTP_BAD_PARAMETER" : { "code" : 400, "message" : "bad parameter" }, "ERROR_HTTP_FORBIDDEN" : { "code" : 403, "message" : "forbidden" }, "ERROR_HTTP_NOT_FOUND" : { "code" : 404, "message" : "not found" }, diff --git a/js/server/modules/org/arangodb/actions.js b/js/server/modules/org/arangodb/actions.js index e1347b86e4..f3482a569f 100644 --- a/js/server/modules/org/arangodb/actions.js +++ b/js/server/modules/org/arangodb/actions.js @@ -1639,10 +1639,10 @@ function resultException (req, res, err, headers) { } if (msg === "") { - msg = String(err) + " " + String(err.stack); + msg = String(err) + ": " + String(err.stack); } else { - msg += " " + String(err.stack); + msg += ": " + String(err.stack); } switch (num) { @@ -1659,9 +1659,9 @@ function resultException (req, res, err, headers) { resultError(req, res, code, num, msg, headers); } else if (err instanceof TypeError) { - num = arangodb.ERROR_HTTP_BAD_PARAMETER; + num = arangodb.ERROR_TYPE_ERROR; code = exports.HTTP_BAD; - msg = String(err.message) + " " + String(err.stack); + msg = String(err.message) + ": " + String(err.stack); resultError(req, res, code, num, msg, headers); } diff --git a/lib/BasicsC/errors.dat b/lib/BasicsC/errors.dat index fc91e0128b..3adce2b848 100755 --- a/lib/BasicsC/errors.dat +++ b/lib/BasicsC/errors.dat @@ -19,6 +19,7 @@ ERROR_CORRUPTED_CSV,13,"csv is corrupt","Will be raised when encountering a corr ERROR_FILE_NOT_FOUND,14,"file not found","Will be raised when a file is not found." ERROR_CANNOT_WRITE_FILE,15,"cannot write file","Will be raised when a file cannot be written." ERROR_CANNOT_OVERWRITE_FILE,16,"cannot overwrite file","Will be raised when an attempt is made to overwrite an existing file." +ERROR_TYPE_ERROR,17,"type error","Will be raised when a type error is unencountered." ################################################################################ ## HTTP standard errors diff --git a/lib/BasicsC/voc-errors.c b/lib/BasicsC/voc-errors.c index 2dde7a2732..be044f70ea 100644 --- a/lib/BasicsC/voc-errors.c +++ b/lib/BasicsC/voc-errors.c @@ -28,6 +28,7 @@ void TRI_InitialiseErrorMessages (void) { REG_ERROR(ERROR_FILE_NOT_FOUND, "file not found"); REG_ERROR(ERROR_CANNOT_WRITE_FILE, "cannot write file"); REG_ERROR(ERROR_CANNOT_OVERWRITE_FILE, "cannot overwrite file"); + REG_ERROR(ERROR_TYPE_ERROR, "type error"); REG_ERROR(ERROR_HTTP_BAD_PARAMETER, "bad parameter"); REG_ERROR(ERROR_HTTP_FORBIDDEN, "forbidden"); REG_ERROR(ERROR_HTTP_NOT_FOUND, "not found"); diff --git a/lib/BasicsC/voc-errors.h b/lib/BasicsC/voc-errors.h index 30e8a8c2b6..de9209ea31 100644 --- a/lib/BasicsC/voc-errors.h +++ b/lib/BasicsC/voc-errors.h @@ -1,6 +1,6 @@ -#ifndef TRIAGENS_BASICS_C_ERRORS_H -#define TRIAGENS_BASICS_C_ERRORS_H 1 +#ifndef TRIAGENS_BASICS_C_VOC_ERRORS_H +#define TRIAGENS_BASICS_C_VOC_ERRORS_H 1 #ifdef __cplusplus extern "C" { @@ -45,6 +45,8 @@ extern "C" { /// Will be raised when a file cannot be written. /// - 16: @LIT{cannot overwrite file} /// Will be raised when an attempt is made to overwrite an existing file. +/// - 17: @LIT{type error} +/// Will be raised when a type error is unencountered. /// - 400: @LIT{bad parameter} /// Will be raised when the HTTP request does not fulfill the requirements. /// - 403: @LIT{forbidden} @@ -565,6 +567,16 @@ void TRI_InitialiseErrorMessages (void); #define TRI_ERROR_CANNOT_OVERWRITE_FILE (16) +//////////////////////////////////////////////////////////////////////////////// +/// @brief 17: ERROR_TYPE_ERROR +/// +/// type error +/// +/// Will be raised when a type error is unencountered. +//////////////////////////////////////////////////////////////////////////////// + +#define TRI_ERROR_TYPE_ERROR (17) + //////////////////////////////////////////////////////////////////////////////// /// @brief 400: ERROR_HTTP_BAD_PARAMETER ///