MCPcopy Create free account
hub / github.com/apache/arrow / TestOpenOutputStream

Method TestOpenOutputStream

cpp/src/arrow/filesystem/s3fs_test.cc:639–710  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

637 }
638
639 void TestOpenOutputStream(bool allow_delayed_open) {
640 std::shared_ptr<io::OutputStream> stream;
641
642 if (allow_delayed_open) {
643 ASSERT_OK_AND_ASSIGN(stream, fs_->OpenOutputStream("nonexistent-bucket/somefile"));
644 ASSERT_RAISES(IOError, stream->Close());
645 } else {
646 // Nonexistent
647 ASSERT_RAISES(IOError, fs_->OpenOutputStream("nonexistent-bucket/somefile"));
648 }
649
650 // URI
651 ASSERT_RAISES(Invalid, fs_->OpenOutputStream("s3:bucket/newfile1"));
652
653 // Create new empty file
654 ASSERT_OK_AND_ASSIGN(stream, fs_->OpenOutputStream("bucket/newfile1"));
655 ASSERT_OK(stream->Close());
656 AssertObjectContents(client_.get(), "bucket", "newfile1", "");
657
658 // Create new file with 1 small write
659 ASSERT_OK_AND_ASSIGN(stream, fs_->OpenOutputStream("bucket/newfile2"));
660 ASSERT_OK(stream->Write("some data"));
661 ASSERT_OK(stream->Close());
662 AssertObjectContents(client_.get(), "bucket", "newfile2", "some data");
663
664 // Create new file with 3 small writes
665 ASSERT_OK_AND_ASSIGN(stream, fs_->OpenOutputStream("bucket/newfile3"));
666 ASSERT_OK(stream->Write("some "));
667 ASSERT_OK(stream->Write(""));
668 ASSERT_OK(stream->Write("new data"));
669 ASSERT_OK(stream->Close());
670 AssertObjectContents(client_.get(), "bucket", "newfile3", "some new data");
671
672 // Create new file with some large writes
673 std::string s1, s2, s3, s4, s5, expected;
674 s1 = random_string(6000000, /*seed =*/42); // More than the 5 MB minimum part upload
675 s2 = "xxx";
676 s3 = random_string(6000000, 43);
677 s4 = "zzz";
678 s5 = random_string(600000, 44);
679 expected = s1 + s2 + s3 + s4 + s5;
680 ASSERT_OK_AND_ASSIGN(stream, fs_->OpenOutputStream("bucket/newfile4"));
681 for (auto input : {s1, s2, s3, s4, s5}) {
682 ASSERT_OK(stream->Write(input));
683 // Clobber source contents. This shouldn't reflect in the data written.
684 input.front() = 'x';
685 input.back() = 'x';
686 }
687 ASSERT_OK(stream->Close());
688 AssertObjectContents(client_.get(), "bucket", "newfile4", expected);
689
690 // Overwrite
691 ASSERT_OK_AND_ASSIGN(stream, fs_->OpenOutputStream("bucket/newfile1"));
692 ASSERT_OK(stream->Write("overwritten data"));
693 ASSERT_OK(stream->Close());
694 AssertObjectContents(client_.get(), "bucket", "newfile1", "overwritten data");
695
696 // Overwrite and make empty

Callers

nothing calls this directly

Calls 9

AssertObjectContentsFunction · 0.85
random_stringFunction · 0.85
backMethod · 0.80
ASSERT_OK_AND_ASSIGNFunction · 0.70
OpenOutputStreamMethod · 0.45
CloseMethod · 0.45
getMethod · 0.45
WriteMethod · 0.45
resetMethod · 0.45

Tested by

no test coverage detected