mirror of
https://github.com/kidfromjupiter/nearby.git
synced 2026-09-16 15:36:12 -04:00
This is a fix for incoming payloads not having a file_name set.
PiperOrigin-RevId: 440438936
This commit is contained in:
committed by
Copybara-Service
parent
43a165e418
commit
4c13db0c2d
@@ -347,16 +347,30 @@ std::unique_ptr<InternalPayload> CreateIncomingInternalPayload(
|
||||
}
|
||||
|
||||
case PayloadTransferFrame::PayloadHeader::FILE: {
|
||||
std::string parent_folder("");
|
||||
std::string file_name("");
|
||||
std::string file_path("");
|
||||
|
||||
int64_t total_size = 0;
|
||||
|
||||
if (frame.payload_header().has_parent_folder()) {
|
||||
file_path = frame.payload_header().parent_folder();
|
||||
parent_folder = frame.payload_header().parent_folder();
|
||||
}
|
||||
|
||||
if (frame.payload_header().has_file_name()) {
|
||||
std::string file_name(frame.payload_header().file_name());
|
||||
file_path = make_path(file_path, file_name);
|
||||
file_name = frame.payload_header().file_name();
|
||||
file_path = make_path(parent_folder, file_name);
|
||||
} else {
|
||||
if (frame.payload_header().has_id()) {
|
||||
file_name = std::to_string(frame.payload_header().id());
|
||||
file_path = make_path(parent_folder, file_name);
|
||||
} else {
|
||||
// This is an error condition, we don't have any way to generate a
|
||||
// file name for the output file.
|
||||
NEARBY_LOGS(ERROR) << "File name not found in incoming file Payload, "
|
||||
"and the Id wasn't found.";
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
if (frame.payload_header().has_total_size()) {
|
||||
@@ -372,7 +386,8 @@ std::unique_ptr<InternalPayload> CreateIncomingInternalPayload(
|
||||
OutputFile(payload_id), total_size);
|
||||
} else {
|
||||
return absl::make_unique<IncomingFileInternalPayload>(
|
||||
Payload(payload_id, InputFile(file_path, total_size)),
|
||||
Payload(payload_id, parent_folder, file_name,
|
||||
InputFile(file_path, total_size)),
|
||||
OutputFile(file_path), total_size);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2020 Google LLC
|
||||
// Copyright 2020-2022 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
@@ -32,7 +32,7 @@ namespace {
|
||||
|
||||
constexpr char kText[] = "data chunk";
|
||||
|
||||
TEST(InternalPayloadFActoryTest, CanCreateIternalPayloadFromBytePayload) {
|
||||
TEST(InternalPayloadFactoryTest, CanCreateInternalPayloadFromBytePayload) {
|
||||
ByteArray data(kText);
|
||||
std::unique_ptr<InternalPayload> internal_payload =
|
||||
CreateOutgoingInternalPayload(Payload{data});
|
||||
@@ -43,7 +43,7 @@ TEST(InternalPayloadFActoryTest, CanCreateIternalPayloadFromBytePayload) {
|
||||
EXPECT_EQ(payload.AsBytes(), ByteArray(kText));
|
||||
}
|
||||
|
||||
TEST(InternalPayloadFActoryTest, CanCreateIternalPayloadFromStreamPayload) {
|
||||
TEST(InternalPayloadFactoryTest, CanCreateInternalPayloadFromStreamPayload) {
|
||||
auto pipe = std::make_shared<Pipe>();
|
||||
std::unique_ptr<InternalPayload> internal_payload =
|
||||
CreateOutgoingInternalPayload(Payload{[pipe]() -> InputStream& {
|
||||
@@ -56,7 +56,7 @@ TEST(InternalPayloadFActoryTest, CanCreateIternalPayloadFromStreamPayload) {
|
||||
EXPECT_EQ(payload.AsBytes(), ByteArray());
|
||||
}
|
||||
|
||||
TEST(InternalPayloadFActoryTest, CanCreateIternalPayloadFromFilePayload) {
|
||||
TEST(InternalPayloadFactoryTest, CanCreateInternalPayloadFromFilePayload) {
|
||||
Payload::Id payload_id = Payload::GenerateId();
|
||||
InputFile inputFile(payload_id, 512);
|
||||
std::unique_ptr<InternalPayload> internal_payload =
|
||||
@@ -69,7 +69,7 @@ TEST(InternalPayloadFActoryTest, CanCreateIternalPayloadFromFilePayload) {
|
||||
EXPECT_EQ(payload.GetId(), payload_id);
|
||||
}
|
||||
|
||||
TEST(InternalPayloadFActoryTest, CanCreateIternalPayloadFromByteMessage) {
|
||||
TEST(InternalPayloadFactoryTest, CanCreateInternalPayloadFromByteMessage) {
|
||||
PayloadTransferFrame frame;
|
||||
frame.set_packet_type(PayloadTransferFrame::DATA);
|
||||
std::int64_t payload_chunk_offset = 0;
|
||||
@@ -92,7 +92,7 @@ TEST(InternalPayloadFActoryTest, CanCreateIternalPayloadFromByteMessage) {
|
||||
EXPECT_EQ(payload.AsBytes(), ByteArray(kText));
|
||||
}
|
||||
|
||||
TEST(InternalPayloadFActoryTest, CanCreateIternalPayloadFromStreamMessage) {
|
||||
TEST(InternalPayloadFactoryTest, CanCreateInternalPayloadFromStreamMessage) {
|
||||
PayloadTransferFrame frame;
|
||||
frame.set_packet_type(PayloadTransferFrame::DATA);
|
||||
auto& header = *frame.mutable_payload_header();
|
||||
@@ -109,7 +109,7 @@ TEST(InternalPayloadFActoryTest, CanCreateIternalPayloadFromStreamMessage) {
|
||||
EXPECT_EQ(payload.GetType(), PayloadType::kStream);
|
||||
}
|
||||
|
||||
TEST(InternalPayloadFActoryTest, CanCreateIternalPayloadFromFileMessage) {
|
||||
TEST(InternalPayloadFactoryTest, CanCreateInternalPayloadFromFileMessage) {
|
||||
PayloadTransferFrame frame;
|
||||
frame.set_packet_type(PayloadTransferFrame::DATA);
|
||||
auto& header = *frame.mutable_payload_header();
|
||||
@@ -126,13 +126,56 @@ TEST(InternalPayloadFActoryTest, CanCreateIternalPayloadFromFileMessage) {
|
||||
EXPECT_EQ(payload.GetType(), PayloadType::kFile);
|
||||
}
|
||||
|
||||
TEST(InternalPayloadFactoryTest,
|
||||
InternalPayloadFromFileMessageWithoutIdReturnsNullptr) {
|
||||
PayloadTransferFrame frame;
|
||||
frame.set_packet_type(PayloadTransferFrame::DATA);
|
||||
auto& header = *frame.mutable_payload_header();
|
||||
header.set_type(PayloadTransferFrame::PayloadHeader::FILE);
|
||||
header.set_total_size(512);
|
||||
std::unique_ptr<InternalPayload> internal_payload =
|
||||
CreateIncomingInternalPayload(frame);
|
||||
EXPECT_EQ(internal_payload, nullptr);
|
||||
}
|
||||
|
||||
TEST(InternalPayloadFactoryTest,
|
||||
CanCreateInternalPayloadFromFileMessageWithFileNameNotSet) {
|
||||
PayloadTransferFrame frame;
|
||||
frame.set_packet_type(PayloadTransferFrame::DATA);
|
||||
auto& header = *frame.mutable_payload_header();
|
||||
header.set_type(PayloadTransferFrame::PayloadHeader::FILE);
|
||||
header.set_id(12345);
|
||||
header.set_total_size(512);
|
||||
std::unique_ptr<InternalPayload> internal_payload =
|
||||
CreateIncomingInternalPayload(frame);
|
||||
EXPECT_NE(internal_payload, nullptr);
|
||||
Payload payload = internal_payload->ReleasePayload();
|
||||
EXPECT_EQ(payload.GetFileName(), "12345");
|
||||
}
|
||||
TEST(InternalPayloadFactoryTest,
|
||||
CanCreateInternalPayloadFromFileMessageWithFileNameSet) {
|
||||
PayloadTransferFrame frame;
|
||||
frame.set_packet_type(PayloadTransferFrame::DATA);
|
||||
auto& header = *frame.mutable_payload_header();
|
||||
header.set_type(PayloadTransferFrame::PayloadHeader::FILE);
|
||||
header.set_id(12345);
|
||||
header.set_total_size(512);
|
||||
header.set_file_name("test.file.name");
|
||||
std::unique_ptr<InternalPayload> internal_payload =
|
||||
CreateIncomingInternalPayload(frame);
|
||||
EXPECT_NE(internal_payload, nullptr);
|
||||
auto test = internal_payload->GetFileName();
|
||||
Payload payload = internal_payload->ReleasePayload();
|
||||
EXPECT_EQ(payload.GetFileName(), "test.file.name");
|
||||
}
|
||||
|
||||
void CreateFileWithContents(Payload::Id payload_id, const ByteArray& contents) {
|
||||
OutputFile file(payload_id);
|
||||
EXPECT_TRUE(file.Write(contents).Ok());
|
||||
EXPECT_TRUE(file.Close().Ok());
|
||||
}
|
||||
|
||||
TEST(InternalPayloadFActoryTest,
|
||||
TEST(InternalPayloadFactoryTest,
|
||||
SkipToOffset_FilePayloadValidOffset_SkipsOffset) {
|
||||
ByteArray contents("0123456789");
|
||||
constexpr size_t kOffset = 4;
|
||||
@@ -154,7 +197,7 @@ TEST(InternalPayloadFActoryTest,
|
||||
EXPECT_EQ(contents_after_skip, ByteArray("456789"));
|
||||
}
|
||||
|
||||
TEST(InternalPayloadFActoryTest,
|
||||
TEST(InternalPayloadFactoryTest,
|
||||
SkipToOffset_StreamPayloadValidOffset_SkipsOffset) {
|
||||
ByteArray contents("0123456789");
|
||||
constexpr size_t kOffset = 6;
|
||||
|
||||
@@ -62,6 +62,14 @@ Payload::Payload(Id id, ByteArray&& bytes)
|
||||
Payload::Payload(Id id, const ByteArray& bytes)
|
||||
: id_(id), type_(PayloadType::kBytes), content_(bytes) {}
|
||||
|
||||
Payload::Payload(Id id, std::string parent_folder, std::string file_name,
|
||||
InputFile input_file)
|
||||
: id_(id),
|
||||
parent_folder_(parent_folder),
|
||||
file_name_(file_name),
|
||||
type_(PayloadType::kFile),
|
||||
content_(std::move(input_file)) {}
|
||||
|
||||
Payload::Payload(Id id, std::function<InputStream&()> stream)
|
||||
: id_(id), type_(PayloadType::kStream), content_(std::move(stream)) {}
|
||||
|
||||
|
||||
@@ -79,6 +79,8 @@ class DLL_API Payload {
|
||||
Payload(Id id, ByteArray&& bytes);
|
||||
Payload(Id id, const ByteArray& bytes);
|
||||
Payload(Id id, InputFile file);
|
||||
Payload(Id id, std::string parent_folder, std::string file_name,
|
||||
InputFile input_file);
|
||||
Payload(Id id, std::function<InputStream&()> stream);
|
||||
|
||||
// Returns ByteArray payload, if it has been defined, or empty ByteArray.
|
||||
|
||||
Reference in New Issue
Block a user