blob: 3bda9b20ae0e38a4e2d10cc79f13dee1f272564d [file] [log] [blame]
/*
*
* Copyright (c) 2016-2017 Nest Labs, Inc.
* All rights reserved.
*
* Licensed 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.
*/
/**
* @file
* This file implements a process to effect a functional test for
* the Weave error string support library interfaces.
*
*/
#ifndef __STDC_FORMAT_MACROS
#define __STDC_FORMAT_MACROS
#endif
#ifndef __STDC_LIMIT_MACROS
#define __STDC_LIMIT_MACROS
#endif
#include <stdint.h>
#include <string.h>
#include <Weave/Support/ASN1Error.h>
#include <InetLayer/InetError.h>
#include <BleLayer/BleError.h>
#include <Weave/Core/WeaveError.h>
#include <Weave/Support/ErrorStr.h>
#include <nltest.h>
#include "ToolCommon.h"
// Test input data.
static int32_t sContext[] = {
0,
WEAVE_SYSTEM_ERROR_NOT_IMPLEMENTED,
WEAVE_SYSTEM_ERROR_NOT_SUPPORTED,
WEAVE_SYSTEM_ERROR_BAD_ARGS,
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE,
WEAVE_SYSTEM_ERROR_UNEXPECTED_EVENT,
WEAVE_SYSTEM_ERROR_NO_MEMORY,
INET_ERROR_WRONG_ADDRESS_TYPE,
INET_ERROR_CONNECTION_ABORTED,
INET_ERROR_PEER_DISCONNECTED,
INET_ERROR_INCORRECT_STATE,
INET_ERROR_MESSAGE_TOO_LONG,
INET_ERROR_NO_CONNECTION_HANDLER,
INET_ERROR_NO_MEMORY,
INET_ERROR_OUTBOUND_MESSAGE_TRUNCATED,
INET_ERROR_INBOUND_MESSAGE_TOO_BIG,
INET_ERROR_HOST_NOT_FOUND,
INET_ERROR_DNS_TRY_AGAIN,
INET_ERROR_DNS_NO_RECOVERY,
INET_ERROR_BAD_ARGS,
INET_ERROR_WRONG_PROTOCOL_TYPE,
INET_ERROR_UNKNOWN_INTERFACE,
INET_ERROR_NOT_IMPLEMENTED,
INET_ERROR_ADDRESS_NOT_FOUND,
INET_ERROR_HOST_NAME_TOO_LONG,
INET_ERROR_INVALID_HOST_NAME,
INET_ERROR_NOT_SUPPORTED,
INET_ERROR_NO_ENDPOINTS,
INET_ERROR_IDLE_TIMEOUT,
INET_ERROR_UNEXPECTED_EVENT,
INET_ERROR_INVALID_IPV6_PKT,
INET_ERROR_INTERFACE_INIT_FAILURE,
INET_ERROR_TCP_USER_TIMEOUT,
BLE_ERROR_BAD_ARGS,
BLE_ERROR_INCORRECT_STATE,
BLE_ERROR_NO_ENDPOINTS,
BLE_ERROR_NO_CONNECTION_RECEIVED_CALLBACK,
BLE_ERROR_CENTRAL_UNSUBSCRIBED,
BLE_ERROR_GATT_SUBSCRIBE_FAILED,
BLE_ERROR_GATT_UNSUBSCRIBE_FAILED,
BLE_ERROR_GATT_WRITE_FAILED,
BLE_ERROR_GATT_INDICATE_FAILED,
BLE_ERROR_NOT_IMPLEMENTED,
BLE_ERROR_INVALID_ROLE,
BLE_ERROR_WOBLE_PROTOCOL_ABORT,
BLE_ERROR_REMOTE_DEVICE_DISCONNECTED,
BLE_ERROR_APP_CLOSED_CONNECTION,
BLE_ERROR_OUTBOUND_MESSAGE_TOO_BIG,
BLE_ERROR_NOT_WEAVE_DEVICE,
BLE_ERROR_INCOMPATIBLE_PROTOCOL_VERSIONS,
BLE_ERROR_NO_MEMORY,
BLE_ERROR_MESSAGE_INCOMPLETE,
BLE_ERROR_INVALID_FRAGMENT_SIZE,
BLE_ERROR_START_TIMER_FAILED,
BLE_ERROR_CONNECT_TIMED_OUT,
BLE_ERROR_RECEIVE_TIMED_OUT,
BLE_ERROR_INVALID_MESSAGE,
BLE_ERROR_FRAGMENT_ACK_TIMED_OUT,
BLE_ERROR_KEEP_ALIVE_TIMED_OUT,
BLE_ERRROR_NO_CONNECT_COMPLETE_CALLBACK,
BLE_ERROR_INVALID_ACK,
BLE_ERROR_REASSEMBLER_MISSING_DATA,
BLE_ERROR_INVALID_BTP_HEADER_FLAGS,
BLE_ERROR_INVALID_BTP_SEQUENCE_NUMBER,
BLE_ERROR_REASSEMBLER_INCORRECT_STATE,
BLE_ERROR_RECEIVED_MESSAGE_TOO_BIG,
WEAVE_ERROR_TOO_MANY_CONNECTIONS,
WEAVE_ERROR_SENDING_BLOCKED,
WEAVE_ERROR_CONNECTION_ABORTED,
WEAVE_ERROR_INCORRECT_STATE,
WEAVE_ERROR_MESSAGE_TOO_LONG,
WEAVE_ERROR_UNSUPPORTED_EXCHANGE_VERSION,
WEAVE_ERROR_TOO_MANY_UNSOLICITED_MESSAGE_HANDLERS,
WEAVE_ERROR_NO_UNSOLICITED_MESSAGE_HANDLER,
WEAVE_ERROR_NO_CONNECTION_HANDLER,
WEAVE_ERROR_TOO_MANY_PEER_NODES,
WEAVE_ERROR_NO_MEMORY,
WEAVE_ERROR_NO_MESSAGE_HANDLER,
WEAVE_ERROR_MESSAGE_INCOMPLETE,
WEAVE_ERROR_DATA_NOT_ALIGNED,
WEAVE_ERROR_UNKNOWN_KEY_TYPE,
WEAVE_ERROR_KEY_NOT_FOUND,
WEAVE_ERROR_WRONG_ENCRYPTION_TYPE,
WEAVE_ERROR_TOO_MANY_KEYS,
WEAVE_ERROR_INTEGRITY_CHECK_FAILED,
WEAVE_ERROR_INVALID_SIGNATURE,
WEAVE_ERROR_UNSUPPORTED_MESSAGE_VERSION,
WEAVE_ERROR_UNSUPPORTED_ENCRYPTION_TYPE,
WEAVE_ERROR_UNSUPPORTED_SIGNATURE_TYPE,
WEAVE_ERROR_INVALID_MESSAGE_LENGTH,
WEAVE_ERROR_BUFFER_TOO_SMALL,
WEAVE_ERROR_DUPLICATE_KEY_ID,
WEAVE_ERROR_WRONG_KEY_TYPE,
WEAVE_ERROR_WELL_UNINITIALIZED,
WEAVE_ERROR_WELL_EMPTY,
WEAVE_ERROR_INVALID_STRING_LENGTH,
WEAVE_ERROR_INVALID_LIST_LENGTH,
WEAVE_ERROR_INVALID_INTEGRITY_TYPE,
WEAVE_END_OF_TLV,
WEAVE_ERROR_TLV_UNDERRUN,
WEAVE_ERROR_INVALID_TLV_ELEMENT,
WEAVE_ERROR_INVALID_TLV_TAG,
WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG,
WEAVE_ERROR_WRONG_TLV_TYPE,
WEAVE_ERROR_TLV_CONTAINER_OPEN,
WEAVE_ERROR_INVALID_TRANSFER_MODE,
WEAVE_ERROR_INVALID_PROFILE_ID,
WEAVE_ERROR_INVALID_MESSAGE_TYPE,
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT,
WEAVE_ERROR_STATUS_REPORT_RECEIVED,
WEAVE_ERROR_NOT_IMPLEMENTED,
WEAVE_ERROR_INVALID_ADDRESS,
WEAVE_ERROR_INVALID_ARGUMENT,
WEAVE_ERROR_TLV_TAG_NOT_FOUND,
WEAVE_ERROR_INVALID_PATH_LIST,
WEAVE_ERROR_INVALID_DATA_LIST,
WEAVE_ERROR_TRANSACTION_CANCELED,
WEAVE_ERROR_LISTENER_ALREADY_STARTED,
WEAVE_ERROR_LISTENER_ALREADY_STOPPED,
WEAVE_ERROR_UNKNOWN_TOPIC,
WEAVE_ERROR_TIMEOUT,
WEAVE_ERROR_INVALID_DEVICE_DESCRIPTOR,
WEAVE_ERROR_UNSUPPORTED_DEVICE_DESCRIPTOR_VERSION,
WEAVE_END_OF_INPUT,
WEAVE_ERROR_RATE_LIMIT_EXCEEDED,
WEAVE_ERROR_SECURITY_MANAGER_BUSY,
WEAVE_ERROR_INVALID_PASE_PARAMETER,
WEAVE_ERROR_PASE_SUPPORTS_ONLY_CONFIG1,
WEAVE_ERROR_NO_COMMON_PASE_CONFIGURATIONS,
WEAVE_ERROR_INVALID_PASE_CONFIGURATION,
WEAVE_ERROR_KEY_CONFIRMATION_FAILED,
WEAVE_ERROR_INVALID_USE_OF_SESSION_KEY,
WEAVE_ERROR_CONNECTION_CLOSED_UNEXPECTEDLY,
WEAVE_ERROR_MISSING_TLV_ELEMENT,
WEAVE_ERROR_RANDOM_DATA_UNAVAILABLE,
WEAVE_ERROR_UNSUPPORTED_HOST_PORT_ELEMENT,
WEAVE_ERROR_INVALID_HOST_SUFFIX_INDEX,
WEAVE_ERROR_HOST_PORT_LIST_EMPTY,
WEAVE_ERROR_UNSUPPORTED_AUTH_MODE,
WEAVE_ERROR_INVALID_SERVICE_EP,
WEAVE_ERROR_INVALID_DIRECTORY_ENTRY_TYPE,
WEAVE_ERROR_FORCED_RESET,
WEAVE_ERROR_NO_ENDPOINT,
WEAVE_ERROR_INVALID_DESTINATION_NODE_ID,
WEAVE_ERROR_NOT_CONNECTED,
WEAVE_ERROR_NO_SW_UPDATE_AVAILABLE,
WEAVE_ERROR_CA_CERT_NOT_FOUND,
WEAVE_ERROR_CERT_PATH_LEN_CONSTRAINT_EXCEEDED,
WEAVE_ERROR_CERT_PATH_TOO_LONG,
WEAVE_ERROR_CERT_USAGE_NOT_ALLOWED,
WEAVE_ERROR_CERT_EXPIRED,
WEAVE_ERROR_CERT_NOT_VALID_YET,
WEAVE_ERROR_UNSUPPORTED_CERT_FORMAT,
WEAVE_ERROR_UNSUPPORTED_ELLIPTIC_CURVE,
WEAVE_CERT_NOT_USED,
WEAVE_ERROR_CERT_NOT_FOUND,
WEAVE_ERROR_INVALID_CASE_PARAMETER,
WEAVE_ERROR_UNSUPPORTED_CASE_CONFIGURATION,
WEAVE_ERROR_CERT_LOAD_FAIL,
WEAVE_ERROR_CERT_NOT_TRUSTED,
WEAVE_ERROR_INVALID_ACCESS_TOKEN,
WEAVE_ERROR_WRONG_CERT_SUBJECT,
WEAVE_ERROR_WRONG_NODE_ID,
WEAVE_ERROR_CONN_ACCEPTED_ON_WRONG_PORT,
WEAVE_ERROR_CALLBACK_REPLACED,
WEAVE_ERROR_NO_CASE_AUTH_DELEGATE,
WEAVE_ERROR_DEVICE_LOCATE_TIMEOUT,
WEAVE_ERROR_DEVICE_CONNECT_TIMEOUT,
WEAVE_ERROR_DEVICE_AUTH_TIMEOUT,
WEAVE_ERROR_MESSAGE_NOT_ACKNOWLEDGED,
WEAVE_ERROR_RETRANS_TABLE_FULL,
WEAVE_ERROR_INVALID_ACK_ID,
WEAVE_ERROR_SEND_THROTTLED,
WEAVE_ERROR_WRONG_MSG_VERSION_FOR_EXCHANGE,
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE,
WEAVE_ERROR_UNSOLICITED_MSG_NO_ORIGINATOR,
WEAVE_ERROR_UNSUPPORTED_TUNNEL_VERSION,
WEAVE_ERROR_INVALID_FABRIC_ID,
WEAVE_ERROR_TUNNEL_NEXTHOP_TABLE_FULL,
WEAVE_ERROR_TUNNEL_SERVICE_QUEUE_FULL,
WEAVE_ERROR_TUNNEL_PEER_ENTRY_NOT_FOUND,
WEAVE_ERROR_TUNNEL_FORCE_ABORT,
WEAVE_ERROR_DRBG_ENTROPY_SOURCE_FAILED,
WEAVE_ERROR_NO_TAKE_AUTH_DELEGATE,
WEAVE_ERROR_TAKE_RECONFIGURE_REQUIRED,
WEAVE_ERROR_TAKE_REAUTH_POSSIBLE,
WEAVE_ERROR_INVALID_TAKE_PARAMETER,
WEAVE_ERROR_UNSUPPORTED_TAKE_CONFIGURATION,
WEAVE_ERROR_TAKE_TOKEN_IDENTIFICATION_FAILED,
WEAVE_ERROR_INVALID_TOKENPAIRINGBUNDLE,
WEAVE_ERROR_UNSUPPORTED_TOKENPAIRINGBUNDLE_VERSION,
WEAVE_ERROR_KEY_NOT_FOUND_FROM_PEER,
WEAVE_ERROR_WRONG_ENCRYPTION_TYPE_FROM_PEER,
WEAVE_ERROR_UNKNOWN_KEY_TYPE_FROM_PEER,
WEAVE_ERROR_INVALID_USE_OF_SESSION_KEY_FROM_PEER,
WEAVE_ERROR_UNSUPPORTED_ENCRYPTION_TYPE_FROM_PEER,
WEAVE_ERROR_INTERNAL_KEY_ERROR_FROM_PEER,
WEAVE_ERROR_INVALID_KEY_ID,
WEAVE_ERROR_INVALID_TIME,
WEAVE_ERROR_LOCKING_FAILURE,
WEAVE_ERROR_UNSUPPORTED_PASSCODE_CONFIG,
WEAVE_ERROR_PASSCODE_AUTHENTICATION_FAILED,
WEAVE_ERROR_PASSCODE_FINGERPRINT_FAILED,
WEAVE_ERROR_INVALID_INTEGER_VALUE,
WEAVE_ERROR_TOO_MANY_CASE_RECONFIGURATIONS,
WEAVE_ERROR_INVALID_MESSAGE_FLAG,
WEAVE_ERROR_SERIALIZATION_ELEMENT_NULL,
WEAVE_ERROR_KEY_EXPORT_RECONFIGURE_REQUIRED,
WEAVE_ERROR_INVALID_KEY_EXPORT_CONFIGURATION,
WEAVE_ERROR_NO_COMMON_KEY_EXPORT_CONFIGURATIONS,
WEAVE_ERROR_NO_KEY_EXPORT_DELEGATE,
WEAVE_ERROR_UNAUTHORIZED_KEY_EXPORT_REQUEST,
WEAVE_ERROR_UNAUTHORIZED_KEY_EXPORT_RESPONSE,
WEAVE_ERROR_EXPORTED_KEY_AUTHENTICATION_FAILED,
WEAVE_ERROR_TOO_MANY_SHARED_SESSION_END_NODES,
WEAVE_ERROR_WDM_MALFORMED_DATA_ELEMENT,
WEAVE_ERROR_WRONG_CERT_TYPE,
WEAVE_ERROR_DEFAULT_EVENT_HANDLER_NOT_CALLED,
WEAVE_ERROR_PERSISTED_STORAGE_FAIL,
WEAVE_ERROR_PERSISTED_STORAGE_VALUE_NOT_FOUND,
WEAVE_ERROR_TIME_NOT_SYNCED_YET,
WEAVE_ERROR_UNSUPPORTED_CLOCK,
WEAVE_ERROR_TUNNEL_ROUTING_RESTRICTED,
ASN1_END,
ASN1_ERROR_UNDERRUN,
ASN1_ERROR_OVERFLOW,
ASN1_ERROR_INVALID_STATE,
ASN1_ERROR_MAX_DEPTH_EXCEEDED,
ASN1_ERROR_INVALID_ENCODING,
ASN1_ERROR_UNSUPPORTED_ENCODING,
ASN1_ERROR_TAG_OVERFLOW,
ASN1_ERROR_LENGTH_OVERFLOW,
ASN1_ERROR_VALUE_OVERFLOW,
ASN1_ERROR_UNKNOWN_OBJECT_ID,
// SubsystemFormatError
INET_ERROR_MIN + 150,
WEAVE_ERROR_MIN + 150,
ASN1_ERROR_MIN + 150,
BLE_ERROR_MIN + 150
};
static const size_t kTestElements = sizeof(sContext) / sizeof(sContext[0]);
static void CheckErrorStrStart(nlTestSuite *inSuite, void *inContext)
{
char errStr[20];
// init errStr with FormatError(err), which is for the error that does not have a well defined description string
// then compare the actural ErrorStr(err) with errStr to ensure that each err has its description sting
for (size_t ith = 0; ith < kTestElements; ith++)
{
#if WEAVE_CONFIG_SHORT_ERROR_STR
snprintf(errStr, sizeof(errStr), "Error 0x%" PRIx32, sContext[ith]);
#else
snprintf(errStr, sizeof(errStr), "Error %" PRId32, sContext[ith]);
#endif
NL_TEST_ASSERT(inSuite, (strcmp(ErrorStr(sContext[ith]), errStr) != 0));
}
}
/**
* Test Suite. It lists all the test functions.
*/
static const nlTest sTests[] = {
NL_TEST_DEF("ErrorStr", CheckErrorStrStart),
NL_TEST_SENTINEL()
};
/**
* Set up the test suite.
* This is a work-around to initiate InetBuffer protected class instance's
* data and set it to a known state, before an instance is created.
*/
static int TestSetup(void *inContext)
{
return (SUCCESS);
}
/**
* Tear down the test suite.
* Free memory reserved at TestSetup.
*/
static int TestTeardown(void *inContext)
{
return (SUCCESS);
}
int main(void)
{
nlTestSuite theSuite = {
"Error-Strings",
&sTests[0],
TestSetup,
TestTeardown
};
// Generate machine-readable, comma-separated value (CSV) output.
nl_test_set_output_style(OUTPUT_CSV);
// Run test suit againt one context.
nlTestRunner(&theSuite, &sContext);
return nlTestRunnerStats(&theSuite);
}