func (fs *MockFilesystem) OpenFile(name string, flag int, perm os.FileMode) (file File, err error) {
	f, ok := fs.Files[name]
	if ok {
		f.Opened = true
		f.Closed = false
		return f, nil
	}
	return (*MockFile)(nil), &os.PathError{Err: errors.New(name + ": No such file.")}
}
OpenFile opens file name from fs.Files, if the file does not exist it returns an os.PathError
package sysfs
import (
	"errors"
	"os"
	"time"
)
var _ File = (*MockFile)(nil)
var _ Filesystem = (*MockFilesystem)(nil)
type MockFilesystem struct {
	Seq   int  
	Files map[string]*MockFile
}
type MockFile struct {
	Contents string
	Seq      int  
	Opened   bool
	Closed   bool
	fd       uintptr
	fs *MockFilesystem
}
func (f *MockFile) Write(b []byte) (n int, err error) {
	return f.WriteString(string(b))
}
func (f *MockFile) Seek(offset int64, whence int) (ret int64, err error) {
	return offset, nil
}
func (f *MockFile) WriteString(s string) (ret int, err error) {
	f.Contents = s
	f.Seq = f.fs.next()
	return len(s), nil
}
func (f *MockFile) Sync() (err error) {
	return nil
}
func (f *MockFile) Read(b []byte) (n int, err error) {
	count := len(b)
	if len(f.Contents) < count {
		count = len(f.Contents)
	}
	copy(b, []byte(f.Contents)[:count])
	f.Seq = f.fs.next()
	return count, nil
}
func (f *MockFile) ReadAt(b []byte, off int64) (n int, err error) {
	return f.Read(b)
}
func (f *MockFile) Fd() uintptr {
	return f.fd
}
func (f *MockFile) Close() error {
	return nil
}
func NewMockFilesystem(files []string) *MockFilesystem {
	m := &MockFilesystem{
		Files: make(map[string]*MockFile),
	}
	for i := range files {
		m.Add(files[i])
	}
	return m
}