1/* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include <gtest/gtest.h> 17 18#include <cinttypes> 19#include "test_suite.h" 20#include "transport/session.h" 21 22#include "device_manager.h" 23 24const char *groupId = "echo"; 25 26using namespace testing::ext; 27namespace OHOS { 28class FileTest : public testing::Test { 29public: 30 static void SetUpTestCase(); 31 static void TearDownTestCase(); 32 void SetUp(); 33 void TearDown() {}; 34}; 35 36int32_t g_sessionId = -1; 37bool g_sessionEnabled = false; 38 39static inline int32_t WaitConnectionReady(int32_t sessionId, uint32_t timeout) 40{ 41 while (!g_sessionEnabled && (timeout--) > 0) { 42 sleep(1); 43 } 44 45 if (!g_sessionEnabled) { 46 LOG("%s:OpenSession timeout!", __func__); 47 return -1; 48 } 49 return 0; 50} 51 52static int32_t FtOnSendFileProcess(int32_t sessionId, uint64_t bytesUpload, uint64_t bytesTotal) 53{ 54 LOG("%s:sessionId=%d,bytesUpload=%" PRIu64 ", bytesTotal=%" PRIu64, __func__, sessionId, bytesUpload, bytesTotal); 55 return 0; 56} 57static int32_t FtOnSendFileFinished(int32_t sessionId, const char *firstFile) 58{ 59 LOG("%s:sessionId=%d,firstfile=%s", __func__, sessionId, firstFile); 60 return 0; 61} 62static void FtOnFileTransError(int32_t sessionId) 63{ 64 LOG("%s:sessionId=%d", __func__, sessionId); 65} 66 67static int32_t EsOnSessionOpened(int32_t sessionId, int32_t result) 68{ 69 LOG("%s:enter, sessionId=%d, result=%d", __func__, sessionId, result); 70 if (sessionId == g_sessionId && result == 0) { 71 g_sessionEnabled = true; 72 } 73 return 0; 74} 75static void EsOnSessionClosed(int32_t sessionId) 76{ 77 LOG("%s:enter", __func__); 78 if (sessionId == g_sessionId) { 79 g_sessionEnabled = false; 80 g_sessionId = -1; 81 } 82} 83void FileTest::SetUpTestCase() 84{ 85 static ISessionListener sessionListener = {.OnSessionOpened = EsOnSessionOpened, 86 .OnSessionClosed = EsOnSessionClosed, 87 .OnBytesReceived = EsOnDataReceived, 88 .OnMessageReceived = EsOnDataReceived, 89 .OnStreamReceived = EsOnStreamReceived, 90 .OnQosEvent = EsOnQosEvent}; 91 92 ASSERT_EQ(0, CreateSessionServer(ECHO_SERVICE_PKGNAME, ECHO_SERVICE_SESSION_NAME, &sessionListener)); 93 94 static IFileSendListener fileSendListener = { 95 .OnSendFileProcess = FtOnSendFileProcess, 96 .OnSendFileFinished = FtOnSendFileFinished, 97 .OnFileTransError = FtOnFileTransError, 98 }; 99 100 ASSERT_EQ(0, SetFileSendListener(ECHO_SERVICE_PKGNAME, ECHO_SERVICE_SESSION_NAME, &fileSendListener)); 101} 102 103void FileTest::TearDownTestCase() 104{ 105 EXPECT_EQ(0, RemoveSessionServer(ECHO_SERVICE_PKGNAME, ECHO_SERVICE_SESSION_NAME)); 106}; 107 108static SessionAttribute *GetSessionAttr() 109{ 110 static SessionAttribute attr = { 111 .dataType = TYPE_FILE, 112 .linkTypeNum = 1, 113 .linkType = {LINK_TYPE_BR} 114 }; 115 return &attr; 116} 117 118void FileTest::SetUp() 119{ 120 DeviceManager::Instance()->WaitNetworkSizeMoreThan(1); 121}; 122 123HWTEST_F(FileTest, SendFileDstNULL, TestSize.Level0) 124{ 125 g_sessionId = OpenSession(ECHO_SERVICE_SESSION_NAME, ECHO_SERVICE_SESSION_NAME, 126 DeviceManager::Instance()->GetRemoteByIndex(0).c_str(), groupId, GetSessionAttr()); 127 ASSERT_GT(g_sessionId, 0); 128 129 const char *sFileList[] = {"/data/send_files/test_a.jpg", "/data/send_files/test_b.jpg"}; 130 131 ASSERT_EQ(WaitConnectionReady(g_sessionId, 20), 0); 132 LOG("SendFile with sessionId %d", g_sessionId); 133 EXPECT_EQ(0, SendFile(g_sessionId, sFileList, nullptr, sizeof(sFileList) / sizeof(const char *))); 134 135 CloseSession(g_sessionId); 136} 137}; // namespace OHOS 138