1/* 2 * Copyright (c) Huawei Technologies Co., Ltd. 2022. All rights reserved. 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 <iostream> 17#include <vector> 18#include <gtest/gtest.h> 19#include "google/protobuf/text_format.h" 20#include "parse_plugin_config.h" 21#include "logging.h" 22using namespace testing::ext; 23 24namespace { 25class ParsePluginConfigTest : public ::testing::Test { 26public: 27 static void SetUpTestCase() {} 28 static void TearDownTestCase() {} 29 30 void CreateCommand(string ConfigName, ParsePluginConfig &parseConfig, string &config) const 31 { 32 std::string cmdStr = " request_id: 1" 33 " session_config {" 34 " buffers {" 35 " pages: 16384" 36 " }" 37 " result_file: \"/data/local/tmp/hiprofiler_data.htrace\"" 38 " sample_duration: 50000" 39 " }" 40 " plugin_configs {" 41 " plugin_name: \"" + ConfigName + "\"" 42 " sample_interval: 1000" 43 " config_data {" 44 " }" 45 " }"; 46 config = parseConfig.GetPluginsConfig(cmdStr); 47 } 48 49 ProfilerPluginConfig GetProfilerPluginConfig(string config) 50 { 51 ProfilerPluginConfig profilerPluginConfig; 52 auto request = std::make_unique<CreateSessionRequest>(); 53 if (!google::protobuf::TextFormat::ParseFromString(config, request.get())) { 54 printf("%s\n", config.c_str()); 55 return profilerPluginConfig; 56 } 57 profilerPluginConfig = *(request->mutable_plugin_configs(0)); 58 return profilerPluginConfig; 59 } 60}; 61 62/** 63 * @tc.name: ParsePluginConfig 64 * @tc.desc: Test parse plugin config. 65 * @tc.type: FUNC 66 */ 67HWTEST_F(ParsePluginConfigTest, TestParsePluginConfig, TestSize.Level1) 68{ 69 ParsePluginConfig parseConfig; 70 std::string config; 71 vector<std::string> pluginNames{ 72 "cpu-plugin", 73 "diskio-plugin", 74 "ftrace-plugin", 75 "hidump-plugin", 76 "hilog-plugin", 77 "memory-plugin", 78 "nativehook", 79 "network-plugin", 80 "process-plugin", 81 "hiperf-plugin", 82 "hisysevent-plugin", 83 "hiebpf-plugin", 84 "invalid-plugin", 85 }; 86 for (const std::string &pluginName : pluginNames) { 87 CreateCommand(pluginName, parseConfig, config); 88 auto profilerConfig = GetProfilerPluginConfig(config); 89 bool res = parseConfig.SetSerializePluginsConfig(pluginName, profilerConfig); 90 if (pluginName == "invalid-plugin") { 91 EXPECT_FALSE(res); 92 } else { 93 EXPECT_TRUE(res); 94 } 95 } 96 ProfilerPluginConfig profilerConfig; 97 bool res = parseConfig.SetSerializePluginsConfig("testplugin", profilerConfig); 98 EXPECT_TRUE(!res); 99} 100} 101