|
|
|
@ -549,7 +549,7 @@ TEST(AdapterClient, LookupFile)
|
|
|
|
|
ASSERT_EQ(std::future_status::ready, disconnected.get_future().wait_for(TIMEOUT));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(AdapterClient, ReadLargeFile)
|
|
|
|
|
TEST(AdapterClient, ReadFile)
|
|
|
|
|
{
|
|
|
|
|
MockInvokationHander handler;
|
|
|
|
|
WsServer server(handler, WF_PROTOCOL_NAME_PROVIDER_SERVER);
|
|
|
|
@ -561,6 +561,8 @@ TEST(AdapterClient, ReadLargeFile)
|
|
|
|
|
.WillOnce(Return("{\"inode\": 2, \"mode\": 420, \"type\": \"file\", \"size\": 4096}"));
|
|
|
|
|
EXPECT_CALL(handler, Invoke(StrEq("getattr"), GetAttr(1))).Times(AnyNumber())
|
|
|
|
|
.WillRepeatedly(Return("{\"mode\": 420, \"type\": \"dir\"}"));
|
|
|
|
|
EXPECT_CALL(handler, Invoke(StrEq("getattr"), GetAttr(2))).Times(AnyNumber())
|
|
|
|
|
.WillRepeatedly(Return("{\"mode\": 420, \"type\": \"file\", \"size\": 4096}"));
|
|
|
|
|
EXPECT_CALL(handler, Invoke(StrEq("open"), Open(2))).Times(1)
|
|
|
|
|
.WillOnce(Return("{\"handle\": 42}"));
|
|
|
|
|
EXPECT_CALL(handler, Invoke(StrEq("read"), _)).Times(AnyNumber())
|
|
|
|
@ -621,3 +623,77 @@ TEST(AdapterClient, ReadLargeFile)
|
|
|
|
|
client.Disconnect();
|
|
|
|
|
ASSERT_EQ(std::future_status::ready, disconnected.get_future().wait_for(TIMEOUT));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(AdapterClient, ReadLargeFile)
|
|
|
|
|
{
|
|
|
|
|
MockInvokationHander handler;
|
|
|
|
|
WsServer server(handler, WF_PROTOCOL_NAME_PROVIDER_SERVER);
|
|
|
|
|
EXPECT_CALL(handler, Invoke(StrEq("add_filesystem"),_)).Times(1)
|
|
|
|
|
.WillOnce(Return("{\"id\": \"test\"}"));
|
|
|
|
|
EXPECT_CALL(handler, Invoke(StrEq("lookup"), _)).Times(AnyNumber())
|
|
|
|
|
.WillRepeatedly(Throw(std::runtime_error("unknown")));
|
|
|
|
|
EXPECT_CALL(handler, Invoke(StrEq("lookup"), Lookup(1, "a.file"))).Times(1)
|
|
|
|
|
.WillOnce(Return("{\"inode\": 2, \"mode\": 420, \"type\": \"file\", \"size\": 102400}"));
|
|
|
|
|
EXPECT_CALL(handler, Invoke(StrEq("getattr"), GetAttr(1))).Times(AnyNumber())
|
|
|
|
|
.WillRepeatedly(Return("{\"mode\": 420, \"type\": \"dir\"}"));
|
|
|
|
|
EXPECT_CALL(handler, Invoke(StrEq("getattr"), GetAttr(2))).Times(AnyNumber())
|
|
|
|
|
.WillRepeatedly(Return("{\"mode\": 420, \"type\": \"file\", \"size\": 102400}"));
|
|
|
|
|
EXPECT_CALL(handler, Invoke(StrEq("open"), Open(2))).Times(1)
|
|
|
|
|
.WillOnce(Return("{\"handle\": 42}"));
|
|
|
|
|
EXPECT_CALL(handler, Invoke(StrEq("read"), _)).Times(AnyNumber())
|
|
|
|
|
.WillRepeatedly(Invoke([](char const *, json_t * params) {
|
|
|
|
|
int offset = json_integer_value(json_array_get(params, 3));
|
|
|
|
|
int length = json_integer_value(json_array_get(params, 4));
|
|
|
|
|
|
|
|
|
|
int remaining = (offset < 102400) ? 102400 - offset : 0;
|
|
|
|
|
int count = (length < remaining) ? length : remaining;
|
|
|
|
|
|
|
|
|
|
std::string data = std::string(count, '*');
|
|
|
|
|
|
|
|
|
|
json_t * result = json_object();
|
|
|
|
|
json_object_set_new(result, "data", json_string(data.c_str()));
|
|
|
|
|
json_object_set_new(result, "format", json_string("identity"));
|
|
|
|
|
json_object_set_new(result, "count", json_integer(count));
|
|
|
|
|
|
|
|
|
|
char * result_text = json_dumps(result, 0);
|
|
|
|
|
std::string result_str = result_text;
|
|
|
|
|
free(result_text);
|
|
|
|
|
json_decref(result);
|
|
|
|
|
|
|
|
|
|
return result_str;
|
|
|
|
|
}));
|
|
|
|
|
EXPECT_CALL(handler, Invoke(StrEq("close"), _)).Times(AtMost(1));
|
|
|
|
|
|
|
|
|
|
MockAdapterClientCallback callback;
|
|
|
|
|
EXPECT_CALL(callback, Invoke(_, _, _)).Times(AnyNumber());
|
|
|
|
|
|
|
|
|
|
std::promise<void> connected;
|
|
|
|
|
EXPECT_CALL(callback, Invoke(_, WF_CLIENT_CONNECTED, nullptr)).Times(1)
|
|
|
|
|
.WillOnce(Invoke([&] (wf_client *, int, void *) mutable { connected.set_value(); }));
|
|
|
|
|
|
|
|
|
|
std::promise<void> disconnected;
|
|
|
|
|
EXPECT_CALL(callback, Invoke(_, WF_CLIENT_DISCONNECTED, nullptr)).Times(1)
|
|
|
|
|
.WillOnce(Invoke([&] (wf_client *, int, void *) mutable { disconnected.set_value(); }));
|
|
|
|
|
|
|
|
|
|
std::promise<void> called;
|
|
|
|
|
EXPECT_CALL(callback, Invoke(_, WF_CLIENT_FILESYSTEM_ADDED, nullptr)).Times(1)
|
|
|
|
|
.WillOnce(Invoke([&called] (wf_client *, int, void *) mutable {
|
|
|
|
|
called.set_value();
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
AdapterClient client(callback.GetCallbackFn(), callback.GetUserData(), server.GetUrl());
|
|
|
|
|
|
|
|
|
|
client.Connect();
|
|
|
|
|
ASSERT_EQ(std::future_status::ready, connected.get_future().wait_for(TIMEOUT));
|
|
|
|
|
|
|
|
|
|
client.AddFileSystem();
|
|
|
|
|
ASSERT_EQ(std::future_status::ready, called.get_future().wait_for(TIMEOUT));
|
|
|
|
|
|
|
|
|
|
std::string base_dir = client.GetDir();
|
|
|
|
|
ASSERT_TRUE(File(base_dir).isDirectory());
|
|
|
|
|
File file(base_dir + "/a.file");
|
|
|
|
|
ASSERT_TRUE(file.readAll());
|
|
|
|
|
|
|
|
|
|
client.Disconnect();
|
|
|
|
|
ASSERT_EQ(std::future_status::ready, disconnected.get_future().wait_for(TIMEOUT));
|
|
|
|
|
}
|