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