Add a helper for comparing byte strings.
We compare pointer/length pairs constantly. To avoid needing to type it everywhere and get GTest's output, add a StringPiece-alike for byte slices which supports ==, !=, and std::ostream. BUG=129 Change-Id: I108342cbd2c6a58fec0b9cb87ebdf50364bda099 Reviewed-on: https://boringssl-review.googlesource.com/13625 Reviewed-by: David Benjamin <davidben@google.com> Commit-Queue: David Benjamin <davidben@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
This commit is contained in:
parent
949628a2ab
commit
7d7554b6b3
@ -12,11 +12,12 @@
|
||||
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "test_util.h"
|
||||
|
||||
#include <ostream>
|
||||
|
||||
#include "../internal.h"
|
||||
|
||||
|
||||
void hexdump(FILE *fp, const char *msg, const void *in, size_t len) {
|
||||
const uint8_t *data = reinterpret_cast<const uint8_t*>(in);
|
||||
@ -27,3 +28,13 @@ void hexdump(FILE *fp, const char *msg, const void *in, size_t len) {
|
||||
}
|
||||
fputs("\n", fp);
|
||||
}
|
||||
|
||||
std::ostream &operator<<(std::ostream &os, const Bytes &in) {
|
||||
// Print a byte slice as hex.
|
||||
static const char hex[] = "0123456789abcdef";
|
||||
for (size_t i = 0; i < in.len; i++) {
|
||||
os << hex[in.data[i] >> 4];
|
||||
os << hex[in.data[i] & 0xf];
|
||||
}
|
||||
return os;
|
||||
}
|
||||
|
@ -16,20 +16,38 @@
|
||||
#define OPENSSL_HEADER_CRYPTO_TEST_TEST_UTIL_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
#include <iosfwd>
|
||||
|
||||
#include "../internal.h"
|
||||
|
||||
|
||||
/* hexdump writes |msg| to |fp| followed by the hex encoding of |len| bytes
|
||||
* from |in|. */
|
||||
// hexdump writes |msg| to |fp| followed by the hex encoding of |len| bytes
|
||||
// from |in|.
|
||||
void hexdump(FILE *fp, const char *msg, const void *in, size_t len);
|
||||
|
||||
// Bytes is a wrapper over a byte slice which may be compared for equality. This
|
||||
// allows it to be used in EXPECT_EQ macros.
|
||||
struct Bytes {
|
||||
Bytes(const uint8_t *data_arg, size_t len_arg)
|
||||
: data(data_arg), len(len_arg) {}
|
||||
|
||||
#if defined(__cplusplus)
|
||||
template <size_t N>
|
||||
Bytes(const uint8_t (&array)[N]) : data(array), len(N) {}
|
||||
|
||||
const uint8_t *data;
|
||||
size_t len;
|
||||
};
|
||||
|
||||
inline bool operator==(const Bytes &a, const Bytes &b) {
|
||||
return a.len == b.len && OPENSSL_memcmp(a.data, b.data, a.len) == 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
inline bool operator!=(const Bytes &a, const Bytes &b) { return !(a == b); }
|
||||
|
||||
std::ostream &operator<<(std::ostream &os, const Bytes &in);
|
||||
|
||||
|
||||
#endif /* OPENSSL_HEADER_CRYPTO_TEST_TEST_UTIL_H */
|
||||
|
@ -23,7 +23,6 @@
|
||||
#include <openssl/x509.h>
|
||||
|
||||
#include "../internal.h"
|
||||
#include "../test/test_util.h"
|
||||
|
||||
|
||||
/* kPKCS7NSS contains the certificate chain of mail.google.com, as saved by NSS
|
||||
|
@ -1503,8 +1503,7 @@ TEST(SSLTest, SessionDuplication) {
|
||||
ASSERT_TRUE(SSL_SESSION_to_bytes(session1.get(), &s1_bytes, &s1_len));
|
||||
bssl::UniquePtr<uint8_t> free_s1(s1_bytes);
|
||||
|
||||
ASSERT_EQ(s0_len, s1_len);
|
||||
EXPECT_EQ(0, OPENSSL_memcmp(s0_bytes, s1_bytes, s0_len));
|
||||
EXPECT_EQ(Bytes(s0_bytes, s0_len), Bytes(s1_bytes, s1_len));
|
||||
}
|
||||
|
||||
static void ExpectFDs(const SSL *ssl, int rfd, int wfd) {
|
||||
@ -3076,10 +3075,8 @@ TEST(SSLTest, GetCertificate) {
|
||||
bssl::UniquePtr<uint8_t> free_der3(der3);
|
||||
|
||||
// They must also encode identically.
|
||||
ASSERT_EQ(der2_len, der_len);
|
||||
EXPECT_EQ(0, OPENSSL_memcmp(der, der2, static_cast<size_t>(der_len)));
|
||||
ASSERT_EQ(der3_len, der_len);
|
||||
EXPECT_EQ(0, OPENSSL_memcmp(der, der3, static_cast<size_t>(der_len)));
|
||||
EXPECT_EQ(Bytes(der, der_len), Bytes(der2, der2_len));
|
||||
EXPECT_EQ(Bytes(der, der_len), Bytes(der3, der3_len));
|
||||
}
|
||||
|
||||
// TODO(davidben): Convert this file to GTest properly.
|
||||
|
Loading…
Reference in New Issue
Block a user