github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/cmd/juju/backups/package_test.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package backups_test
     5  
     6  import (
     7  	"bytes"
     8  	"io"
     9  	"io/ioutil"
    10  	"os"
    11  	"testing"
    12  
    13  	"github.com/juju/cmd"
    14  	"github.com/juju/errors"
    15  	jc "github.com/juju/testing/checkers"
    16  	gc "gopkg.in/check.v1"
    17  
    18  	apibackups "github.com/juju/juju/api/backups"
    19  	"github.com/juju/juju/apiserver/params"
    20  	"github.com/juju/juju/cmd/juju/backups"
    21  	jujutesting "github.com/juju/juju/testing"
    22  )
    23  
    24  // MetaResultString is the expected output of running dumpMetadata() on
    25  // s.metaresult.
    26  var MetaResultString = `
    27  backup ID:       "spam"
    28  checksum:        ""
    29  checksum format: ""
    30  size (B):        0
    31  stored:          0001-01-01 00:00:00 +0000 UTC
    32  started:         0001-01-01 00:00:00 +0000 UTC
    33  finished:        0001-01-01 00:00:00 +0000 UTC
    34  notes:           ""
    35  environment ID:  ""
    36  machine ID:      ""
    37  created on host: ""
    38  juju version:    0.0.0
    39  `[1:]
    40  
    41  func TestPackage(t *testing.T) {
    42  	gc.TestingT(t)
    43  }
    44  
    45  type BaseBackupsSuite struct {
    46  	jujutesting.FakeJujuHomeSuite
    47  
    48  	command    *backups.Command
    49  	metaresult *params.BackupsMetadataResult
    50  	data       string
    51  
    52  	filename string
    53  }
    54  
    55  func (s *BaseBackupsSuite) SetUpTest(c *gc.C) {
    56  	s.FakeJujuHomeSuite.SetUpTest(c)
    57  
    58  	s.command = backups.NewCommand().(*backups.Command)
    59  	s.metaresult = &params.BackupsMetadataResult{
    60  		ID: "spam",
    61  	}
    62  	s.data = "<compressed archive data>"
    63  }
    64  
    65  func (s *BaseBackupsSuite) TearDownTest(c *gc.C) {
    66  	if s.filename != "" {
    67  		err := os.Remove(s.filename)
    68  		if !os.IsNotExist(err) {
    69  			c.Check(err, jc.ErrorIsNil)
    70  		}
    71  	}
    72  
    73  	s.FakeJujuHomeSuite.TearDownTest(c)
    74  }
    75  
    76  func (s *BaseBackupsSuite) patchAPIClient(client backups.APIClient) {
    77  	s.PatchValue(backups.NewAPIClient,
    78  		func(c *backups.CommandBase) (backups.APIClient, error) {
    79  			return client, nil
    80  		},
    81  	)
    82  }
    83  
    84  func (s *BaseBackupsSuite) setSuccess() *fakeAPIClient {
    85  	client := &fakeAPIClient{metaresult: s.metaresult}
    86  	s.patchAPIClient(client)
    87  	return client
    88  }
    89  
    90  func (s *BaseBackupsSuite) setFailure(failure string) *fakeAPIClient {
    91  	client := &fakeAPIClient{err: errors.New(failure)}
    92  	s.patchAPIClient(client)
    93  	return client
    94  }
    95  
    96  func (s *BaseBackupsSuite) setDownload() *fakeAPIClient {
    97  	client := s.setSuccess()
    98  	client.archive = ioutil.NopCloser(bytes.NewBufferString(s.data))
    99  	return client
   100  }
   101  
   102  func (s *BaseBackupsSuite) checkArchive(c *gc.C) {
   103  	c.Assert(s.filename, gc.Not(gc.Equals), "")
   104  	archive, err := os.Open(s.filename)
   105  	c.Assert(err, jc.ErrorIsNil)
   106  	defer archive.Close()
   107  
   108  	data, err := ioutil.ReadAll(archive)
   109  	c.Check(string(data), gc.Equals, s.data)
   110  }
   111  
   112  func (s *BaseBackupsSuite) checkStd(c *gc.C, ctx *cmd.Context, out, err string) {
   113  	c.Check(ctx.Stdin.(*bytes.Buffer).Len(), gc.Equals, 0)
   114  	jujutesting.CheckString(c, ctx.Stdout.(*bytes.Buffer).String(), out)
   115  	jujutesting.CheckString(c, ctx.Stderr.(*bytes.Buffer).String(), err)
   116  }
   117  
   118  type fakeAPIClient struct {
   119  	metaresult *params.BackupsMetadataResult
   120  	archive    io.ReadCloser
   121  	err        error
   122  
   123  	calls []string
   124  	args  []string
   125  	idArg string
   126  	notes string
   127  }
   128  
   129  func (f *fakeAPIClient) Check(c *gc.C, id, notes string, calls ...string) {
   130  	c.Check(f.calls, jc.DeepEquals, calls)
   131  	c.Check(f.idArg, gc.Equals, id)
   132  	c.Check(f.notes, gc.Equals, notes)
   133  }
   134  
   135  func (c *fakeAPIClient) Create(notes string) (*params.BackupsMetadataResult, error) {
   136  	c.calls = append(c.calls, "Create")
   137  	c.args = append(c.args, "notes")
   138  	c.notes = notes
   139  	if c.err != nil {
   140  		return nil, c.err
   141  	}
   142  	return c.metaresult, nil
   143  }
   144  
   145  func (c *fakeAPIClient) Info(id string) (*params.BackupsMetadataResult, error) {
   146  	c.calls = append(c.calls, "Info")
   147  	c.args = append(c.args, "id")
   148  	c.idArg = id
   149  	if c.err != nil {
   150  		return nil, c.err
   151  	}
   152  	return c.metaresult, nil
   153  }
   154  
   155  func (c *fakeAPIClient) List() (*params.BackupsListResult, error) {
   156  	c.calls = append(c.calls, "List")
   157  	if c.err != nil {
   158  		return nil, c.err
   159  	}
   160  	var result params.BackupsListResult
   161  	result.List = []params.BackupsMetadataResult{*c.metaresult}
   162  	return &result, nil
   163  }
   164  
   165  func (c *fakeAPIClient) Download(id string) (io.ReadCloser, error) {
   166  	c.calls = append(c.calls, "Download")
   167  	c.args = append(c.args, "id")
   168  	c.idArg = id
   169  	if c.err != nil {
   170  		return nil, c.err
   171  	}
   172  	return c.archive, nil
   173  }
   174  
   175  func (c *fakeAPIClient) Upload(ar io.Reader, meta params.BackupsMetadataResult) (string, error) {
   176  	c.args = append(c.args, "ar", "meta")
   177  	if c.err != nil {
   178  		return "", c.err
   179  	}
   180  	return c.metaresult.ID, nil
   181  }
   182  
   183  func (c *fakeAPIClient) Remove(id string) error {
   184  	c.calls = append(c.calls, "Remove")
   185  	c.args = append(c.args, "id")
   186  	c.idArg = id
   187  	if c.err != nil {
   188  		return c.err
   189  	}
   190  	return nil
   191  }
   192  
   193  func (c *fakeAPIClient) Close() error {
   194  	return nil
   195  }
   196  
   197  func (c *fakeAPIClient) RestoreReader(io.Reader, *params.BackupsMetadataResult, apibackups.ClientConnection) error {
   198  	return nil
   199  }
   200  
   201  func (c *fakeAPIClient) Restore(string, apibackups.ClientConnection) error {
   202  	return nil
   203  }