1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <string> 6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/files/scoped_temp_dir.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/run_loop.h" 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/utility/image_writer/error_messages.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/utility/image_writer/image_writer.h" 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/utility/image_writer/image_writer_handler.h" 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace image_writer { 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using testing::_; 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using testing::AnyNumber; 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using testing::AtLeast; 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using testing::Lt; 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace { 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const int64 kTestFileSize = 1 << 15; // 32 kB 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const int kTestPattern = 0x55555555; 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class ImageWriterUtilityTest : public testing::Test { 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) protected: 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void SetUp() OVERRIDE { 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &image_path_)); 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE( 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::CreateTemporaryFileInDir(temp_dir_.path(), &device_path_)); 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void TearDown() OVERRIDE {} 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void FillFile(const base::FilePath& path, int pattern) { 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<char[]> buffer(new char[kTestFileSize]); 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) memset(buffer.get(), pattern, kTestFileSize); 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(base::WriteFile(path, buffer.get(), kTestFileSize)); 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void FillDefault(const base::FilePath& path) { FillFile(path, kTestPattern); } 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::FilePath image_path_; 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::FilePath device_path_; 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private: 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::MessageLoop message_loop_; 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::ScopedTempDir temp_dir_; 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class MockHandler : public ImageWriterHandler { 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public: 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MOCK_METHOD1(SendProgress, void(int64)); 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MOCK_METHOD1(SendFailed, void(const std::string& message)); 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MOCK_METHOD0(SendSucceeded, void()); 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MOCK_METHOD1(OnMessageReceived, bool(const IPC::Message& message)); 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// This Mock has the additional feature that it will start verification when 65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// the write completes. 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class VerifyingHandler : public MockHandler { 67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public: 68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VerifyingHandler() : image_writer_(NULL), verified_(false) {} 69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void SendSucceeded() OVERRIDE { 71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) MockHandler::SendSucceeded(); 72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (!verified_) { 73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) image_writer_->Verify(); 74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) verified_ = true; 75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ImageWriter* image_writer_; 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) private: 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool verified_; 81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}; 82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace 84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(ImageWriterUtilityTest, Getters) { 86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) MockHandler mock_handler; 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ImageWriter image_writer(&mock_handler, image_path_, device_path_); 88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(image_path_, image_writer.GetImagePath()); 90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(device_path_, image_writer.GetDevicePath()); 91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(ImageWriterUtilityTest, WriteSuccessful) { 94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MockHandler mock_handler; 95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ImageWriter image_writer(&mock_handler, image_path_, device_path_); 96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendProgress(_)).Times(AnyNumber()); 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendProgress(kTestFileSize)).Times(1); 99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendProgress(0)).Times(1); 100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendSucceeded()).Times(1); 101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendFailed(_)).Times(0); 102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FillDefault(image_path_); 104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) image_writer.Write(); 105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(ImageWriterUtilityTest, WriteInvalidImageFile) { 109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MockHandler mock_handler; 110010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ImageWriter image_writer(&mock_handler, image_path_, device_path_); 111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendProgress(_)).Times(0); 113a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendSucceeded()).Times(0); 114a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendFailed(error::kOpenImage)).Times(1); 115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(base::DeleteFile(image_path_, false)); 117010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) image_writer.Write(); 118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 119a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(ImageWriterUtilityTest, WriteInvalidDeviceFile) { 122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MockHandler mock_handler; 123010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ImageWriter image_writer(&mock_handler, image_path_, device_path_); 124a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 125a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendProgress(_)).Times(0); 126a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendSucceeded()).Times(0); 127a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendFailed(error::kOpenDevice)).Times(1); 128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 129a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(base::DeleteFile(device_path_, false)); 130010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) image_writer.Write(); 131a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 132a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 133a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 134a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(ImageWriterUtilityTest, VerifySuccessful) { 135a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MockHandler mock_handler; 136010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ImageWriter image_writer(&mock_handler, image_path_, device_path_); 137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 138a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendProgress(_)).Times(AnyNumber()); 139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendProgress(kTestFileSize)).Times(1); 140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendProgress(0)).Times(1); 141a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendSucceeded()).Times(1); 142a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendFailed(_)).Times(0); 143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 144a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FillDefault(image_path_); 145a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FillDefault(device_path_); 146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 147010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) image_writer.Verify(); 148a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 149a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(ImageWriterUtilityTest, VerifyInvalidImageFile) { 153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MockHandler mock_handler; 154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ImageWriter image_writer(&mock_handler, image_path_, device_path_); 155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendProgress(_)).Times(0); 157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendSucceeded()).Times(0); 158a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendFailed(error::kOpenImage)).Times(1); 159a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(base::DeleteFile(image_path_, false)); 161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 162010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) image_writer.Verify(); 163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 164a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 165a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 166a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 167a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(ImageWriterUtilityTest, VerifyInvalidDeviceFile) { 168a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MockHandler mock_handler; 169010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ImageWriter image_writer(&mock_handler, image_path_, device_path_); 170a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 171a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendProgress(_)).Times(0); 172a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendSucceeded()).Times(0); 173a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendFailed(error::kOpenDevice)).Times(1); 174a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 175a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_TRUE(base::DeleteFile(device_path_, false)); 176a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 177010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) image_writer.Verify(); 178a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 179a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 180a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 181a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 182a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(ImageWriterUtilityTest, VerifyEmptyDevice) { 183a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MockHandler mock_handler; 184010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ImageWriter image_writer(&mock_handler, image_path_, device_path_); 185a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 186a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendProgress(_)).Times(AnyNumber()); 187a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendSucceeded()).Times(0); 188a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendFailed(error::kReadDevice)).Times(1); 189a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 190a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FillDefault(image_path_); 191010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) image_writer.Verify(); 192a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 193a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 194a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 195a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 196a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(ImageWriterUtilityTest, VerifyFailed) { 197a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MockHandler mock_handler; 198010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ImageWriter image_writer(&mock_handler, image_path_, device_path_); 199a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 200a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendProgress(_)).Times(AnyNumber()); 201a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendSucceeded()).Times(0); 202a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendFailed(error::kVerificationFailed)).Times(1); 203a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 204a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FillDefault(image_path_); 205a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FillFile(device_path_, ~kTestPattern); 206010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) image_writer.Verify(); 207a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 208a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 209a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 210a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 211010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(ImageWriterUtilityTest, WriteWithVerifySuccessful) { 212010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VerifyingHandler mock_handler; 213010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ImageWriter image_writer(&mock_handler, image_path_, device_path_); 214010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 215010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) mock_handler.image_writer_ = &image_writer; 216a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 217a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendProgress(_)).Times(AnyNumber()); 218010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_CALL(mock_handler, SendProgress(kTestFileSize)).Times(2); 219010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_CALL(mock_handler, SendProgress(0)).Times(2); 220a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendSucceeded()).Times(2); 221a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_CALL(mock_handler, SendFailed(_)).Times(0); 222a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 223010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) FillDefault(image_path_); 224a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 225010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) image_writer.Write(); 226a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 227a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 228a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 229a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 230a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace image_writer 231