15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "media/cdm/ppapi/cdm_file_io_test.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/bind.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/callback_helpers.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/logging.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace media { 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define FILE_IO_DVLOG(level) DVLOG(level) << "File IO Test: " 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const uint8 kData[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const uint32 kDataSize = arraysize(kData); 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const uint8 kBigData[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 0x00 }; 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const uint32 kBigDataSize = arraysize(kBigData); 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Must be > kReadSize in cdm_file_io_impl.cc. 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst uint32 kLargeDataSize = 20 * 1024 + 7; 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Macros to help add test cases/steps. 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// |test_name| is also used as the file name. File name validity tests relies 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// on this to work. 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define START_TEST_CASE(test_name) \ 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) do { \ 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FileIOTest test_case(create_file_io_cb_, test_name); \ 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CREATE_FILE_IO // Create FileIO for each test case. 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define ADD_TEST_STEP(type, status, data, data_size) \ 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_case.AddTestStep(FileIOTest::type, cdm::FileIOClient::status, \ 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) (data), (data_size)); 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define END_TEST_CASE \ 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) remaining_tests_.push_back(test_case); \ 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } while(0); 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define CREATE_FILE_IO \ 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ADD_TEST_STEP(ACTION_CREATE, kSuccess, NULL, 0) 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define OPEN_FILE \ 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ADD_TEST_STEP(ACTION_OPEN, kSuccess, NULL, 0) 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define EXPECT_FILE_OPENED(status) \ 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ADD_TEST_STEP(RESULT_OPEN, status, NULL, 0) 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define READ_FILE \ 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ADD_TEST_STEP(ACTION_READ, kSuccess, NULL, 0) 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define EXPECT_FILE_READ(status, data, data_size) \ 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ADD_TEST_STEP(RESULT_READ, status, data, data_size) 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define WRITE_FILE(data, data_size) \ 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ADD_TEST_STEP(ACTION_WRITE, kSuccess, data, data_size) 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define EXPECT_FILE_WRITTEN(status) \ 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ADD_TEST_STEP(RESULT_WRITE, status, NULL, 0) 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define CLOSE_FILE \ 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ADD_TEST_STEP(ACTION_CLOSE, kSuccess, NULL, 0) 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// FileIOTestRunner implementation. 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FileIOTestRunner::FileIOTestRunner(const CreateFileIOCB& create_file_io_cb) 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : create_file_io_cb_(create_file_io_cb), 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) total_num_tests_(0), 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) num_passed_tests_(0) { 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Generate |large_data_|. 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) large_data_.resize(kLargeDataSize); 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (size_t i = 0; i < kLargeDataSize; ++i) 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) large_data_[i] = i % kuint8max; 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddTests(); 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FileIOTestRunner::~FileIOTestRunner() { 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (remaining_tests_.empty()) 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK_LT(num_passed_tests_, total_num_tests_); 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FILE_IO_DVLOG(1) << "Not Finished (probably due to timeout). " 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << num_passed_tests_ << " passed in " 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << total_num_tests_ << " tests."; 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Note: Consecutive expectations (EXPECT*) can happen in any order. 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FileIOTestRunner::AddTests() { 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci START_TEST_CASE("/FileNameStartsWithForwardSlash") 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OPEN_FILE 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_OPENED(kError) 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci END_TEST_CASE 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci START_TEST_CASE("FileNameContains/ForwardSlash") 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OPEN_FILE 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_OPENED(kError) 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci END_TEST_CASE 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci START_TEST_CASE("\\FileNameStartsWithBackslash") 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OPEN_FILE 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_OPENED(kError) 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci END_TEST_CASE 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci START_TEST_CASE("FileNameContains\\Backslash") 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OPEN_FILE 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_OPENED(kError) 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci END_TEST_CASE 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci START_TEST_CASE("_FileNameStartsWithUnderscore") 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OPEN_FILE 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_OPENED(kError) 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci END_TEST_CASE 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci START_TEST_CASE("FileNameContains_Underscore") 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OPEN_FILE 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_OPENED(kSuccess) 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci END_TEST_CASE 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("ReadBeforeOpeningFile") 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) READ_FILE 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_READ(kError, NULL, 0) 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("WriteBeforeOpeningFile") 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(kData, kDataSize) 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kError) 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("ReadBeforeFileOpened") 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) READ_FILE 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_READ(kError, NULL, 0) 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // After file opened, we can still do normal operations. 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WRITE_FILE(kData, kDataSize) 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_WRITTEN(kSuccess) 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci READ_FILE 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_READ(kSuccess, kData, kDataSize) 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("WriteBeforeFileOpened") 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(kData, kDataSize) 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kError) 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // After file opened, we can still do normal operations. 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WRITE_FILE(kData, kDataSize) 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_WRITTEN(kSuccess) 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci READ_FILE 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_READ(kSuccess, kData, kDataSize) 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("ReadDuringPendingRead") 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(kData, kDataSize) 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kSuccess) 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) READ_FILE 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) READ_FILE 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_READ(kInUse, NULL, 0) 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_READ(kSuccess, kData, kDataSize) 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Read again. 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci READ_FILE 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_READ(kSuccess, kData, kDataSize) 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("ReadDuringPendingWrite") 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(kData, kDataSize) 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) READ_FILE 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_READ(kInUse, NULL, 0) 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kSuccess) 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Read again. 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci READ_FILE 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_READ(kSuccess, kData, kDataSize) 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("WriteDuringPendingRead") 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) READ_FILE 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(kData, kDataSize) 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kInUse) 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_READ(kSuccess, NULL, 0) 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // We can still do normal operations. 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WRITE_FILE(kData, kDataSize) 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_WRITTEN(kSuccess) 1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci READ_FILE 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_READ(kSuccess, kData, kDataSize) 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("WriteDuringPendingWrite") 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(kData, kDataSize) 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(kBigData, kBigDataSize) 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kInUse) 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kSuccess) 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Read to make sure original data (kData) is written. 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci READ_FILE 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_READ(kSuccess, kData, kDataSize) 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci START_TEST_CASE("ReadFileThatDoesNotExist") 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) READ_FILE 2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_READ(kSuccess, NULL, 0) 2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("WriteAndRead") 2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(kData, kDataSize) 2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kSuccess) 2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) READ_FILE 2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_READ(kSuccess, kData, kDataSize) 2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci START_TEST_CASE("WriteAndReadEmptyFile") 2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(NULL, 0) 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kSuccess) 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) READ_FILE 2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_READ(kSuccess, NULL, 0) 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("WriteAndReadLargeData") 2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(&large_data_[0], kLargeDataSize) 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kSuccess) 2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) READ_FILE 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_READ(kSuccess, &large_data_[0], kLargeDataSize) 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("OverwriteZeroBytes") 2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(kData, kDataSize) 2505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kSuccess) 2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) READ_FILE 2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_READ(kSuccess, kData, kDataSize) 2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(NULL, 0) 2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kSuccess) 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) READ_FILE 2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_READ(kSuccess, NULL, 0) 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("OverwriteWithSmallerData") 2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(kBigData, kBigDataSize) 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kSuccess) 2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(kData, kDataSize) 2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kSuccess) 2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) READ_FILE 2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_READ(kSuccess, kData, kDataSize) 2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("OverwriteWithLargerData") 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(kData, kDataSize) 2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kSuccess) 2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(kBigData, kBigDataSize) 2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kSuccess) 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) READ_FILE 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_READ(kSuccess, kBigData, kBigDataSize) 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("ReadExistingFile") 2825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 2845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(kData, kDataSize) 2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kSuccess) 2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CLOSE_FILE 2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CREATE_FILE_IO 2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) READ_FILE 2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_READ(kSuccess, kData, kDataSize) 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci START_TEST_CASE("MultipleReadsAndWrites") 2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OPEN_FILE 2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_OPENED(kSuccess) 2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Read file which doesn't exist. 2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci READ_FILE 2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_READ(kSuccess, NULL, 0) 3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Write kData to file. 3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WRITE_FILE(kData, kDataSize) 3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_WRITTEN(kSuccess) 3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Read file. 3041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci READ_FILE 3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_READ(kSuccess, kData, kDataSize) 3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Read file again. 3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci READ_FILE 3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_READ(kSuccess, kData, kDataSize) 3091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Overwrite file with large data. 3101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WRITE_FILE(&large_data_[0], kLargeDataSize) 3111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_WRITTEN(kSuccess) 3121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Read file. 3131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci READ_FILE 3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_READ(kSuccess, &large_data_[0], kLargeDataSize) 3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Overwrite file with kData. 3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WRITE_FILE(kData, kDataSize) 3171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_WRITTEN(kSuccess) 3181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Read file. 3191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci READ_FILE 3201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_READ(kSuccess, kData, kDataSize) 3211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Overwrite file with zero bytes. 3221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WRITE_FILE(NULL, 0) 3231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_WRITTEN(kSuccess) 3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Read file. 3251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci READ_FILE 3261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_READ(kSuccess, NULL, 0) 3271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci END_TEST_CASE 3281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci START_TEST_CASE("OpenAfterOpen") 3301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OPEN_FILE 3311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_OPENED(kSuccess) 3321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OPEN_FILE 3331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_OPENED(kError) 3341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci END_TEST_CASE 3351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci START_TEST_CASE("OpenDuringPendingOpen") 3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 3385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 3395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kError) // The second Open() failed. 3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) // The first Open() succeeded. 3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 3425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("ReopenFileInSeparateFileIO") 3445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(kData, kDataSize) 3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kSuccess) 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CREATE_FILE_IO // Create a second FileIO without closing the first one. 3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kInUse) 3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("CloseAfterCreation") 3545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CLOSE_FILE 3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 3565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("CloseDuringPendingOpen") 3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 3595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CLOSE_FILE 3605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("CloseDuringPendingWrite") 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 3645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 3651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(xhwang): Reenable this after http:://crbug.com/415401 is fixed. 3661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // WRITE_FILE(kData, kDataSize) 3671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CLOSE_FILE 3681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci END_TEST_CASE 3691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci START_TEST_CASE("CloseDuringPendingOverwriteWithLargerData") 3711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OPEN_FILE 3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_OPENED(kSuccess) 3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(kData, kDataSize) 3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_WRITTEN(kSuccess) 3751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(xhwang): Reenable this after http:://crbug.com/415401 is fixed. 3761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // WRITE_FILE(kBigData, kBigDataSize) 3775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CLOSE_FILE 3781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Write() didn't finish and the content of the file is not modified. 3791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CREATE_FILE_IO 3801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OPEN_FILE 3811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_OPENED(kSuccess) 3821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci READ_FILE 3831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_READ(kSuccess, kData, kDataSize) 3841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci END_TEST_CASE 3851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci START_TEST_CASE("CloseDuringPendingOverwriteWithSmallerData") 3871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OPEN_FILE 3881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_OPENED(kSuccess) 3891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WRITE_FILE(kBigData, kBigDataSize) 3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_WRITTEN(kSuccess) 3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(xhwang): Reenable this after http:://crbug.com/415401 is fixed. 3921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // WRITE_FILE(kData, kDataSize) 3931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CLOSE_FILE 3941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Write() didn't finish and the content of the file is not modified. 3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CREATE_FILE_IO 3961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OPEN_FILE 3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_OPENED(kSuccess) 3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci READ_FILE 3991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_READ(kSuccess, kBigData, kBigDataSize) 4005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 4015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_TEST_CASE("CloseDuringPendingRead") 4035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OPEN_FILE 4045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_OPENED(kSuccess) 4055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WRITE_FILE(kData, kDataSize) 4065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FILE_WRITTEN(kSuccess) 4071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(xhwang): Reenable this after http:://crbug.com/415401 is fixed. 4081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // READ_FILE 4095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CLOSE_FILE 4101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Make sure the file is not modified. 4111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CREATE_FILE_IO 4121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OPEN_FILE 4131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_OPENED(kSuccess) 4141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci READ_FILE 4151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_READ(kSuccess, kData, kDataSize) 4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci END_TEST_CASE 4171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci START_TEST_CASE("StressTest") 4191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (int i = 0; i < 100; ++i) { 4201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CREATE_FILE_IO 4211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OPEN_FILE 4221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_OPENED(kSuccess) 4231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WRITE_FILE(kData, kDataSize) 4241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_WRITTEN(kSuccess) 4251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(xhwang): Reenable this after http:://crbug.com/415401 is fixed. 4261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // WRITE_FILE(kBigData, kBigDataSize) 4271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CLOSE_FILE 4281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Make sure the file is not modified. 4291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CREATE_FILE_IO 4301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OPEN_FILE 4311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_OPENED(kSuccess) 4321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci READ_FILE 4331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FILE_READ(kSuccess, kData, kDataSize) 4341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CLOSE_FILE 4351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) END_TEST_CASE 4375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FileIOTestRunner::RunAllTests(const CompletionCB& completion_cb) { 4405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) completion_cb_ = completion_cb; 4415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) total_num_tests_ = remaining_tests_.size(); 4425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunNextTest(); 4435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FileIOTestRunner::RunNextTest() { 4465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (remaining_tests_.empty()) { 4475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FILE_IO_DVLOG(1) << num_passed_tests_ << " passed and " 4485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << (total_num_tests_ - num_passed_tests_) << " failed in " 4495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << total_num_tests_ << " tests."; 4505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool success = (num_passed_tests_ == total_num_tests_); 4515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ResetAndReturn(&completion_cb_).Run(success); 4525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 4535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 4545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) remaining_tests_.front().Run( 4565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&FileIOTestRunner::OnTestComplete, base::Unretained(this))); 4575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FileIOTestRunner::OnTestComplete(bool success) { 4605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (success) 4615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) num_passed_tests_++; 4625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) remaining_tests_.pop_front(); 4635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunNextTest(); 4645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// FileIOTest implementation. 4675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FileIOTest::FileIOTest(const CreateFileIOCB& create_file_io_cb, 4695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& test_name) 4705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : create_file_io_cb_(create_file_io_cb), 4715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_name_(test_name) {} 4725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FileIOTest::~FileIOTest() {} 4745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FileIOTest::AddTestStep( 4765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StepType type, Status status, const uint8* data, uint32 data_size) { 4775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_steps_.push_back(TestStep(type, status, data, data_size)); 4785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FileIOTest::Run(const CompletionCB& completion_cb) { 4815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FILE_IO_DVLOG(3) << "Run " << test_name_; 4825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) completion_cb_ = completion_cb; 4835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(!test_steps_.empty() && !IsResult(test_steps_.front())); 4845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunNextStep(); 4855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FileIOTest::OnOpenComplete(Status status) { 4885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OnResult(TestStep(RESULT_OPEN, status, NULL, 0)); 4895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FileIOTest::OnReadComplete(Status status, 4925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const uint8_t* data, 4935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) uint32_t data_size) { 4945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OnResult(TestStep(RESULT_READ, status, data, data_size)); 4955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FileIOTest::OnWriteComplete(Status status) { 4985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OnResult(TestStep(RESULT_WRITE, status, NULL, 0)); 4995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 5005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool FileIOTest::IsResult(const TestStep& test_step) { 5025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switch (test_step.type) { 5035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case RESULT_OPEN: 5045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case RESULT_READ: 5055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case RESULT_WRITE: 5065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 5075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case ACTION_CREATE: 5085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case ACTION_OPEN: 5095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case ACTION_READ: 5105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case ACTION_WRITE: 5115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case ACTION_CLOSE: 5125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 5135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NOTREACHED(); 5155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 5165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 5175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool FileIOTest::MatchesResult(const TestStep& a, const TestStep& b) { 5195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(IsResult(a) && IsResult(b)); 5205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (a.type != b.type || a.status != b.status) 5215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 5225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (a.type != RESULT_READ || a.status != cdm::FileIOClient::kSuccess) 5245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 5255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return (a.data_size == b.data_size && 5275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::equal(a.data, a.data + a.data_size, b.data)); 5285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 5295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FileIOTest::RunNextStep() { 5315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Run all actions in the current action group. 5325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) while (!test_steps_.empty()) { 5335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Start to wait for test results when the next step is a test result. 5345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (IsResult(test_steps_.front())) 5355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 5365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestStep test_step = test_steps_.front(); 5385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_steps_.pop_front(); 5395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cdm::FileIO* file_io = file_io_stack_.empty()? NULL : file_io_stack_.top(); 5415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switch (test_step.type) { 5435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case ACTION_CREATE: 5445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) file_io = create_file_io_cb_.Run(this); 5455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!file_io) { 5465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FILE_IO_DVLOG(3) << "Cannot create FileIO object."; 5475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OnTestComplete(false); 5485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 5495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) file_io_stack_.push(file_io); 5515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 5525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case ACTION_OPEN: 5535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Use test name as the test file name. 5545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) file_io->Open(test_name_.data(), test_name_.size()); 5555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 5565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case ACTION_READ: 5575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) file_io->Read(); 5585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 5595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case ACTION_WRITE: 5605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) file_io->Write(test_step.data, test_step.data_size); 5615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 5625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case ACTION_CLOSE: 5635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) file_io->Close(); 5645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) file_io_stack_.pop(); 5655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 5665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) default: 5675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NOTREACHED(); 5685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OnTestComplete(true); 5725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 5735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FileIOTest::OnResult(const TestStep& result) { 5755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(IsResult(result)); 5765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!CheckResult(result)) { 5775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OnTestComplete(false); 5785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 5795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunNextStep(); 5825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 5835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool FileIOTest::CheckResult(const TestStep& result) { 5855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (test_steps_.empty() || !IsResult(test_steps_.front())) 5865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 5875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If there are multiple results expected, the order does not matter. 5895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::list<TestStep>::iterator iter = test_steps_.begin(); 5905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (; iter != test_steps_.end(); ++iter) { 5915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!IsResult(*iter)) 5925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 5935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!MatchesResult(*iter, result)) 5955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) continue; 5965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_steps_.erase(iter); 5985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 5995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 6005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 6025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 6035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FileIOTest::OnTestComplete(bool success) { 6055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) while (!file_io_stack_.empty()) { 6065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) file_io_stack_.top()->Close(); 6075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) file_io_stack_.pop(); 6085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 6095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FILE_IO_DVLOG(3) << test_name_ << (success ? " PASSED" : " FAILED"); 6105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ResetAndReturn(&completion_cb_).Run(success); 6115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 6125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace media 614