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 
19 #include <fuse_lowlevel.h>
20 #include <memory>
21 #include <gmock/gmock.h>
22 
23 namespace OHOS::FileManagement::CloudDisk {
24 class Assistant {
25 public:
26     static inline std::shared_ptr<Assistant> ins = nullptr;
27 public:
28     virtual ~Assistant() = default;
29     virtual void *fuse_req_userdata(fuse_req_t) = 0;
30     virtual int fuse_reply_err(fuse_req_t, int) = 0;
31     virtual int fuse_reply_open(fuse_req_t, const struct fuse_file_info *) = 0;
32     virtual void fuse_reply_none(fuse_req_t) = 0;
33     virtual int fuse_reply_data(fuse_req_t, struct fuse_bufvec *, enum fuse_buf_copy_flags) = 0;
34     virtual size_t fuse_buf_size(const struct fuse_bufvec *) = 0;
35     virtual ssize_t fuse_buf_copy(struct fuse_bufvec *, struct fuse_bufvec *, enum fuse_buf_copy_flags) = 0;
36     virtual int fuse_reply_write(fuse_req_t, size_t) = 0;
37     virtual int fuse_reply_lseek(fuse_req_t, off_t) = 0;
38     virtual int fuse_reply_buf(fuse_req_t, const char *, size_t) = 0;
39     virtual int fuse_reply_xattr(fuse_req_t, size_t) = 0;
40     virtual int fuse_reply_attr(fuse_req_t, const struct stat *, double) = 0;
41     virtual int fuse_reply_entry(fuse_req_t, const struct fuse_entry_param *) = 0;
access(const char * name,int type)42     int access(const char *name, int type)
43     {
44         if (strcmp(name, "mock") == 0) {
45             return 0;
46         }
47         return 1;
48     }
open(const char * file,int oflag)49     int open(const char *file, int oflag)
50     {
51         return 0;
52     }
53 public:
54     virtual off_t lseek(int, off_t, int) = 0;
55 };
56 
57 class AssistantMock : public Assistant {
58 public:
59     MOCK_METHOD1(fuse_req_userdata, void*(fuse_req_t));
60     MOCK_METHOD2(fuse_reply_err, int(fuse_req_t, int));
61     MOCK_METHOD2(fuse_reply_open, int(fuse_req_t, const struct fuse_file_info *));
62     MOCK_METHOD1(fuse_reply_none, void(fuse_req_t));
63     MOCK_METHOD3(fuse_reply_data, int(fuse_req_t, struct fuse_bufvec *, enum fuse_buf_copy_flags));
64     MOCK_METHOD1(fuse_buf_size, size_t(const struct fuse_bufvec *));
65     MOCK_METHOD3(fuse_buf_copy, ssize_t(struct fuse_bufvec *, struct fuse_bufvec *, enum fuse_buf_copy_flags));
66     MOCK_METHOD2(fuse_reply_write, int(fuse_req_t, size_t));
67     MOCK_METHOD2(fuse_reply_lseek, int(fuse_req_t, off_t));
68     MOCK_METHOD3(fuse_reply_buf, int(fuse_req_t, const char *, size_t));
69     MOCK_METHOD2(fuse_reply_xattr, int(fuse_req_t, size_t));
70     MOCK_METHOD3(fuse_reply_attr, int(fuse_req_t, const struct stat *, double));
71     MOCK_METHOD2(fuse_reply_entry, int(fuse_req_t, const struct fuse_entry_param *));
72 
73 public:
74     MOCK_METHOD3(lseek, off_t(int, off_t, int));
75 };
76 } // namespace OHOS::FileManagement::CloudDisk
77 #endif // TEST_UNITTESTS_CLOUD_DISK_ASSISTANT_H