Successfully opens any file name given to it and pretends that all files have a certain number of bytes (set by application at time of mounting the file system.) Can be used to simulate large files sourced from an ultra fast file system to find and correct bugs in other areas of an application.

Committer:
AdamGreen
Date:
Sun Dec 25 01:31:16 2011 +0000
Revision:
0:911b8403d557

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AdamGreen 0:911b8403d557 1 /* Copyright 2011 Adam Green (http://mbed.org/users/AdamGreen/)
AdamGreen 0:911b8403d557 2
AdamGreen 0:911b8403d557 3 Licensed under the Apache License, Version 2.0 (the "License");
AdamGreen 0:911b8403d557 4 you may not use this file except in compliance with the License.
AdamGreen 0:911b8403d557 5 You may obtain a copy of the License at
AdamGreen 0:911b8403d557 6
AdamGreen 0:911b8403d557 7 http://www.apache.org/licenses/LICENSE-2.0
AdamGreen 0:911b8403d557 8
AdamGreen 0:911b8403d557 9 Unless required by applicable law or agreed to in writing, software
AdamGreen 0:911b8403d557 10 distributed under the License is distributed on an "AS IS" BASIS,
AdamGreen 0:911b8403d557 11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AdamGreen 0:911b8403d557 12 See the License for the specific language governing permissions and
AdamGreen 0:911b8403d557 13 limitations under the License.
AdamGreen 0:911b8403d557 14 */
AdamGreen 0:911b8403d557 15 /* Specifies the classes used to implement the FakeFileSystem which is used by
AdamGreen 0:911b8403d557 16 the HTTPServer during performance testing to just simulate enough of a
AdamGreen 0:911b8403d557 17 filesystem to just send a fixed amount of uninitialized data to the client.
AdamGreen 0:911b8403d557 18 */
AdamGreen 0:911b8403d557 19 #ifndef _FAKEFILESYSTEM_H_
AdamGreen 0:911b8403d557 20 #define _FAKEFILESYSTEM_H_
AdamGreen 0:911b8403d557 21
AdamGreen 0:911b8403d557 22 #include "FileSystemLike.h"
AdamGreen 0:911b8403d557 23
AdamGreen 0:911b8403d557 24
AdamGreen 0:911b8403d557 25 // Forward declare file system entry structure used internally in
AdamGreen 0:911b8403d557 26 // FakeFileSystem.
AdamGreen 0:911b8403d557 27 struct _SFileSystemEntry;
AdamGreen 0:911b8403d557 28
AdamGreen 0:911b8403d557 29
AdamGreen 0:911b8403d557 30
AdamGreen 0:911b8403d557 31 // Represents an opened file object in the FakeFileSystem.
AdamGreen 0:911b8403d557 32 class FakeFileSystemFileHandle : public FileHandle
AdamGreen 0:911b8403d557 33 {
AdamGreen 0:911b8403d557 34 public:
AdamGreen 0:911b8403d557 35 FakeFileSystemFileHandle();
AdamGreen 0:911b8403d557 36 FakeFileSystemFileHandle(size_t FileSize);
AdamGreen 0:911b8403d557 37
AdamGreen 0:911b8403d557 38 // FileHandle interface methods.
AdamGreen 0:911b8403d557 39 virtual ssize_t write(const void* buffer, size_t length);
AdamGreen 0:911b8403d557 40 virtual int close();
AdamGreen 0:911b8403d557 41 virtual ssize_t read(void* buffer, size_t length);
AdamGreen 0:911b8403d557 42 virtual int isatty();
AdamGreen 0:911b8403d557 43 virtual off_t lseek(off_t offset, int whence);
AdamGreen 0:911b8403d557 44 virtual int fsync();
AdamGreen 0:911b8403d557 45 virtual off_t flen();
AdamGreen 0:911b8403d557 46
AdamGreen 0:911b8403d557 47 // Used by FakeFileSystem to maintain entries in its handle table.
AdamGreen 0:911b8403d557 48 void SetEntry(size_t FileSize)
AdamGreen 0:911b8403d557 49 {
AdamGreen 0:911b8403d557 50 m_Offset = 0;
AdamGreen 0:911b8403d557 51 m_Size = FileSize;
AdamGreen 0:911b8403d557 52 }
AdamGreen 0:911b8403d557 53 int IsClosed()
AdamGreen 0:911b8403d557 54 {
AdamGreen 0:911b8403d557 55 return (0 == m_Size);
AdamGreen 0:911b8403d557 56 }
AdamGreen 0:911b8403d557 57
AdamGreen 0:911b8403d557 58 protected:
AdamGreen 0:911b8403d557 59 // Current position in file to be updated by read and seek operations.
AdamGreen 0:911b8403d557 60 size_t m_Offset;
AdamGreen 0:911b8403d557 61 // The simulated size of this fake file.
AdamGreen 0:911b8403d557 62 size_t m_Size;
AdamGreen 0:911b8403d557 63 };
AdamGreen 0:911b8403d557 64
AdamGreen 0:911b8403d557 65
AdamGreen 0:911b8403d557 66 class FakeFileSystem : public FileSystemLike
AdamGreen 0:911b8403d557 67 {
AdamGreen 0:911b8403d557 68 public:
AdamGreen 0:911b8403d557 69 FakeFileSystem(const char* pName, size_t FakeFileSize);
AdamGreen 0:911b8403d557 70
AdamGreen 0:911b8403d557 71 virtual FileHandle* open(const char* pFilename, int Flags);
AdamGreen 0:911b8403d557 72 virtual DirHandle* opendir(const char *pDirectoryName);
AdamGreen 0:911b8403d557 73
AdamGreen 0:911b8403d557 74 virtual int IsMounted() { return 1; }
AdamGreen 0:911b8403d557 75
AdamGreen 0:911b8403d557 76 protected:
AdamGreen 0:911b8403d557 77 FakeFileSystemFileHandle* FindFreeFileHandle();
AdamGreen 0:911b8403d557 78
AdamGreen 0:911b8403d557 79 // File handle table used by this file system so that it doesn't need
AdamGreen 0:911b8403d557 80 // to dynamically allocate file handles at runtime.
AdamGreen 0:911b8403d557 81 FakeFileSystemFileHandle m_FileHandles[16];
AdamGreen 0:911b8403d557 82
AdamGreen 0:911b8403d557 83 size_t m_FakeFileSize;
AdamGreen 0:911b8403d557 84 };
AdamGreen 0:911b8403d557 85
AdamGreen 0:911b8403d557 86 #endif // _FAKEFILESYSTEM_H_