1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "crypto/openssl_bio_string.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <openssl/bio.h> 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "crypto/scoped_openssl_types.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace crypto { 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST(OpenSSLBIOString, TestWrite) { 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string s; 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string expected1("a one\nb 2\n"); 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string expected2("c d e f"); 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string expected3("g h i"); 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) { 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ScopedBIO bio(BIO_new_string(&s)); 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(bio.get()); 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(static_cast<int>(expected1.size()), 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) BIO_printf(bio.get(), "a %s\nb %i\n", "one", 2)); 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(expected1, s); 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1, BIO_flush(bio.get())); 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(expected1, s); 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(static_cast<int>(expected2.size()), 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) BIO_write(bio.get(), expected2.data(), expected2.size())); 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(expected1 + expected2, s); 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(static_cast<int>(expected3.size()), 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) BIO_puts(bio.get(), expected3.c_str())); 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(expected1 + expected2 + expected3, s); 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(expected1 + expected2 + expected3, s); 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST(OpenSSLBIOString, TestReset) { 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string s; 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string expected1("a b c\n"); 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string expected2("d e f g\n"); 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) { 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ScopedBIO bio(BIO_new_string(&s)); 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(bio.get()); 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(static_cast<int>(expected1.size()), 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) BIO_write(bio.get(), expected1.data(), expected1.size())); 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(expected1, s); 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(1, BIO_reset(bio.get())); 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(std::string(), s); 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(static_cast<int>(expected2.size()), 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) BIO_write(bio.get(), expected2.data(), expected2.size())); 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(expected2, s); 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(expected2, s); 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace crypto 64