github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/resource/context/internal/context_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package internal_test 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/testing" 9 jc "github.com/juju/testing/checkers" 10 "github.com/juju/testing/filetesting" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/resource" 14 "github.com/juju/juju/resource/context/internal" 15 ) 16 17 var _ = gc.Suite(&ContextSuite{}) 18 19 type ContextSuite struct { 20 testing.IsolationSuite 21 22 stub *internalStub 23 } 24 25 func (s *ContextSuite) SetUpTest(c *gc.C) { 26 s.IsolationSuite.SetUpTest(c) 27 28 s.stub = newInternalStub() 29 } 30 31 func (s *ContextSuite) TestContextDownloadOutOfDate(c *gc.C) { 32 info, reader := newResource(c, s.stub.Stub, "spam", "some data") 33 content := internal.Content{ 34 Data: reader, 35 Size: info.Size, 36 Fingerprint: info.Fingerprint, 37 } 38 stub := &stubContext{ 39 internalStub: s.stub, 40 StubCloser: &filetesting.StubCloser{Stub: s.stub.Stub}, 41 } 42 stub.ReturnNewContextDirectorySpec = stub 43 stub.ReturnOpenResource = stub 44 stub.ReturnResolve = "/var/lib/juju/agents/unit-spam-1/resources/spam/eggs.tgz" 45 stub.ReturnInfo = info 46 stub.ReturnContent = content 47 deps := stub 48 49 path, err := internal.ContextDownload(deps) 50 c.Assert(err, jc.ErrorIsNil) 51 52 s.stub.CheckCallNames(c, 53 "NewContextDirectorySpec", 54 "OpenResource", 55 "Info", 56 "Resolve", 57 "Content", 58 "IsUpToDate", 59 "Download", 60 "CloseAndLog", 61 ) 62 c.Check(path, gc.Equals, "/var/lib/juju/agents/unit-spam-1/resources/spam/eggs.tgz") 63 } 64 65 func (s *ContextSuite) TestContextDownloadUpToDate(c *gc.C) { 66 info, reader := newResource(c, s.stub.Stub, "spam", "some data") 67 content := internal.Content{ 68 Data: reader, 69 Size: info.Size, 70 Fingerprint: info.Fingerprint, 71 } 72 stub := &stubContext{ 73 internalStub: s.stub, 74 StubCloser: &filetesting.StubCloser{Stub: s.stub.Stub}, 75 } 76 stub.ReturnNewContextDirectorySpec = stub 77 stub.ReturnOpenResource = stub 78 stub.ReturnResolve = "/var/lib/juju/agents/unit-spam-1/resources/spam/eggs.tgz" 79 stub.ReturnInfo = info 80 stub.ReturnContent = content 81 stub.ReturnIsUpToDate = true 82 deps := stub 83 84 path, err := internal.ContextDownload(deps) 85 c.Assert(err, jc.ErrorIsNil) 86 87 s.stub.CheckCallNames(c, 88 "NewContextDirectorySpec", 89 "OpenResource", 90 "Info", 91 "Resolve", 92 "Content", 93 "IsUpToDate", 94 "CloseAndLog", 95 ) 96 c.Check(path, gc.Equals, "/var/lib/juju/agents/unit-spam-1/resources/spam/eggs.tgz") 97 } 98 99 type stubContext struct { 100 *internalStub 101 *filetesting.StubCloser 102 103 ReturnResolve string 104 ReturnInfo resource.Resource 105 ReturnContent internal.Content 106 ReturnInitialize internal.DownloadDirectory 107 ReturnIsUpToDate bool 108 } 109 110 func (s *stubContext) Resolve(path ...string) string { 111 s.AddCall("Resolve", path) 112 s.NextErr() // Pop one off. 113 114 return s.ReturnResolve 115 } 116 117 func (s *stubContext) Info() resource.Resource { 118 s.AddCall("Info") 119 s.NextErr() // Pop one off. 120 121 return s.ReturnInfo 122 } 123 124 func (s *stubContext) Content() internal.Content { 125 s.AddCall("Content") 126 s.NextErr() // Pop one off. 127 128 return s.ReturnContent 129 } 130 131 func (s *stubContext) Initialize() (internal.DownloadDirectory, error) { 132 s.AddCall("Initialize") 133 if err := s.NextErr(); err != nil { 134 return nil, errors.Trace(err) 135 } 136 137 return s.ReturnInitialize, nil 138 } 139 140 func (s *stubContext) IsUpToDate(content internal.Content) (bool, error) { 141 s.AddCall("IsUpToDate", content) 142 if err := s.NextErr(); err != nil { 143 return false, errors.Trace(err) 144 } 145 146 return s.ReturnIsUpToDate, nil 147 }