github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/state/backups/export_test.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package backups
     5  
     6  import (
     7  	"bytes"
     8  	"io"
     9  
    10  	"github.com/juju/errors"
    11  )
    12  
    13  var (
    14  	Create        = create
    15  	FileTimestamp = fileTimestamp
    16  
    17  	TestGetFilesToBackUp = &getFilesToBackUp
    18  	GetDBDumper          = &getDBDumper
    19  	RunCreate            = &runCreate
    20  	FinishMeta           = &finishMeta
    21  	GetMongodumpPath     = &getMongodumpPath
    22  	RunCommand           = &runCommandFn
    23  	AvailableDisk        = &availableDisk
    24  	TotalDisk            = &totalDisk
    25  	DirSize              = &dirSize
    26  )
    27  
    28  // ExposeCreateResult extracts the values in a create() result.
    29  func ExposeCreateResult(result *createResult) (io.ReadCloser, int64, string, string) {
    30  	return result.archiveFile, result.size, result.checksum, result.filename
    31  }
    32  
    33  // NewTestCreateArgs builds a new args value for create() calls.
    34  func NewTestCreateArgs(backupDir string, filesToBackUp []string, db DBDumper, metar io.Reader) *createArgs {
    35  	args := createArgs{
    36  		destinationDir: backupDir,
    37  		filesToBackUp:  filesToBackUp,
    38  		db:             db,
    39  		metadataReader: metar,
    40  	}
    41  	return &args
    42  }
    43  
    44  // ExposeCreateResult extracts the values in a create() args value.
    45  func ExposeCreateArgs(args *createArgs) (string, []string, DBDumper) {
    46  	return args.destinationDir, args.filesToBackUp, args.db
    47  }
    48  
    49  // NewTestCreateResult builds a new create() result.
    50  func NewTestCreateResult(file io.ReadCloser, size int64, checksum, filename string) *createResult {
    51  	result := createResult{
    52  		archiveFile: file,
    53  		size:        size,
    54  		checksum:    checksum,
    55  		filename:    filename,
    56  	}
    57  	return &result
    58  }
    59  
    60  // NewTestCreate builds a new replacement for create() with the given result.
    61  func NewTestCreate(result *createResult) (*createArgs, func(*createArgs) (*createResult, error)) {
    62  	var received createArgs
    63  
    64  	if result == nil {
    65  		archiveFile := io.NopCloser(bytes.NewBufferString("<archive>"))
    66  		result = NewTestCreateResult(archiveFile, 10, "<checksum>", "")
    67  	}
    68  
    69  	testCreate := func(args *createArgs) (*createResult, error) {
    70  		received = *args
    71  		return result, nil
    72  	}
    73  
    74  	return &received, testCreate
    75  }
    76  
    77  // NewTestCreate builds a new replacement for create() with the given failure.
    78  func NewTestCreateFailure(failure string) func(*createArgs) (*createResult, error) {
    79  	return func(*createArgs) (*createResult, error) {
    80  		return nil, errors.New(failure)
    81  	}
    82  }
    83  
    84  // NewTestMetaFinisher builds a new replacement for finishMetadata with
    85  // the given failure.
    86  func NewTestMetaFinisher(failure string) func(*Metadata, *createResult) error {
    87  	return func(*Metadata, *createResult) error {
    88  		if failure == "" {
    89  			return nil
    90  		}
    91  		return errors.New(failure)
    92  	}
    93  }