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