sharedlibraries/filesystem/fake/fake.go (130 lines of code) (raw):

/* Copyright 2025 Google LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ // Package fake provides a fake implementation of the filesystem interface for unit tests package fake import ( "archive/zip" "io" "io/fs" "os" "time" "github.com/GoogleCloudPlatform/workloadagentplatform/sharedlibraries/zipper" ) // FileSystem provides a fake implementation of the filesystem.Filesystem interface. type FileSystem struct { MkDirErr []error mkDirCallCount int ReadFileResp [][]byte ReadFileErr []error readFileCallCount int ReadDirResp [][]fs.FileInfo ReadDirErr []error readDirCallCount int OpenResp []*os.File OpenErr []error openCallCount int OpenFileResp []*os.File OpenFileErr []error openFileCallCount int RemoveAllErr []error removeAllCallCount int CreateResp []*os.File CreateErr []error createCallCount int WriteStringToFileResp []int WriteStringToFileErr []error writeStringToFileCallCount int RenameErr []error renameCallCount int CopyResp []int64 CopyErr []error copyCallCount int ChmodErr []error chmodCallCount int StatResp []os.FileInfo StatErr []error statCallCount int WalkAndZipErr []error walkAndZipCallCount int SeekResp []int64 SeekErr []error seekCallCount int } // MkdirAll is a fake implementation for unit testing. func (f *FileSystem) MkdirAll(string, os.FileMode) error { defer func() { f.mkDirCallCount++ }() return f.MkDirErr[f.mkDirCallCount] } // ReadFile is a fake implementation for unit testing. func (f *FileSystem) ReadFile(string) ([]byte, error) { defer func() { f.readFileCallCount++ }() return f.ReadFileResp[f.readFileCallCount], f.ReadFileErr[f.readFileCallCount] } // ReadDir is a fake implementation for unit testing. func (f *FileSystem) ReadDir(string) ([]fs.FileInfo, error) { defer func() { f.readDirCallCount++ }() return f.ReadDirResp[f.readDirCallCount], f.ReadDirErr[f.readDirCallCount] } // Open is a fake implementation for unit testing. func (f *FileSystem) Open(string) (*os.File, error) { defer func() { f.openCallCount++ }() return f.OpenResp[f.openCallCount], f.OpenErr[f.openCallCount] } // OpenFile is a fake implementation for unit testing. func (f *FileSystem) OpenFile(string, int, os.FileMode) (*os.File, error) { defer func() { f.openFileCallCount++ }() return f.OpenFileResp[f.openFileCallCount], f.OpenFileErr[f.openFileCallCount] } // RemoveAll is a fake implementation for unit testing. func (f *FileSystem) RemoveAll(string) error { defer func() { f.removeAllCallCount++ }() return f.RemoveAllErr[f.removeAllCallCount] } // Create is a fake implementation for unit testing. func (f *FileSystem) Create(string) (*os.File, error) { defer func() { f.createCallCount++ }() return f.CreateResp[f.createCallCount], f.CreateErr[f.createCallCount] } // WriteStringToFile is a fake implementation for unit testing. func (f *FileSystem) WriteStringToFile(*os.File, string) (int, error) { defer func() { f.writeStringToFileCallCount++ }() return f.WriteStringToFileResp[f.writeStringToFileCallCount], f.WriteStringToFileErr[f.writeStringToFileCallCount] } // Rename is a fake implementation for unit testing. func (f *FileSystem) Rename(string, string) error { defer func() { f.renameCallCount++ }() return f.RenameErr[f.renameCallCount] } // Copy is a fake implementation for unit testing. func (f *FileSystem) Copy(io.Writer, io.Reader) (int64, error) { defer func() { f.copyCallCount++ }() return f.CopyResp[f.copyCallCount], f.CopyErr[f.copyCallCount] } // Chmod is a fake implementation for unit testing. func (f *FileSystem) Chmod(string, os.FileMode) error { defer func() { f.chmodCallCount++ }() return f.ChmodErr[f.chmodCallCount] } // Stat is a fake implementation for unit testing. func (f *FileSystem) Stat(string) (os.FileInfo, error) { defer func() { f.statCallCount++ }() return f.StatResp[f.statCallCount], f.StatErr[f.statCallCount] } // WalkAndZip is a fake implementation for unit testing. func (f *FileSystem) WalkAndZip(string, zipper.Zipper, *zip.Writer) error { defer func() { f.walkAndZipCallCount++ }() return f.WalkAndZipErr[f.walkAndZipCallCount] } // FileInfo is a fake implementation of fs.FileInfo for unit testing. type FileInfo struct { FakeName string FakeSize int64 FakeMode fs.FileMode FakeModTime time.Time FakeIsDir bool FakeSYS any } // Name is a fake implementation for unit testing. func (fi FileInfo) Name() string { return fi.FakeName } // Size is a fake implementation for unit testing. func (fi FileInfo) Size() int64 { return fi.FakeSize } // Mode is a fake implementation for unit testing. func (fi FileInfo) Mode() fs.FileMode { return fi.FakeMode } // ModTime is a fake implementation for unit testing. func (fi FileInfo) ModTime() time.Time { return fi.FakeModTime } // IsDir is a fake implementation for unit testing. func (fi FileInfo) IsDir() bool { return fi.FakeIsDir } // Sys is a fake implementation for unit testing. func (fi FileInfo) Sys() any { return fi.FakeSYS } // Seek is a fake implementation for unit testing. func (f *FileSystem) Seek(*os.File, int64, int) (int64, error) { defer func() { f.seekCallCount++ }() return f.SeekResp[f.seekCallCount], f.SeekErr[f.seekCallCount] }