• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024-2025 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_reply_ioctl(fuse_req_t, int, const void *, size_t) = 0;
48     virtual int fuse_opt_add_arg(struct fuse_args *args, const char *arg) = 0;
49     virtual struct fuse_session* fuse_session_new(struct fuse_args *args, const struct fuse_lowlevel_ops *op,
50         size_t op_size, void *userdata) = 0;
51 
access(const char * name,int type)52     static int access(const char *name, int type)
53     {
54         if (strcmp(name, "mock") == 0) {
55             return 0;
56         }
57         return 1;
58     }
open(const char * file,int oflag)59     static int open(const char *file, int oflag)
60     {
61         return 0;
62     }
close(int fd)63     static int close(int fd)
64     {
65         return 0;
66     }
67 
68 public:
69     virtual off_t lseek(int, off_t, int) = 0;
70     virtual int fstat(int fd, struct stat *buf) = 0;
71     virtual int fcntl(int fd, int op) = 0;
72     virtual int ftruncate(int fd, off_t length) = 0;
73 
74 public:
75     // file_utils
76     virtual int64_t ReadFile(int fd, off_t offset, size_t size, void *data) = 0;
77     virtual int64_t WriteFile(int fd, const void *data, off_t offset, size_t size) = 0;
78     virtual int FilePosLock(int fd, off_t offset, size_t size, int type) = 0;
79 };
80 
81 class AssistantMock : public Assistant {
82 public:
83     MOCK_METHOD1(fuse_req_userdata, void*(fuse_req_t));
84     MOCK_METHOD2(fuse_reply_err, int(fuse_req_t, int));
85     MOCK_METHOD2(fuse_reply_open, int(fuse_req_t, const struct fuse_file_info *));
86     MOCK_METHOD1(fuse_reply_none, void(fuse_req_t));
87     MOCK_METHOD3(fuse_reply_data, int(fuse_req_t, struct fuse_bufvec *, enum fuse_buf_copy_flags));
88     MOCK_METHOD1(fuse_buf_size, size_t(const struct fuse_bufvec *));
89     MOCK_METHOD3(fuse_buf_copy, ssize_t(struct fuse_bufvec *, struct fuse_bufvec *, enum fuse_buf_copy_flags));
90     MOCK_METHOD2(fuse_reply_write, int(fuse_req_t, size_t));
91     MOCK_METHOD2(fuse_reply_lseek, int(fuse_req_t, off_t));
92     MOCK_METHOD3(fuse_reply_buf, int(fuse_req_t, const char *, size_t));
93     MOCK_METHOD2(fuse_reply_xattr, int(fuse_req_t, size_t));
94     MOCK_METHOD3(fuse_reply_attr, int(fuse_req_t, const struct stat *, double));
95     MOCK_METHOD2(fuse_reply_entry, int(fuse_req_t, const struct fuse_entry_param *));
96     MOCK_METHOD3(fuse_reply_create, int(fuse_req_t, const struct fuse_entry_param *, const struct fuse_file_info *));
97     MOCK_METHOD4(fuse_reply_ioctl, int(fuse_req_t, int, const void *, size_t));
98     MOCK_METHOD2(fuse_opt_add_arg, int(struct fuse_args *args, const char *arg));
99     MOCK_METHOD4(fuse_session_new, struct fuse_session*(struct fuse_args *args, const struct fuse_lowlevel_ops *op,
100         size_t opSize, void *userData));
101 
102 public:
103     MOCK_METHOD3(lseek, off_t(int, off_t, int));
104     MOCK_METHOD2(fstat, int(int, struct stat *));
105     MOCK_METHOD2(fcntl, int(int, int));
106     MOCK_METHOD2(ftruncate, int(int, off_t));
107 
108 public:
109     // file_utils
110     MOCK_METHOD4(ReadFile, int64_t(int fd, off_t offset, size_t size, void *data));
111     MOCK_METHOD4(WriteFile, int64_t(int fd, const void *data, off_t offset, size_t size));
112     MOCK_METHOD4(FilePosLock, int(int fd, off_t offset, size_t size, int type));
113 };
114 } // namespace OHOS::FileManagement::CloudDisk
115 #endif // TEST_UNITTESTS_CLOUD_DISK_ASSISTANT_H