2017-04-26 16:02:43 +01:00
|
|
|
/* Copyright (c) 2017, Google Inc.
|
|
|
|
*
|
|
|
|
* Permission to use, copy, modify, and/or distribute this software for any
|
|
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
|
|
* copyright notice and this permission notice appear in all copies.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
|
|
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
|
|
|
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
|
|
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
|
|
|
|
|
|
|
|
#ifndef OPENSSL_HEADER_CRYPTO_TEST_GTEST_MAIN_H
|
|
|
|
#define OPENSSL_HEADER_CRYPTO_TEST_GTEST_MAIN_H
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
#include <gtest/gtest.h>
|
|
|
|
|
|
|
|
#include <openssl/crypto.h>
|
|
|
|
#include <openssl/err.h>
|
|
|
|
|
|
|
|
#if defined(OPENSSL_WINDOWS)
|
|
|
|
OPENSSL_MSVC_PRAGMA(warning(push, 3))
|
|
|
|
#include <winsock2.h>
|
|
|
|
OPENSSL_MSVC_PRAGMA(warning(pop))
|
2018-09-06 23:33:53 +01:00
|
|
|
#else
|
|
|
|
#include <signal.h>
|
2017-04-26 16:02:43 +01:00
|
|
|
#endif
|
|
|
|
|
|
|
|
|
Support symbol prefixes
- In base.h, if BORINGSSL_PREFIX is defined, include
boringssl_prefix_symbols.h
- In all .S files, if BORINGSSL_PREFIX is defined, include
boringssl_prefix_symbols_asm.h
- In base.h, BSSL_NAMESPACE_BEGIN and BSSL_NAMESPACE_END are
defined with appropriate values depending on whether
BORINGSSL_PREFIX is defined; these macros are used in place
of 'namespace bssl {' and '}'
- Add util/make_prefix_headers.go, which takes a list of symbols
and auto-generates the header files mentioned above
- In CMakeLists.txt, if BORINGSSL_PREFIX and BORINGSSL_PREFIX_SYMBOLS
are defined, run util/make_prefix_headers.go to generate header
files
- In various CMakeLists.txt files, add "global_target" that all
targets depend on to give us a place to hook logic that must run
before all other targets (in particular, the header file generation
logic)
- Document this in BUILDING.md, including the fact that it is
the caller's responsibility to provide the symbol list and keep it
up to date
- Note that this scheme has not been tested on Windows, and likely
does not work on it; Windows support will need to be added in a
future commit
Change-Id: If66a7157f46b5b66230ef91e15826b910cf979a2
Reviewed-on: https://boringssl-review.googlesource.com/31364
Commit-Queue: David Benjamin <davidben@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
Reviewed-by: David Benjamin <davidben@google.com>
2018-08-27 02:53:36 +01:00
|
|
|
BSSL_NAMESPACE_BEGIN
|
2017-04-26 16:02:43 +01:00
|
|
|
|
|
|
|
class ErrorTestEventListener : public testing::EmptyTestEventListener {
|
|
|
|
public:
|
|
|
|
ErrorTestEventListener() {}
|
|
|
|
~ErrorTestEventListener() override {}
|
|
|
|
|
|
|
|
void OnTestEnd(const testing::TestInfo &test_info) override {
|
|
|
|
if (test_info.result()->Failed()) {
|
2017-09-05 18:21:09 +01:00
|
|
|
// The test failed. Print any errors left in the error queue.
|
2017-04-26 16:02:43 +01:00
|
|
|
ERR_print_errors_fp(stdout);
|
2017-09-05 18:21:09 +01:00
|
|
|
} else {
|
|
|
|
// The test succeeded, so any failed operations are expected. Clear the
|
|
|
|
// error queue without printing.
|
|
|
|
ERR_clear_error();
|
2017-04-26 16:02:43 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
// SetupGoogleTest should be called by the test runner after
|
|
|
|
// testing::InitGoogleTest has been called and before RUN_ALL_TESTS.
|
|
|
|
inline void SetupGoogleTest() {
|
|
|
|
CRYPTO_library_init();
|
|
|
|
|
|
|
|
#if defined(OPENSSL_WINDOWS)
|
|
|
|
// Initialize Winsock.
|
|
|
|
WORD wsa_version = MAKEWORD(2, 2);
|
|
|
|
WSADATA wsa_data;
|
|
|
|
int wsa_err = WSAStartup(wsa_version, &wsa_data);
|
|
|
|
if (wsa_err != 0) {
|
|
|
|
fprintf(stderr, "WSAStartup failed: %d\n", wsa_err);
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
if (wsa_data.wVersion != wsa_version) {
|
|
|
|
fprintf(stderr, "Didn't get expected version: %x\n", wsa_data.wVersion);
|
|
|
|
exit(1);
|
|
|
|
}
|
2018-09-06 23:33:53 +01:00
|
|
|
#else
|
|
|
|
// Some tests create pipes. We check return values, so avoid being killed by
|
|
|
|
// |SIGPIPE|.
|
|
|
|
signal(SIGPIPE, SIG_IGN);
|
2017-04-26 16:02:43 +01:00
|
|
|
#endif
|
|
|
|
|
|
|
|
testing::UnitTest::GetInstance()->listeners().Append(
|
|
|
|
new ErrorTestEventListener);
|
|
|
|
}
|
|
|
|
|
Support symbol prefixes
- In base.h, if BORINGSSL_PREFIX is defined, include
boringssl_prefix_symbols.h
- In all .S files, if BORINGSSL_PREFIX is defined, include
boringssl_prefix_symbols_asm.h
- In base.h, BSSL_NAMESPACE_BEGIN and BSSL_NAMESPACE_END are
defined with appropriate values depending on whether
BORINGSSL_PREFIX is defined; these macros are used in place
of 'namespace bssl {' and '}'
- Add util/make_prefix_headers.go, which takes a list of symbols
and auto-generates the header files mentioned above
- In CMakeLists.txt, if BORINGSSL_PREFIX and BORINGSSL_PREFIX_SYMBOLS
are defined, run util/make_prefix_headers.go to generate header
files
- In various CMakeLists.txt files, add "global_target" that all
targets depend on to give us a place to hook logic that must run
before all other targets (in particular, the header file generation
logic)
- Document this in BUILDING.md, including the fact that it is
the caller's responsibility to provide the symbol list and keep it
up to date
- Note that this scheme has not been tested on Windows, and likely
does not work on it; Windows support will need to be added in a
future commit
Change-Id: If66a7157f46b5b66230ef91e15826b910cf979a2
Reviewed-on: https://boringssl-review.googlesource.com/31364
Commit-Queue: David Benjamin <davidben@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
Reviewed-by: David Benjamin <davidben@google.com>
2018-08-27 02:53:36 +01:00
|
|
|
BSSL_NAMESPACE_END
|
2017-04-26 16:02:43 +01:00
|
|
|
|
|
|
|
|
2017-08-18 19:06:02 +01:00
|
|
|
#endif // OPENSSL_HEADER_CRYPTO_TEST_GTEST_MAIN_H
|