Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include <stdarg.h> | |
| 6 | |
| 7 #include <string> | |
| 8 | |
| 9 #include "base/base_paths.h" | |
| 10 #include "base/command_line.h" | |
| 11 #include "base/files/file_path.h" | |
| 12 #include "base/logging.h" | |
| 13 #include "base/path_service.h" | |
| 14 #include "base/process/launch.h" | |
| 15 #include "testing/gtest/include/gtest/gtest.h" | |
| 16 | |
| 17 namespace { | |
| 18 | |
| 19 void TestProcess(const std::string& name, | |
| 20 const std::vector<base::CommandLine::StringType>& args) { | |
| 21 base::FilePath exe_dir; | |
| 22 ASSERT_TRUE(PathService::Get(base::DIR_EXE, &exe_dir)); | |
| 23 base::FilePath test_binary = | |
| 24 exe_dir.AppendASCII("boringssl_" + name); | |
| 25 base::CommandLine cmd(test_binary); | |
| 26 | |
| 27 for (size_t i = 0; i < args.size(); ++i) { | |
| 28 cmd.AppendArgNative(args[i]); | |
| 29 } | |
| 30 | |
| 31 std::string output; | |
| 32 base::GetAppOutput(cmd, &output); | |
| 33 | |
| 34 const bool ok = output.size() >= 5 && | |
| 35 memcmp("PASS\n", &output[output.size() - 5], 5) == 0 && | |
| 36 (output.size() == 5 || output[output.size() - 6] == '\n'); | |
|
Ryan Sleevi
2014/07/09 00:03:35
Historically, using output parsing has caused issu
agl
2014/07/09 16:42:00
Changed to check both a 0 exit code and that the s
| |
| 37 | |
| 38 EXPECT_TRUE(ok) << output; | |
| 39 } | |
| 40 | |
| 41 void TestSimple(const std::string& name) { | |
| 42 std::vector<base::CommandLine::StringType> empty; | |
| 43 TestProcess(name, empty); | |
| 44 } | |
| 45 | |
| 46 bool BoringSSLPath(base::FilePath* result) { | |
| 47 if (!PathService::Get(base::DIR_SOURCE_ROOT, result)) | |
| 48 return false; | |
| 49 | |
| 50 *result = result->Append(FILE_PATH_LITERAL("third_party")); | |
| 51 *result = result->Append(FILE_PATH_LITERAL("boringssl")); | |
| 52 *result = result->Append(FILE_PATH_LITERAL("src")); | |
| 53 return true; | |
| 54 } | |
| 55 | |
| 56 bool CryptoCipherPath(base::FilePath *result) { | |
| 57 if (!BoringSSLPath(result)) | |
| 58 return false; | |
| 59 | |
| 60 *result = result->Append(FILE_PATH_LITERAL("crypto")); | |
| 61 *result = result->Append(FILE_PATH_LITERAL("cipher")); | |
| 62 return true; | |
| 63 } | |
| 64 | |
| 65 } // anonymous namespace | |
| 66 | |
| 67 TEST(BoringSSL, AES128GCM) { | |
| 68 base::FilePath data_file; | |
| 69 ASSERT_TRUE(CryptoCipherPath(&data_file)); | |
| 70 data_file = data_file.Append(FILE_PATH_LITERAL("aes_128_gcm_tests.txt")); | |
| 71 | |
| 72 std::vector<base::CommandLine::StringType> args; | |
| 73 args.push_back(FILE_PATH_LITERAL("aes-128-gcm")); | |
| 74 args.push_back(data_file.value()); | |
| 75 | |
| 76 TestProcess("aead_test", args); | |
| 77 } | |
| 78 | |
| 79 TEST(BoringSSL, AES256GCM) { | |
| 80 base::FilePath data_file; | |
| 81 ASSERT_TRUE(CryptoCipherPath(&data_file)); | |
| 82 data_file = data_file.Append(FILE_PATH_LITERAL("aes_256_gcm_tests.txt")); | |
| 83 | |
| 84 std::vector<base::CommandLine::StringType> args; | |
| 85 args.push_back(FILE_PATH_LITERAL("aes-256-gcm")); | |
| 86 args.push_back(data_file.value()); | |
| 87 | |
| 88 TestProcess("aead_test", args); | |
| 89 } | |
| 90 | |
| 91 TEST(BoringSSL, ChaCha20Poly1305) { | |
| 92 base::FilePath data_file; | |
| 93 ASSERT_TRUE(CryptoCipherPath(&data_file)); | |
| 94 data_file = | |
| 95 data_file.Append(FILE_PATH_LITERAL("chacha20_poly1305_tests.txt")); | |
| 96 | |
| 97 std::vector<base::CommandLine::StringType> args; | |
| 98 args.push_back(FILE_PATH_LITERAL("chacha20-poly1305")); | |
| 99 args.push_back(data_file.value()); | |
| 100 | |
| 101 TestProcess("aead_test", args); | |
| 102 } | |
| 103 | |
| 104 TEST(BoringSSL, RC4MD5) { | |
| 105 base::FilePath data_file; | |
| 106 ASSERT_TRUE(CryptoCipherPath(&data_file)); | |
| 107 data_file = data_file.Append(FILE_PATH_LITERAL("rc4_md5_tests.txt")); | |
| 108 | |
| 109 std::vector<base::CommandLine::StringType> args; | |
| 110 args.push_back(FILE_PATH_LITERAL("rc4-md5")); | |
| 111 args.push_back(data_file.value()); | |
| 112 | |
| 113 TestProcess("aead_test", args); | |
| 114 } | |
| 115 | |
| 116 TEST(BoringSSL, BIO) { | |
| 117 TestSimple("bio_test"); | |
| 118 } | |
| 119 | |
| 120 TEST(BoringSSL, BN) { | |
| 121 TestSimple("bn_test"); | |
| 122 } | |
| 123 | |
| 124 TEST(BoringSSL, ByteString) { | |
| 125 TestSimple("bytestring_test"); | |
| 126 } | |
| 127 | |
| 128 TEST(BoringSSL, Cipher) { | |
| 129 base::FilePath data_file; | |
| 130 ASSERT_TRUE(CryptoCipherPath(&data_file)); | |
| 131 data_file = data_file.Append(FILE_PATH_LITERAL("cipher_test.txt")); | |
| 132 | |
| 133 std::vector<base::CommandLine::StringType> args; | |
| 134 args.push_back(data_file.value()); | |
| 135 | |
| 136 TestProcess("cipher_test", args); | |
| 137 } | |
| 138 | |
| 139 TEST(BoringSSL, DH) { | |
| 140 TestSimple("dh_test"); | |
| 141 } | |
| 142 | |
| 143 TEST(BoringSSL, DSA) { | |
| 144 TestSimple("dsa_test"); | |
| 145 } | |
| 146 | |
| 147 TEST(BoringSSL, ECDSA) { | |
| 148 TestSimple("ecdsa_test"); | |
| 149 } | |
| 150 | |
| 151 TEST(BoringSSL, ERR) { | |
| 152 TestSimple("err_test"); | |
| 153 } | |
| 154 | |
| 155 TEST(BoringSSL, GCM) { | |
| 156 TestSimple("gcm_test"); | |
| 157 } | |
| 158 | |
| 159 TEST(BoringSSL, HMAC) { | |
| 160 TestSimple("hmac_test"); | |
| 161 } | |
| 162 | |
| 163 TEST(BoringSSL, LH) { | |
| 164 TestSimple("lhash_test"); | |
| 165 } | |
| 166 | |
| 167 TEST(BoringSSL, MD5) { | |
| 168 TestSimple("md5_test"); | |
| 169 } | |
| 170 | |
| 171 TEST(BoringSSL, RSA) { | |
| 172 TestSimple("rsa_test"); | |
| 173 } | |
| 174 | |
| 175 TEST(BoringSSL, SHA1) { | |
| 176 TestSimple("sha1_test"); | |
| 177 } | |
| 178 | |
| 179 TEST(BoringSSL, ExampleMul) { | |
| 180 TestSimple("example_mul"); | |
| 181 } | |
| 182 | |
| 183 TEST(BoringSSL, ExampleSign) { | |
| 184 TestSimple("example_sign"); | |
| 185 } | |
| OLD | NEW |