package test
import (
"errors"
"io"
"regexp"
"sync"
"github.com/openshift/source-to-image/pkg/tar"
)
// FakeTar provides a fake UNIX tar interface
type FakeTar struct {
CreateTarBase string
CreateTarDir string
CreateTarResult string
CreateTarError error
ExtractTarDir string
ExtractTarReader io.Reader
ExtractTarError error
lock sync.Mutex
}
// Copy returns a copy of the FakeTar object
func (f *FakeTar) Copy() *FakeTar {
f.lock.Lock()
defer f.lock.Unlock()
// copy everything except .lock...
n := &FakeTar{
CreateTarBase: f.CreateTarBase,
CreateTarDir: f.CreateTarDir,
CreateTarResult: f.CreateTarResult,
CreateTarError: f.CreateTarError,
ExtractTarDir: f.ExtractTarDir,
ExtractTarReader: f.ExtractTarReader,
ExtractTarError: f.ExtractTarError,
}
return n
}
// CreateTarFile creates a new fake UNIX tar file
func (f *FakeTar) CreateTarFile(base, dir string) (string, error) {
f.lock.Lock()
defer f.lock.Unlock()
f.CreateTarBase = base
f.CreateTarDir = dir
return f.CreateTarResult, f.CreateTarError
}
// ExtractTarStreamWithLogging streams a content of fake tar
func (f *FakeTar) ExtractTarStreamWithLogging(dir string, reader io.Reader, logger io.Writer) error {
f.lock.Lock()
defer f.lock.Unlock()
f.ExtractTarDir = dir
f.ExtractTarReader = reader
return f.ExtractTarError
}
// ExtractTarStreamFromTarReader streams a content of fake tar from a tar.Reader
func (f *FakeTar) ExtractTarStreamFromTarReader(dir string, tarReader tar.Reader, logger io.Writer) error {
return errors.New("not implemented")
}
// ExtractTarStream streams a content of fake tar
func (f *FakeTar) ExtractTarStream(dir string, reader io.Reader) error {
return f.ExtractTarStreamWithLogging(dir, reader, nil)
}
// SetExclusionPattern sets the exclusion pattern
func (f *FakeTar) SetExclusionPattern(*regexp.Regexp) {
}
// CreateTarStreamToTarWriter creates a tar from the given directory and streams
// it to the given writer.
func (f *FakeTar) CreateTarStreamToTarWriter(dir string, includeDirInPath bool, writer tar.Writer, logger io.Writer) error {
f.lock.Lock()
defer f.lock.Unlock()
f.CreateTarDir = dir
return f.CreateTarError
}
// CreateTarStream creates a tar from the given directory and streams it to the
// given writer.
func (f *FakeTar) CreateTarStream(dir string, includeDirInPath bool, writer io.Writer) error {
return f.CreateTarStreamToTarWriter(dir, includeDirInPath, nil, nil)
}
// CreateTarStreamReader returns an io.ReadCloser from which a tar stream can be
// read. The tar stream is created using CreateTarStream.
func (f *FakeTar) CreateTarStreamReader(dir string, includeDirInPath bool) io.ReadCloser {
f.CreateTarStreamToTarWriter(dir, includeDirInPath, nil, nil)
r, w := io.Pipe()
go w.CloseWithError(f.CreateTarError)
return r
}