• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
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 #ifndef TEST_UNITTESTS_CLOUD_DISK_ASSISTANT_H
17 #define TEST_UNITTESTS_CLOUD_DISK_ASSISTANT_H
18 #ifndef FUSE_USE_VERSION
19 #define FUSE_USE_VERSION 34
20 #endif
21 
22 #include <fuse_lowlevel.h>
23 #include <fuse_opt.h>
24 #include <gmock/gmock.h>
25 #include <memory>
26 
27 namespace OHOS::FileManagement::CloudDisk {
28 class Assistant {
29 public:
30     static inline std::shared_ptr<Assistant> ins = nullptr;
31 public:
32     virtual ~Assistant() = default;
33     virtual void *fuse_req_userdata(fuse_req_t) = 0;
34     virtual int fuse_reply_err(fuse_req_t, int) = 0;
35     virtual int fuse_reply_open(fuse_req_t, const struct fuse_file_info *) = 0;
36     virtual void fuse_reply_none(fuse_req_t) = 0;
37     virtual int fuse_reply_data(fuse_req_t, struct fuse_bufvec *, enum fuse_buf_copy_flags) = 0;
38     virtual size_t fuse_buf_size(const struct fuse_bufvec *) = 0;
39     virtual ssize_t fuse_buf_copy(struct fuse_bufvec *, struct fuse_bufvec *, enum fuse_buf_copy_flags) = 0;
40     virtual int fuse_reply_write(fuse_req_t, size_t) = 0;
41     virtual int fuse_reply_lseek(fuse_req_t, off_t) = 0;
42     virtual int fuse_reply_buf(fuse_req_t, const char *, size_t) = 0;
43     virtual int fuse_reply_xattr(fuse_req_t, size_t) = 0;
44     virtual int fuse_reply_attr(fuse_req_t, const struct stat *, double) = 0;
45     virtual int fuse_reply_entry(fuse_req_t, const struct fuse_entry_param *) = 0;
46     virtual int fuse_reply_create(fuse_req_t, const struct fuse_entry_param *, const struct fuse_file_info *) = 0;
47     virtual int fuse_opt_add_arg(struct fuse_args *args, const char *arg) = 0;
48     virtual struct fuse_session* fuse_session_new(struct fuse_args *args, const struct fuse_lowlevel_ops *op,
49         size_t op_size, void *userdata) = 0;
50 
access(const char * name,int type)51     static int access(const char *name, int type)
52     {
53         if (strcmp(name, "mock") == 0) {
54             return 0;
55         }
56         return 1;
57     }
open(const char * file,int oflag)58     static int open(const char *file, int oflag)
59     {
60         return 0;
61     }
62 public:
63     virtual off_t lseek(int, off_t, int) = 0;
64 };
65 
66 class AssistantMock : public Assistant {
67 public:
68     MOCK_METHOD1(fuse_req_userdata, void*(fuse_req_t));
69     MOCK_METHOD2(fuse_reply_err, int(fuse_req_t, int));
70     MOCK_METHOD2(fuse_reply_open, int(fuse_req_t, const struct fuse_file_info *));
71     MOCK_METHOD1(fuse_reply_none, void(fuse_req_t));
72     MOCK_METHOD3(fuse_reply_data, int(fuse_req_t, struct fuse_bufvec *, enum fuse_buf_copy_flags));
73     MOCK_METHOD1(fuse_buf_size, size_t(const struct fuse_bufvec *));
74     MOCK_METHOD3(fuse_buf_copy, ssize_t(struct fuse_bufvec *, struct fuse_bufvec *, enum fuse_buf_copy_flags));
75     MOCK_METHOD2(fuse_reply_write, int(fuse_req_t, size_t));
76     MOCK_METHOD2(fuse_reply_lseek, int(fuse_req_t, off_t));
77     MOCK_METHOD3(fuse_reply_buf, int(fuse_req_t, const char *, size_t));
78     MOCK_METHOD2(fuse_reply_xattr, int(fuse_req_t, size_t));
79     MOCK_METHOD3(fuse_reply_attr, int(fuse_req_t, const struct stat *, double));
80     MOCK_METHOD2(fuse_reply_entry, int(fuse_req_t, const struct fuse_entry_param *));
81     MOCK_METHOD3(fuse_reply_create, int(fuse_req_t, const struct fuse_entry_param *, const struct fuse_file_info *));
82     MOCK_METHOD2(fuse_opt_add_arg, int(struct fuse_args *args, const char *arg));
83     MOCK_METHOD4(fuse_session_new, struct fuse_session*(struct fuse_args *args, const struct fuse_lowlevel_ops *op,
84         size_t opSize, void *userData));
85 public:
86     MOCK_METHOD3(lseek, off_t(int, off_t, int));
87 };
88 } // namespace OHOS::FileManagement::CloudDisk
89 #endif // TEST_UNITTESTS_CLOUD_DISK_ASSISTANT_H