diff --git a/ge/common/ge/plugin_manager.cc b/ge/common/ge/plugin_manager.cc index 38de251e..4e588f29 100644 --- a/ge/common/ge/plugin_manager.cc +++ b/ge/common/ge/plugin_manager.cc @@ -53,6 +53,7 @@ string PluginManager::GetPath() { GELOGW("Failed to read the shared library file path!"); return string(); } else { + GE_IF_BOOL_EXEC(dl_info.dli_fname == nullptr, return string()); std::string so_path = dl_info.dli_fname; char path[MMPA_MAX_PATH] = {0}; if (so_path.length() >= MMPA_MAX_PATH) { diff --git a/ge/generator/ge_generator.cc b/ge/generator/ge_generator.cc index 072880fa..32d9e5a1 100644 --- a/ge/generator/ge_generator.cc +++ b/ge/generator/ge_generator.cc @@ -671,6 +671,8 @@ Status GeGenerator::CheckForSingleOp(OpDescPtr &op_desc, const vector Status GeGenerator::BuildSingleOp(OpDescPtr &op_desc, const vector &inputs, const vector &outputs, const string &model_file_name, OpEngineType engine_type, ModelBufferData &model_buff, bool is_offline) { + GE_CHECK_NOTNULL_EXEC(impl_, return PARAM_INVALID); + impl_->is_offline_ = is_offline; if (!is_offline) { (void)AttrUtils::SetBool(op_desc, ATTR_SINGLE_OP_SCENE, true); } @@ -709,8 +711,6 @@ Status GeGenerator::BuildSingleOp(OpDescPtr &op_desc, const vector &in GELOGI("ATC parser success in single op build."); GeRootModelPtr ge_root_model = nullptr; - GE_CHECK_NOTNULL_EXEC(impl_, return PARAM_INVALID); - impl_->is_offline_ = is_offline; GE_CHK_STATUS_RET_NOLOG(impl_->BuildModel(graph, inputs, ge_root_model)); map op_attrs = op_desc_tmp->GetAllAttrs(); GE_CHECK_NOTNULL(ge_root_model); @@ -758,7 +758,7 @@ Status GeGenerator::BuildSingleOpModel(OpDescPtr &op_desc, const vector + +#define private public +#define protected public +#include "generator/ge_generator.h" +#include "graph/utils/tensor_utils.h" + +using namespace std; + +namespace ge { +class UtestGeGenerator : public testing::Test { + protected: + void SetUp() {} + + void TearDown() {} +}; + +TEST_F(UtestGeGenerator, test_build_single_op_offline) { + GeTensorDesc tensor_desc(GeShape(), FORMAT_NCHW, DT_FLOAT); + TensorUtils::SetSize(tensor_desc, 512); + + shared_ptr op_desc = make_shared("Add", "add"); + EXPECT_EQ(op_desc->AddInputDesc(tensor_desc), GRAPH_SUCCESS); + EXPECT_EQ(op_desc->AddInputDesc(tensor_desc), GRAPH_SUCCESS); + EXPECT_EQ(op_desc->AddOutputDesc(tensor_desc), GRAPH_SUCCESS); + + GeTensor tensor(tensor_desc); + const vector inputs = { tensor, tensor }; + const vector outputs = { tensor }; + + // not Initialize, impl is null. + GeGenerator generator; + EXPECT_EQ(generator.BuildSingleOpModel(op_desc, inputs, outputs, "offline_"), PARAM_INVALID); + + // const map &options + generator.Initialize({}); + EXPECT_EQ(generator.BuildSingleOpModel(op_desc, inputs, outputs, "offline_"), GE_GENERATOR_GRAPH_MANAGER_BUILD_GRAPH_FAILED); +} + +TEST_F(UtestGeGenerator, test_build_single_op_online) { + GeTensorDesc tensor_desc(GeShape(), FORMAT_NCHW, DT_FLOAT); + TensorUtils::SetSize(tensor_desc, 512); + + shared_ptr op_desc = make_shared("Add", "add"); + EXPECT_EQ(op_desc->AddInputDesc(tensor_desc), GRAPH_SUCCESS); + EXPECT_EQ(op_desc->AddInputDesc(tensor_desc), GRAPH_SUCCESS); + EXPECT_EQ(op_desc->AddOutputDesc(tensor_desc), GRAPH_SUCCESS); + + GeTensor tensor(tensor_desc); + const vector inputs = { tensor, tensor }; + const vector outputs = { tensor }; + + // not Initialize, impl is null. + GeGenerator generator; + generator.Initialize({}); + ModelBufferData model_buffer; + EXPECT_EQ(generator.BuildSingleOpModel(op_desc, inputs, outputs, ENGINE_SYS, model_buffer), GE_GENERATOR_GRAPH_MANAGER_BUILD_GRAPH_FAILED); +} + +} // namespace ge