16 #include "tensorflow_serving/core/manager.h"
22 #include <gtest/gtest.h>
23 #include "tensorflow/core/lib/core/errors.h"
24 #include "tensorflow_serving/core/test_util/servable_handle_test_util.h"
25 #include "tensorflow_serving/util/any_ptr.h"
27 namespace tensorflow {
35 class TestHandle :
public UntypedServableHandle {
37 AnyPtr servable()
override {
return &servable_; }
39 const ServableId& id()
const override {
return id_; }
42 const ServableId id_ = {
"servable", 7};
43 TestServable servable_;
47 class TestManager :
public Manager {
49 std::vector<ServableId> ListAvailableServableIds()
const override {
50 LOG(FATAL) <<
"Not expected to be called.";
54 Status GetUntypedServableHandle(
55 const ServableRequest& request,
56 std::unique_ptr<UntypedServableHandle>* result)
override {
57 result->reset(
new TestHandle);
61 std::map<ServableId, std::unique_ptr<UntypedServableHandle>>
62 GetAvailableUntypedServableHandles()
const override {
63 std::map<ServableId, std::unique_ptr<UntypedServableHandle>> handles;
64 handles.emplace(ServableId{
"Foo", 2},
65 std::unique_ptr<UntypedServableHandle>(
new TestHandle));
70 TEST(ManagerTest, NoErrors) {
72 ServableHandle<TestServable> handle;
73 EXPECT_TRUE(manager.GetServableHandle({
"Foo", 2}, &handle).ok());
74 EXPECT_NE(
nullptr, handle.get());
77 TEST(ManagerTest, TypeError) {
79 ServableHandle<int> handle;
80 EXPECT_FALSE(manager.GetServableHandle({
"Foo", 2}, &handle).ok());
81 EXPECT_EQ(
nullptr, handle.get());
84 TEST(ManagerTest, GetAvailableServableHandles) {
86 const std::map<ServableId, ServableHandle<TestServable>> handles =
87 manager.GetAvailableServableHandles<TestServable>();
88 ASSERT_EQ(1, handles.size());
89 for (
const auto& handle : handles) {
90 EXPECT_EQ((ServableId{
"Foo", 2}), handle.first);
91 EXPECT_EQ(7, handle.second->member);
95 TEST(ManagerTest, GetAvailableServableHandlesWrongType) {
97 const std::map<ServableId, ServableHandle<int>> handles =
98 manager.GetAvailableServableHandles<
int>();
99 EXPECT_EQ(0, handles.size());
105 class ReturnNullManager :
public TestManager {
107 Status GetUntypedServableHandle(
108 const ServableRequest& request,
109 std::unique_ptr<UntypedServableHandle>* result)
override {
115 TEST(ManagerTest, NullHandleReturnsError) {
116 ReturnNullManager manager;
117 ServableHandle<TestServable> handle;
118 EXPECT_FALSE(manager.GetServableHandle({
"Foo", 2}, &handle).ok());
119 EXPECT_EQ(
nullptr, handle.get());
123 class ReturnErrorManager :
public TestManager {
125 Status GetUntypedServableHandle(
126 const ServableRequest& request,
127 std::unique_ptr<UntypedServableHandle>* result)
override {
128 result->reset(
new TestHandle);
129 return errors::Internal(
"Something bad happened.");
133 TEST(ManagerTest, ErrorReturnsNullHandle) {
134 ReturnErrorManager manager;
135 ServableHandle<TestServable> handle;
136 EXPECT_FALSE(manager.GetServableHandle({
"Foo", 2}, &handle).ok());
137 EXPECT_EQ(
nullptr, handle.get());
140 TEST(ServableHandleTest, PointerOps) {
141 TestServable servables[2];
142 ServableHandle<TestServable> handles[2];
144 const ServableId
id = {
"servable", 7};
145 handles[0] = test_util::WrapAsHandle(
id, &servables[0]);
146 handles[1] = test_util::WrapAsHandle(
id, &servables[1]);
149 EXPECT_EQ(handles[0], handles[0]);
152 EXPECT_NE(handles[0], handles[1]);
155 EXPECT_TRUE(handles[0]);
158 EXPECT_EQ(&servables[0], handles[0].get());
159 EXPECT_EQ(&servables[0], &*handles[0]);
160 EXPECT_EQ(&servables[0].member, &handles[0]->member);
163 TEST(ServableHandleTest, Id) {
164 TestServable servables[2];
165 ServableHandle<TestServable> handles[2];
167 const ServableId
id = {
"servable", 7};
168 handles[0] = test_util::WrapAsHandle(
id, &servables[0]);
169 handles[1] = test_util::WrapAsHandle(
id, &servables[1]);
171 EXPECT_EQ(
id, handles[0].
id());
172 EXPECT_EQ(
id, handles[1].
id());
175 TEST(ServableRequestTest, Specific) {
176 const auto request = ServableRequest::Specific(
"servable", 7);
177 EXPECT_EQ(
"servable", request.name);
178 EXPECT_EQ(7, *request.version);
181 TEST(ServableRequestTest, Latest) {
182 const auto request = ServableRequest::Latest(
"servable");
183 EXPECT_EQ(
"servable", request.name);
184 EXPECT_FALSE(request.version);
187 TEST(ServableRequestTest, FromId) {
188 const auto request = ServableRequest::FromId({
"servable", 7});
189 EXPECT_EQ(
"servable", request.name);
190 EXPECT_EQ(7, *request.version);