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

Function TestOpenOutputStream

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

Source from the content-addressed store, hash-verified

760 }
761
762 void TestOpenOutputStream(bool allow_delayed_open) {
763 std::shared_ptr<io::OutputStream> stream;
764
765 if (allow_delayed_open) {
766 ASSERT_OK_AND_ASSIGN(stream, fs_->OpenOutputStream("nonexistent-bucket/somefile"));
767 ASSERT_RAISES(IOError, stream->Close());
768 } else {
769 // Nonexistent
770 ASSERT_RAISES(IOError, fs_->OpenOutputStream("nonexistent-bucket/somefile"));
771 }
772
773 // URI
774 ASSERT_RAISES(Invalid, fs_->OpenOutputStream("s3:bucket/newfile1"));
775
776 // Create new empty file
777 ASSERT_OK_AND_ASSIGN(stream, fs_->OpenOutputStream("bucket/newfile1"));
778 ASSERT_OK(stream->Close());
779 AssertObjectContents(client_.get(), "bucket", "newfile1", "");
780
781 // Create new file with 1 small write
782 ASSERT_OK_AND_ASSIGN(stream, fs_->OpenOutputStream("bucket/newfile2"));
783 ASSERT_OK(stream->Write("some data"));
784 ASSERT_OK(stream->Close());
785 AssertObjectContents(client_.get(), "bucket", "newfile2", "some data");
786
787 // Create new file with 3 small writes
788 ASSERT_OK_AND_ASSIGN(stream, fs_->OpenOutputStream("bucket/newfile3"));
789 ASSERT_OK(stream->Write("some "));
790 ASSERT_OK(stream->Write(""));
791 ASSERT_OK(stream->Write("new data"));
792 ASSERT_OK(stream->Close());
793 AssertObjectContents(client_.get(), "bucket", "newfile3", "some new data");
794
795 // Create new file with some large writes
796 std::string s1, s2, s3, s4, s5, expected;
797 s1 = random_string(6000000, /*seed =*/42); // More than the 5 MB minimum part upload
798 s2 = "xxx";
799 s3 = random_string(6000000, 43);
800 s4 = "zzz";
801 s5 = random_string(600000, 44);
802 expected = s1 + s2 + s3 + s4 + s5;
803 ASSERT_OK_AND_ASSIGN(stream, fs_->OpenOutputStream("bucket/newfile4"));
804 for (auto input : {s1, s2, s3, s4, s5}) {
805 ASSERT_OK(stream->Write(input));
806 // Clobber source contents. This shouldn't reflect in the data written.
807 input.front() = 'x';
808 input.back() = 'x';
809 }
810 ASSERT_OK(stream->Close());
811 AssertObjectContents(client_.get(), "bucket", "newfile4", expected);
812
813 // Overwrite
814 ASSERT_OK_AND_ASSIGN(stream, fs_->OpenOutputStream("bucket/newfile1"));
815 ASSERT_OK(stream->Write("overwritten data"));
816 ASSERT_OK(stream->Close());
817 AssertObjectContents(client_.get(), "bucket", "newfile1", "overwritten data");
818
819 // Overwrite and make empty

Callers 1

TEST_FFunction · 0.85

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