Parcourir la source

Use more C++11 features.

Finally, we can stick ScopedFOO in containers.

Change-Id: I3ed166575822af9f182e8be8f4db723e1f08ea31
Reviewed-on: https://boringssl-review.googlesource.com/6553
Reviewed-by: Adam Langley <alangley@gmail.com>
kris/onging/CECPQ3_patch15
David Benjamin il y a 9 ans
committed by Adam Langley
Parent
révision
4f6acaf0da
2 fichiers modifiés avec 34 ajouts et 53 suppressions
  1. +5
    -10
      crypto/evp/evp_test.cc
  2. +29
    -43
      ssl/ssl_test.cc

+ 5
- 10
crypto/evp/evp_test.cc Voir le fichier

@@ -63,6 +63,7 @@

#include <map>
#include <string>
#include <utility>
#include <vector>

#if defined(_MSC_VER)
@@ -103,7 +104,7 @@ static const EVP_MD *GetDigest(FileTest *t, const std::string &name) {
return nullptr;
}

using KeyMap = std::map<std::string, EVP_PKEY*>;
using KeyMap = std::map<std::string, ScopedEVP_PKEY>;

// ImportPrivateKey evaluates a PrivateKey test in |t| and writes the resulting
// private key to |key_map|.
@@ -123,7 +124,7 @@ static bool ImportPrivateKey(FileTest *t, KeyMap *key_map) {
t->PrintLine("Error reading private key.");
return false;
}
(*key_map)[key_name] = pkey.release();
(*key_map)[key_name] = std::move(pkey);
return true;
}

@@ -156,7 +157,7 @@ static bool TestEVP(FileTest *t, void *arg) {
t->PrintLine("Could not find key '%s'.", key_name.c_str());
return false;
}
EVP_PKEY *key = (*key_map)[key_name];
EVP_PKEY *key = (*key_map)[key_name].get();

std::vector<uint8_t> input, output;
if (!t->GetBytes(&input, "Input") ||
@@ -212,11 +213,5 @@ int main(int argc, char **argv) {
}

KeyMap map;
int ret = FileTestMain(TestEVP, &map, argv[1]);
// TODO(davidben): When we can rely on a move-aware std::map, make KeyMap a
// map of ScopedEVP_PKEY instead.
for (const auto &pair : map) {
EVP_PKEY_free(pair.second);
}
return ret;
return FileTestMain(TestEVP, &map, argv[1]);
}

+ 29
- 43
ssl/ssl_test.cc Voir le fichier

@@ -18,6 +18,7 @@

#include <algorithm>
#include <string>
#include <utility>
#include <vector>

#include <openssl/base64.h>
@@ -932,23 +933,6 @@ static ScopedSSL_SESSION CreateTestSession(uint32_t number) {
return ret;
}

// TODO(davidben): Switch this to a |std::vector<ScopedSSL_SESSION>| once we can
// rely on a move-aware |std::vector|.
class ScopedSessionVector {
public:
explicit ScopedSessionVector(std::vector<SSL_SESSION*> *sessions)
: sessions_(sessions) {}

~ScopedSessionVector() {
for (SSL_SESSION *session : *sessions_) {
SSL_SESSION_free(session);
}
}

private:
std::vector<SSL_SESSION*> *const sessions_;
};

// Test that the internal session cache behaves as expected.
static bool TestInternalSessionCache() {
ScopedSSL_CTX ctx(SSL_CTX_new(TLS_method()));
@@ -957,38 +941,38 @@ static bool TestInternalSessionCache() {
}

// Prepare 10 test sessions.
std::vector<SSL_SESSION*> sessions;
ScopedSessionVector cleanup(&sessions);
std::vector<ScopedSSL_SESSION> sessions;
for (int i = 0; i < 10; i++) {
ScopedSSL_SESSION session = CreateTestSession(i);
if (!session) {
return false;
}
sessions.push_back(session.release());
sessions.push_back(std::move(session));
}

SSL_CTX_sess_set_cache_size(ctx.get(), 5);

// Insert all the test sessions.
for (SSL_SESSION *session : sessions) {
if (!SSL_CTX_add_session(ctx.get(), session)) {
for (const auto &session : sessions) {
if (!SSL_CTX_add_session(ctx.get(), session.get())) {
return false;
}
}

// Only the last five should be in the list.
std::vector<SSL_SESSION*> expected;
expected.push_back(sessions[9]);
expected.push_back(sessions[8]);
expected.push_back(sessions[7]);
expected.push_back(sessions[6]);
expected.push_back(sessions[5]);
std::vector<SSL_SESSION*> expected = {
sessions[9].get(),
sessions[8].get(),
sessions[7].get(),
sessions[6].get(),
sessions[5].get(),
};
if (!ExpectCache(ctx.get(), expected)) {
return false;
}

// Inserting an element already in the cache should fail.
if (SSL_CTX_add_session(ctx.get(), sessions[7]) ||
if (SSL_CTX_add_session(ctx.get(), sessions[7].get()) ||
!ExpectCache(ctx.get(), expected)) {
return false;
}
@@ -999,32 +983,34 @@ static bool TestInternalSessionCache() {
if (!collision || !SSL_CTX_add_session(ctx.get(), collision.get())) {
return false;
}
expected.clear();
expected.push_back(collision.get());
expected.push_back(sessions[9]);
expected.push_back(sessions[8]);
expected.push_back(sessions[6]);
expected.push_back(sessions[5]);
expected = {
collision.get(),
sessions[9].get(),
sessions[8].get(),
sessions[6].get(),
sessions[5].get(),
};
if (!ExpectCache(ctx.get(), expected)) {
return false;
}

// Removing sessions behaves correctly.
if (!SSL_CTX_remove_session(ctx.get(), sessions[6])) {
if (!SSL_CTX_remove_session(ctx.get(), sessions[6].get())) {
return false;
}
expected.clear();
expected.push_back(collision.get());
expected.push_back(sessions[9]);
expected.push_back(sessions[8]);
expected.push_back(sessions[5]);
expected = {
collision.get(),
sessions[9].get(),
sessions[8].get(),
sessions[5].get(),
};
if (!ExpectCache(ctx.get(), expected)) {
return false;
}

// Removing sessions requires an exact match.
if (SSL_CTX_remove_session(ctx.get(), sessions[0]) ||
SSL_CTX_remove_session(ctx.get(), sessions[7]) ||
if (SSL_CTX_remove_session(ctx.get(), sessions[0].get()) ||
SSL_CTX_remove_session(ctx.get(), sessions[7].get()) ||
!ExpectCache(ctx.get(), expected)) {
return false;
}


Chargement…
Annuler
Enregistrer