2
0
mirror of https://github.com/meganz/MEGAcmd synced 2025-08-22 09:57:09 +00:00
MEGAcmd/tests/integration/BasicTests.cpp
2025-03-17 18:08:38 +01:00

142 lines
4.8 KiB
C++

/**
* (c) 2013 by Mega Limited, Auckland, New Zealand
*
* This file is part of MEGAcmd.
*
* MEGAcmd is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* @copyright Simplified (2-clause) BSD License.
*
* You should have received a copy of the license along with this
* program.
*/
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include "MegaCmdTestingTools.h"
#include "Instruments.h"
#include "TestUtils.h"
using TI = TestInstruments;
TEST_F(NOINTERACTIVEBasicTest, Version)
{
executeInClient({"version"});
}
TEST_F(NOINTERACTIVEBasicTest, Help)
{
executeInClient({"help"});
}
TEST_F(NOINTERACTIVENotLoggedTest, Folderlogin)
{
{
auto rLoging = executeInClient({"login", LINK_TESTEXPORTFOLDER});
ASSERT_TRUE(rLoging.ok());
}
{
auto rLogout = executeInClient({"logout", "--keep-session"});
ASSERT_TRUE(rLogout.ok());
}
{
EventTracker evTracker({TestInstruments::Event::FETCH_NODES_REQ_UPDATE});
auto rLoging = executeInClient({"login", "--resume", LINK_TESTEXPORTFOLDER});
ASSERT_TRUE(rLoging.ok());
ASSERT_STREQ(rLoging.out().c_str(), "");
ASSERT_STREQ(rLoging.err().c_str(), "");
ASSERT_FALSE(evTracker.eventHappened(TestInstruments::Event::FETCH_NODES_REQ_UPDATE));
}
}
TEST_F(NOINTERACTIVEReadTest, Find)
{
auto r = executeInClient({"find"});
ASSERT_TRUE(r.ok());
std::vector<std::string> result_paths = splitByNewline(r.out());
ASSERT_THAT(result_paths, testing::Not(testing::IsEmpty()));
EXPECT_THAT(result_paths, testing::Contains("."));
EXPECT_THAT(result_paths, testing::Contains("testReadingFolder01"));
EXPECT_THAT(result_paths, testing::Contains("testReadingFolder01/file03.txt"));
EXPECT_THAT(result_paths, testing::Contains("testReadingFolder01/folder01/file03.txt"));
EXPECT_THAT(result_paths, testing::Contains("testReadingFolder01/folder02/subfolder03/file02.txt"));
}
TEST_F(NOINTERACTIVELoggedInTest, Whoami)
{
{
G_SUBTEST << "Basic";
auto r = executeInClient({"whoami"});
ASSERT_TRUE(r.ok());
auto out = r.out();
ASSERT_THAT(out, testing::Not(testing::IsEmpty()));
ASSERT_THAT(getenv("MEGACMD_TEST_USER"), testing::NotNull());
EXPECT_EQ(out, std::string("Account e-mail: ").append(getenv("MEGACMD_TEST_USER")).append("\n"));
}
{
G_SUBTEST << "Extended";
{
// Ensure there's at least a file around contributing to ROOT usage:
auto result = executeInClient({"import", LINK_TESTEXPORTFILE01TXT});
ASSERT_TRUE(result.ok()) << "could not import testExportFile01.txt";
}
auto r = executeInClient({"whoami", "-l"});
ASSERT_TRUE(r.ok());
std::vector<std::string> details_out = splitByNewline(r.out());
ASSERT_THAT(details_out, testing::Not(testing::IsEmpty()));
ASSERT_THAT(details_out, testing::Contains(testing::HasSubstr("Available storage:")));
ASSERT_THAT(details_out, testing::Contains(testing::HasSubstr("Pro level:")));
ASSERT_THAT(details_out, testing::Contains(testing::HasSubstr("Current Session")));
ASSERT_THAT(details_out, testing::Contains(testing::HasSubstr("In RUBBISH:")));
EXPECT_THAT(details_out, testing::Not(testing::Contains(ContainsStdRegex("Available storage:\\s+0\\.00\\s+Bytes"))));
EXPECT_THAT(details_out, testing::Not(testing::Contains(ContainsStdRegex("In ROOT:\\s+0\\.00\\s+Bytes"))));
}
}
TEST_F(NOINTERACTIVEBasicTest, EchoInvalidUtf8)
{
const std::string validUtf8 = u8"\uc548\uc548\ub155\ud558\uc138\uc694\uc138\uacc4";
#ifdef _WIN32
// Required because windows converts the args to UTF-16 before sending them to the server,
// so we can't pass an invalid UTF-8 string all the way to the executer; we need to escape it
const std::string invalidUtf8 = "<win-invalid-utf8>";
#else
const std::string invalidUtf8 = "\xf0\x8f\xbf\xbf";
#endif
auto result = executeInClient({"echo", validUtf8});
ASSERT_TRUE(result.ok());
EXPECT_THAT(result.out(), testing::HasSubstr(validUtf8));
result = executeInClient({"echo", invalidUtf8});
ASSERT_TRUE(result.ok());
EXPECT_THAT(result.out(), testing::Not(testing::HasSubstr(invalidUtf8)));
result = executeInClient({"echo", "--log-as-err", validUtf8});
ASSERT_TRUE(result.ok());
EXPECT_THAT(result.err(), testing::HasSubstr(validUtf8));
result = executeInClient({"echo", "--log-as-err", invalidUtf8});
ASSERT_TRUE(result.ok());
EXPECT_THAT(result.err(), testing::HasSubstr("<invalid utf8>"));
EXPECT_THAT(result.err(), testing::Not(testing::HasSubstr(invalidUtf8)));
EXPECT_THAT(result.out(), testing::Not(testing::HasSubstr(invalidUtf8)));
}