mirror of
https://github.com/kidfromjupiter/nearby.git
synced 2026-09-15 07:06:11 -04:00
We now get the systems idea of where the users download folder is and use that as the base path when receiving a file. PiperOrigin-RevId: 406406731
153 lines
5.3 KiB
C++
153 lines
5.3 KiB
C++
// Copyright 2020 Google LLC
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// https://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include "platform/impl/windows/input_file.h"
|
|
|
|
#include "gtest/gtest.h"
|
|
#include "platform/base/exception.h"
|
|
#include "platform/base/payload_id.h"
|
|
#include "platform/impl/windows/test_utils.h"
|
|
#include "platform/public/logging.h"
|
|
|
|
class InputFileTests : public testing::Test {
|
|
protected:
|
|
// You can define per-test set-up logic as usual.
|
|
void SetUp() override {
|
|
location::nearby::PayloadId payloadId(TEST_PAYLOAD_ID);
|
|
|
|
hFile_ = CreateFileA(
|
|
test_utils::GetPayloadPath(payloadId).c_str(), // name of the write
|
|
GENERIC_WRITE, // open for writing
|
|
0, // do not share
|
|
NULL, // default security
|
|
CREATE_ALWAYS, // create new file only
|
|
FILE_ATTRIBUTE_NORMAL, // normal file
|
|
NULL); // no attr. template
|
|
|
|
if (hFile_ == INVALID_HANDLE_VALUE) {
|
|
NEARBY_LOG(ERROR,
|
|
"Failed to create OutputFile with payloadId: %s and error: %d",
|
|
test_utils::GetPayloadPath(payloadId).c_str(), GetLastError());
|
|
}
|
|
|
|
const char* buffer = TEST_STRING;
|
|
DWORD bytesWritten;
|
|
|
|
WriteFile(hFile_, buffer, lstrlenA(buffer) * sizeof(char), &bytesWritten,
|
|
nullptr);
|
|
|
|
CloseHandle(hFile_);
|
|
}
|
|
|
|
// You can define per-test tear-down logic as usual.
|
|
void TearDown() override {
|
|
location::nearby::PayloadId payloadId(TEST_PAYLOAD_ID);
|
|
if (FileExists(test_utils::GetPayloadPath(payloadId).c_str())) {
|
|
DeleteFileA(test_utils::GetPayloadPath(payloadId).c_str());
|
|
}
|
|
}
|
|
|
|
BOOL FileExists(const char* szPath) {
|
|
DWORD dwAttrib = GetFileAttributesA(szPath);
|
|
|
|
return (dwAttrib != INVALID_FILE_ATTRIBUTES &&
|
|
!(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
|
|
}
|
|
|
|
private:
|
|
HANDLE hFile_ = nullptr;
|
|
};
|
|
|
|
TEST_F(InputFileTests, SuccessfulCreation) {
|
|
location::nearby::PayloadId payloadId(TEST_PAYLOAD_ID);
|
|
std::unique_ptr<location::nearby::api::InputFile> inputFile = nullptr;
|
|
|
|
inputFile = location::nearby::api::ImplementationPlatform::CreateInputFile(
|
|
payloadId, strlen(TEST_STRING));
|
|
|
|
EXPECT_NE(inputFile, nullptr);
|
|
EXPECT_EQ(inputFile->Close(),
|
|
location::nearby::Exception{location::nearby::Exception::kSuccess});
|
|
}
|
|
|
|
TEST_F(InputFileTests, SuccessfulGetFilePath) {
|
|
location::nearby::PayloadId payloadId(TEST_PAYLOAD_ID);
|
|
std::unique_ptr<location::nearby::api::InputFile> inputFile = nullptr;
|
|
std::string fileName;
|
|
|
|
inputFile = location::nearby::api::ImplementationPlatform::CreateInputFile(
|
|
payloadId, strlen(TEST_STRING));
|
|
|
|
fileName = inputFile->GetFilePath();
|
|
|
|
EXPECT_EQ(inputFile->Close(),
|
|
location::nearby::Exception{location::nearby::Exception::kSuccess});
|
|
|
|
EXPECT_EQ(fileName, test_utils::GetPayloadPath(payloadId).c_str());
|
|
}
|
|
|
|
TEST_F(InputFileTests, SuccessfulGetTotalSize) {
|
|
location::nearby::PayloadId payloadId(TEST_PAYLOAD_ID);
|
|
std::unique_ptr<location::nearby::api::InputFile> inputFile = nullptr;
|
|
int64_t size = -1;
|
|
|
|
inputFile = location::nearby::api::ImplementationPlatform::CreateInputFile(
|
|
payloadId, strlen(TEST_STRING));
|
|
|
|
size = inputFile->GetTotalSize();
|
|
|
|
EXPECT_EQ(inputFile->Close(),
|
|
location::nearby::Exception{location::nearby::Exception::kSuccess});
|
|
|
|
EXPECT_EQ(size, strlen(TEST_STRING));
|
|
}
|
|
|
|
TEST_F(InputFileTests, SuccessfulRead) {
|
|
location::nearby::PayloadId payloadId(TEST_PAYLOAD_ID);
|
|
std::unique_ptr<location::nearby::api::InputFile> inputFile = nullptr;
|
|
|
|
inputFile = location::nearby::api::ImplementationPlatform::CreateInputFile(
|
|
payloadId, strlen(TEST_STRING));
|
|
|
|
auto fileSize = inputFile->GetTotalSize();
|
|
auto dataRead = inputFile->Read(fileSize);
|
|
|
|
EXPECT_TRUE(dataRead.ok());
|
|
EXPECT_EQ(inputFile->Close(),
|
|
location::nearby::Exception{location::nearby::Exception::kSuccess});
|
|
|
|
EXPECT_STREQ(std::string(dataRead.result()).c_str(), TEST_STRING);
|
|
}
|
|
|
|
TEST_F(InputFileTests, FailedRead) {
|
|
location::nearby::PayloadId payloadId(TEST_PAYLOAD_ID);
|
|
std::unique_ptr<location::nearby::api::InputFile> inputFile = nullptr;
|
|
|
|
inputFile = location::nearby::api::ImplementationPlatform::CreateInputFile(
|
|
payloadId, strlen(TEST_STRING));
|
|
|
|
auto fileSize = inputFile->GetTotalSize();
|
|
EXPECT_NE(fileSize, -1);
|
|
|
|
auto dataRead = inputFile->Read(fileSize);
|
|
EXPECT_TRUE(dataRead.ok());
|
|
|
|
dataRead = inputFile->Read(fileSize);
|
|
std::string data = std::string(dataRead.result());
|
|
|
|
inputFile->Close();
|
|
|
|
EXPECT_STREQ(data.c_str(), "");
|
|
}
|