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

Method TestOpenOutputStream

cpp/src/arrow/filesystem/test_util.cc:941–1012  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

939}
940
941void GenericFileSystemTest::TestOpenOutputStream(FileSystem* fs) {
942 std::shared_ptr<io::OutputStream> stream;
943
944 ASSERT_OK_AND_ASSIGN(stream, fs->OpenOutputStream("abc"));
945 ASSERT_OK_AND_EQ(0, stream->Tell());
946 ASSERT_FALSE(stream->closed());
947 ASSERT_OK(stream->Close());
948 ASSERT_TRUE(stream->closed());
949 AssertAllDirs(fs, {});
950 AssertAllFiles(fs, {"abc"});
951 AssertFileContents(fs, "abc", "");
952
953 // Parent does not exist
954 if (!have_implicit_directories()) {
955 ASSERT_RAISES(IOError, fs->OpenOutputStream("AB/def"));
956 }
957 AssertAllDirs(fs, {});
958 AssertAllFiles(fs, {"abc"});
959
960 // Several writes
961 ASSERT_OK(fs->CreateDir("CD"));
962 ASSERT_OK_AND_ASSIGN(stream, fs->OpenOutputStream("CD/ghi"));
963 ASSERT_OK(stream->Write("some "));
964 ASSERT_OK(stream->Write(Buffer::FromString("data")));
965 ASSERT_OK_AND_EQ(9, stream->Tell());
966 ASSERT_OK(stream->Close());
967 AssertAllDirs(fs, {"CD"});
968 AssertAllFiles(fs, {"CD/ghi", "abc"});
969 AssertFileContents(fs, "CD/ghi", "some data");
970
971 // Overwrite
972 ASSERT_OK_AND_ASSIGN(stream, fs->OpenOutputStream("CD/ghi"));
973 ASSERT_OK(stream->Write("overwritten"));
974 ASSERT_OK(stream->Close());
975 AssertAllDirs(fs, {"CD"});
976 AssertAllFiles(fs, {"CD/ghi", "abc"});
977 AssertFileContents(fs, "CD/ghi", "overwritten");
978
979 ASSERT_RAISES(Invalid, stream->Write("x")); // Stream is closed
980
981 // Trailing slash rejected
982 ASSERT_RAISES(IOError, fs->OpenOutputStream("CD/ghi/"));
983
984 // Storing metadata along file
985 auto metadata = KeyValueMetadata::Make({"Content-Type", "Content-Language"},
986 {"x-arrow/filesystem-test", "fr_FR"});
987 ASSERT_OK_AND_ASSIGN(stream, fs->OpenOutputStream("jkl", metadata));
988 ASSERT_OK(stream->Write("data"));
989 ASSERT_OK(stream->Close());
990 ASSERT_OK_AND_ASSIGN(auto input, fs->OpenInputStream("jkl"));
991 ASSERT_OK_AND_ASSIGN(auto got_metadata, input->ReadMetadata());
992 if (have_file_metadata()) {
993 ASSERT_NE(got_metadata, nullptr);
994 ASSERT_GE(got_metadata->size(), 2);
995 ASSERT_OK_AND_EQ("x-arrow/filesystem-test", got_metadata->Get("Content-Type"));
996 } else {
997 if (got_metadata) {
998 ASSERT_EQ(got_metadata->size(), 0);

Callers

nothing calls this directly

Calls 13

AssertAllDirsFunction · 0.85
AssertAllFilesFunction · 0.85
FromStringFunction · 0.85
ASSERT_OK_AND_ASSIGNFunction · 0.70
AssertFileContentsFunction · 0.70
MakeFunction · 0.50
OpenOutputStreamMethod · 0.45
TellMethod · 0.45
closedMethod · 0.45
CloseMethod · 0.45
CreateDirMethod · 0.45

Tested by

no test coverage detected