16 #include "tensorflow_serving/session_bundle/saved_model_config.h"
20 #include <gmock/gmock.h>
21 #include <gtest/gtest.h>
22 #include "absl/strings/escaping.h"
23 #include "absl/strings/substitute.h"
24 #include "tensorflow/cc/saved_model/constants.h"
25 #include "xla/tsl/lib/core/status_test_util.h"
26 #include "tensorflow/core/grappler/optimizers/inference/batch_op_rewriter.pb.h"
27 #include "tensorflow/core/protobuf/config.pb.h"
28 #include "tensorflow/core/protobuf/rewriter_config.pb.h"
29 #include "tensorflow/core/public/session_options.h"
30 #include "tsl/platform/env.h"
31 #include "tsl/platform/path.h"
32 #include "tsl/platform/status.h"
33 #include "tensorflow_serving/servables/tensorflow/remote_op_config_rewriter.pb.h"
34 #include "tensorflow_serving/servables/tensorflow/saved_model_config.pb.h"
35 #include "tensorflow_serving/servables/tensorflow/saved_model_config_util.h"
36 #include "tensorflow_serving/test_util/test_util.h"
38 namespace tensorflow {
40 namespace session_bundle {
43 const char kTestSavedModelWithSavedModelConfigPath[] =
44 "servables/tensorflow/testdata/"
45 "saved_model_half_plus_two_cpu_with_saved_model_config/00000123";
47 const char kTestSavedModelWithEmptySavedModelConfigPath[] =
48 "servables/tensorflow/testdata/"
49 "saved_model_half_plus_two_cpu_with_empty_saved_model_config/00000123";
51 using test_util::EqualsProto;
53 TEST(SavedModelConfigTest, EmptySavedModelConfig) {
54 const std::string export_dir =
55 test_util::TestSrcDirPath(kTestSavedModelWithEmptySavedModelConfigPath);
57 SessionOptions session_options;
59 TF_ASSERT_OK(MaybeLoadSavedModelConfig(export_dir, &session_options));
61 auto& custom_optimizers = session_options.config.graph_options()
64 EXPECT_EQ(custom_optimizers.size(), 0);
67 TEST(SavedModelConfigTest, SavedModelConfig) {
68 const std::string export_dir =
69 test_util::TestSrcDirPath(kTestSavedModelWithSavedModelConfigPath);
71 SessionOptions session_options;
73 SavedModelConfig saved_model_config;
76 TF_ASSERT_OK(tsl::ReadFileToString(
78 test_util::TestSrcDirPath(tsl::io::JoinPath(
79 kTestSavedModelWithSavedModelConfigPath,
80 kSavedModelAssetsExtraDirectory, kSavedModelConfigPath)),
83 EXPECT_TRUE(saved_model_config.ParseFromString(content));
86 TF_ASSERT_OK(MaybeLoadSavedModelConfig(export_dir, &session_options));
88 auto& custom_optimizers = session_options.config.graph_options()
91 EXPECT_EQ(custom_optimizers.size(), 2);
93 EXPECT_THAT(custom_optimizers,
94 ::testing::UnorderedElementsAre(
95 EqualsProto(absl::Substitute(
102 kRemoteOpConfigRewriter, kRemoteOpRewriteConfigParamKey,
103 absl::Base64Escape(saved_model_config.session_overrides()
104 .remote_op_remap_config()
105 .SerializeAsString()))),
106 EqualsProto(absl::Substitute(
113 kBatchOpRewriter, kBatchOpRewriteConfigParamKey,
114 absl::Base64Escape(saved_model_config.session_overrides()
115 .batch_op_rewriter_config()
116 .SerializeAsString())))));