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