/** Let the intermediate write request fail. The write should be retried and
 *  finally succeed. */
TEST_F(AsyncWriteHandlerTest, IntermediateWriteFail) {
  size_t blocks = 5;
  size_t buffer_size = kBlockSize * blocks;
  size_t middle = blocks / 2;
  boost::scoped_array<char> write_buf(new char[buffer_size]());

  vector<WriteEntry> expected_front(middle);
  vector<WriteEntry> expected_tail(blocks - middle);
  for (size_t i = 0; i < middle; ++i) {
    expected_front[i] = WriteEntry(i, 0, kBlockSize);
  }

  for (size_t i = middle; i < blocks; ++i) {
    expected_tail[i - middle] = WriteEntry(i, 0, kBlockSize);
  }

  test_env.osds[0]->AddDropRule(
      new ProcIDFilterRule(xtreemfs::pbrpc::PROC_ID_WRITE,
                           new SkipMDropNRule(middle, 1)));

  ASSERT_NO_THROW(file->Write(write_buf.get(), buffer_size, 0));
  ASSERT_NO_THROW(file->Flush());

  EXPECT_TRUE(equal(expected_front.begin(),
                    expected_front.end(),
                    test_env.osds[0]->GetReceivedWrites().begin()));
  EXPECT_TRUE(equal(expected_tail.begin(),
                    expected_tail.end(),
                    test_env.osds[0]->GetReceivedWrites().end() -
                        expected_tail.size()));

  ASSERT_NO_THROW(file->Close());
}
示例#2
0
void QueueTest::check_queue_dequeue() {
  test_header( "dequeue should be " + std::to_string( expected_front() ) );
  print_test( queue->dequeue() == expected_front() );

  test_index++;
}
示例#3
0
void QueueTest::check_queue_front() {
  test_header( "queue front is " + std::to_string( expected_front() ) );
  print_test( queue->front() == expected_front() );
}
void TemplateTest::check_queue_dequeue() {
    test_header( "dequeue should be " + to_string( expected_front() ) );
    print_test( queue->dequeue().gb() == expected_front() );

    test_index++;
}
void TemplateTest::check_queue_front() {
    test_header( "queue front is " + to_string( expected_front() ) );
    print_test( queue->front().gb() == expected_front() );
}