123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- package fakecontext
- import (
- "bytes"
- "io/ioutil"
- "os"
- "path/filepath"
- )
- type testingT interface {
- Fatal(args ...interface{})
- Fatalf(string, ...interface{})
- }
- // New creates a fake build context
- func New(t testingT, dir string, modifiers ...func(*Fake) error) *Fake {
- fakeContext := &Fake{Dir: dir}
- if dir == "" {
- if err := newDir(fakeContext); err != nil {
- t.Fatal(err)
- }
- }
- for _, modifier := range modifiers {
- if err := modifier(fakeContext); err != nil {
- t.Fatal(err)
- }
- }
- return fakeContext
- }
- func newDir(fake *Fake) error {
- tmp, err := ioutil.TempDir("", "fake-context")
- if err != nil {
- return err
- }
- if err := os.Chmod(tmp, 0755); err != nil {
- return err
- }
- fake.Dir = tmp
- return nil
- }
- // WithFile adds the specified file (with content) in the build context
- func WithFile(name, content string) func(*Fake) error {
- return func(ctx *Fake) error {
- return ctx.Add(name, content)
- }
- }
- // WithDockerfile adds the specified content as Dockerfile in the build context
- func WithDockerfile(content string) func(*Fake) error {
- return WithFile("Dockerfile", content)
- }
- // WithFiles adds the specified files in the build context, content is a string
- func WithFiles(files map[string]string) func(*Fake) error {
- return func(fakeContext *Fake) error {
- for file, content := range files {
- if err := fakeContext.Add(file, content); err != nil {
- return err
- }
- }
- return nil
- }
- }
- // WithBinaryFiles adds the specified files in the build context, content is binary
- func WithBinaryFiles(files map[string]*bytes.Buffer) func(*Fake) error {
- return func(fakeContext *Fake) error {
- for file, content := range files {
- if err := fakeContext.Add(file, string(content.Bytes())); err != nil {
- return err
- }
- }
- return nil
- }
- }
- // Fake creates directories that can be used as a build context
- type Fake struct {
- Dir string
- }
- // Add a file at a path, creating directories where necessary
- func (f *Fake) Add(file, content string) error {
- return f.addFile(file, []byte(content))
- }
- func (f *Fake) addFile(file string, content []byte) error {
- fp := filepath.Join(f.Dir, filepath.FromSlash(file))
- dirpath := filepath.Dir(fp)
- if dirpath != "." {
- if err := os.MkdirAll(dirpath, 0755); err != nil {
- return err
- }
- }
- return ioutil.WriteFile(fp, content, 0644)
- }
- // Delete a file at a path
- func (f *Fake) Delete(file string) error {
- fp := filepath.Join(f.Dir, filepath.FromSlash(file))
- return os.RemoveAll(fp)
- }
- // Close deletes the context
- func (f *Fake) Close() error {
- return os.RemoveAll(f.Dir)
- }
|