1 /* Copyright (c) 2016, Google Inc. 2 * 3 * Permission to use, copy, modify, and/or distribute this software for any 4 * purpose with or without fee is hereby granted, provided that the above 5 * copyright notice and this permission notice appear in all copies. 6 * 7 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 8 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 9 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 10 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 11 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 12 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 13 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ 14 15 #include <gtest/gtest.h> 16 17 #include <openssl/pool.h> 18 19 #include "../test/test_util.h" 20 21 22 TEST(PoolTest, Unpooled) { 23 static const uint8_t kData[4] = {1, 2, 3, 4}; 24 bssl::UniquePtr<CRYPTO_BUFFER> buf( 25 CRYPTO_BUFFER_new(kData, sizeof(kData), nullptr)); 26 ASSERT_TRUE(buf); 27 28 EXPECT_EQ(Bytes(kData), 29 Bytes(CRYPTO_BUFFER_data(buf.get()), CRYPTO_BUFFER_len(buf.get()))); 30 31 // Test that reference-counting works properly. 32 CRYPTO_BUFFER_up_ref(buf.get()); 33 bssl::UniquePtr<CRYPTO_BUFFER> buf2(buf.get()); 34 } 35 36 TEST(PoolTest, Empty) { 37 bssl::UniquePtr<CRYPTO_BUFFER> buf(CRYPTO_BUFFER_new(nullptr, 0, nullptr)); 38 ASSERT_TRUE(buf); 39 40 EXPECT_EQ(Bytes(""), 41 Bytes(CRYPTO_BUFFER_data(buf.get()), CRYPTO_BUFFER_len(buf.get()))); 42 } 43 44 TEST(PoolTest, Pooled) { 45 bssl::UniquePtr<CRYPTO_BUFFER_POOL> pool(CRYPTO_BUFFER_POOL_new()); 46 ASSERT_TRUE(pool); 47 48 static const uint8_t kData[4] = {1, 2, 3, 4}; 49 bssl::UniquePtr<CRYPTO_BUFFER> buf( 50 CRYPTO_BUFFER_new(kData, sizeof(kData), pool.get())); 51 ASSERT_TRUE(buf); 52 53 bssl::UniquePtr<CRYPTO_BUFFER> buf2( 54 CRYPTO_BUFFER_new(kData, sizeof(kData), pool.get())); 55 ASSERT_TRUE(buf2); 56 57 EXPECT_EQ(buf.get(), buf2.get()) << "CRYPTO_BUFFER_POOL did not dedup data."; 58 } 59