1/* 2 * Copyright (c) 2022-2024 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 "test_observer_proxy.h" 17#include "hilog_tag_wrapper.h" 18 19namespace OHOS { 20namespace AAFwk { 21TestObserverProxy::TestObserverProxy(const sptr<IRemoteObject>& object) : IRemoteProxy<ITestObserver>(object) 22{ 23 TAG_LOGI(AAFwkTag::AA_TOOL, "created"); 24} 25 26TestObserverProxy::~TestObserverProxy() 27{ 28 TAG_LOGI(AAFwkTag::AA_TOOL, "destroyed"); 29} 30 31void TestObserverProxy::TestStatus(const std::string& msg, const int64_t& resultCode) 32{ 33 TAG_LOGI(AAFwkTag::AA_TOOL, "start"); 34 35 MessageParcel data; 36 MessageParcel reply; 37 MessageOption option(MessageOption::TF_ASYNC); 38 39 if (!data.WriteInterfaceToken(GetDescriptor())) { 40 return; 41 } 42 43 if (!data.WriteString(msg)) { 44 TAG_LOGE(AAFwkTag::AA_TOOL, "WriteString msg failed"); 45 return; 46 } 47 48 if (!data.WriteInt64(resultCode)) { 49 TAG_LOGE(AAFwkTag::AA_TOOL, "Write resultCode failed"); 50 return; 51 } 52 53 int32_t result = SendTransactCmd( 54 static_cast<uint32_t>(ITestObserver::Message::AA_TEST_STATUS), data, reply, option); 55 if (result != OHOS::NO_ERROR) { 56 TAG_LOGE(AAFwkTag::AA_TOOL, "SendRequest error: %{public}d", result); 57 return; 58 } 59} 60 61void TestObserverProxy::TestFinished(const std::string& msg, const int64_t& resultCode) 62{ 63 TAG_LOGI(AAFwkTag::AA_TOOL, "start"); 64 65 MessageParcel data; 66 MessageParcel reply; 67 MessageOption option(MessageOption::TF_ASYNC); 68 69 if (!data.WriteInterfaceToken(GetDescriptor())) { 70 return; 71 } 72 73 if (!data.WriteString(msg)) { 74 TAG_LOGE(AAFwkTag::AA_TOOL, "WriteString msg failed"); 75 return; 76 } 77 78 if (!data.WriteInt64(resultCode)) { 79 TAG_LOGE(AAFwkTag::AA_TOOL, "Write resultCode failed"); 80 return; 81 } 82 83 int32_t result = SendTransactCmd( 84 static_cast<uint32_t>(ITestObserver::Message::AA_TEST_FINISHED), data, reply, option); 85 if (result != OHOS::NO_ERROR) { 86 TAG_LOGE(AAFwkTag::AA_TOOL, "SendRequest error: %{public}d", result); 87 return; 88 } 89} 90 91ShellCommandResult TestObserverProxy::ExecuteShellCommand( 92 const std::string& cmd, const int64_t timeoutSec) 93{ 94 TAG_LOGI(AAFwkTag::AA_TOOL, "start"); 95 96 ShellCommandResult result; 97 MessageParcel data; 98 MessageParcel reply; 99 MessageOption option(MessageOption::TF_SYNC); 100 101 if (!data.WriteInterfaceToken(GetDescriptor())) { 102 return result; 103 } 104 105 if (!data.WriteString(cmd)) { 106 TAG_LOGE(AAFwkTag::AA_TOOL, "WriteString cmd failed"); 107 return result; 108 } 109 110 if (!data.WriteInt64(timeoutSec)) { 111 TAG_LOGE(AAFwkTag::AA_TOOL, "Write timeoutSec failed"); 112 return result; 113 } 114 115 int32_t ret = SendTransactCmd( 116 static_cast<uint32_t>(ITestObserver::Message::AA_EXECUTE_SHELL_COMMAND), data, reply, option); 117 if (ret != OHOS::NO_ERROR) { 118 TAG_LOGE(AAFwkTag::AA_TOOL, "SendRequest error: %{public}d", ret); 119 return result; 120 } 121 ShellCommandResult* resultPtr = reply.ReadParcelable<ShellCommandResult>(); 122 if (!resultPtr) { 123 TAG_LOGE(AAFwkTag::AA_TOOL, "Read result failed"); 124 return result; 125 } 126 result = *resultPtr; 127 if (resultPtr != nullptr) { 128 delete resultPtr; 129 } 130 return result; 131} 132 133int32_t TestObserverProxy::SendTransactCmd(uint32_t code, MessageParcel &data, 134 MessageParcel &reply, MessageOption &option) 135{ 136 sptr<IRemoteObject> remote = Remote(); 137 if (remote == nullptr) { 138 TAG_LOGE(AAFwkTag::AA_TOOL, "null remote"); 139 return ERR_NULL_OBJECT; 140 } 141 142 return remote->SendRequest(code, data, reply, option); 143} 144 145} // namespace AAFwk 146} // namespace OHOS 147