launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/cmd/juju/synctools_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package main 5 6 import ( 7 "errors" 8 "time" 9 10 gc "launchpad.net/gocheck" 11 12 "launchpad.net/juju-core/cmd" 13 "launchpad.net/juju-core/environs" 14 "launchpad.net/juju-core/environs/configstore" 15 "launchpad.net/juju-core/environs/sync" 16 "launchpad.net/juju-core/provider/dummy" 17 coretesting "launchpad.net/juju-core/testing" 18 jc "launchpad.net/juju-core/testing/checkers" 19 "launchpad.net/juju-core/testing/testbase" 20 ) 21 22 type syncToolsSuite struct { 23 testbase.LoggingSuite 24 home *coretesting.FakeHome 25 configStore configstore.Storage 26 localStorage string 27 28 origSyncTools func(*sync.SyncContext) error 29 } 30 31 var _ = gc.Suite(&syncToolsSuite{}) 32 33 func (s *syncToolsSuite) SetUpTest(c *gc.C) { 34 s.LoggingSuite.SetUpTest(c) 35 36 // Create a target environments.yaml and make sure its environment is empty. 37 s.home = coretesting.MakeFakeHome(c, ` 38 environments: 39 test-target: 40 type: dummy 41 state-server: false 42 authorized-keys: "not-really-one" 43 `) 44 var err error 45 s.configStore, err = configstore.Default() 46 c.Assert(err, gc.IsNil) 47 s.origSyncTools = syncTools 48 } 49 50 func (s *syncToolsSuite) TearDownTest(c *gc.C) { 51 syncTools = s.origSyncTools 52 dummy.Reset() 53 s.home.Restore() 54 s.LoggingSuite.TearDownTest(c) 55 } 56 57 func (s *syncToolsSuite) Reset(c *gc.C) { 58 s.TearDownTest(c) 59 s.SetUpTest(c) 60 } 61 62 func runSyncToolsCommand(c *gc.C, args ...string) (*cmd.Context, error) { 63 return coretesting.RunCommand(c, &SyncToolsCommand{}, args) 64 } 65 66 func wait(signal chan struct{}) error { 67 select { 68 case <-signal: 69 return nil 70 case <-time.After(25 * time.Millisecond): 71 return errors.New("timeout") 72 } 73 } 74 75 var syncToolsCommandTests = []struct { 76 description string 77 args []string 78 sctx *sync.SyncContext 79 }{ 80 { 81 description: "environment as only argument", 82 args: []string{"-e", "test-target"}, 83 sctx: &sync.SyncContext{}, 84 }, 85 { 86 description: "specifying also the synchronization source", 87 args: []string{"-e", "test-target", "--source", "/foo/bar"}, 88 sctx: &sync.SyncContext{ 89 Source: "/foo/bar", 90 }, 91 }, 92 { 93 description: "synchronize all version including development", 94 args: []string{"-e", "test-target", "--all", "--dev"}, 95 sctx: &sync.SyncContext{ 96 AllVersions: true, 97 Dev: true, 98 }, 99 }, 100 { 101 description: "just make a dry run", 102 args: []string{"-e", "test-target", "--dry-run"}, 103 sctx: &sync.SyncContext{ 104 DryRun: true, 105 }, 106 }, 107 { 108 description: "specific public", 109 args: []string{"-e", "test-target", "--public"}, 110 sctx: &sync.SyncContext{ 111 Public: true, 112 }, 113 }, 114 { 115 description: "specify version", 116 args: []string{"-e", "test-target", "--version", "1.2"}, 117 sctx: &sync.SyncContext{ 118 MajorVersion: 1, 119 MinorVersion: 2, 120 }, 121 }, 122 } 123 124 func (s *syncToolsSuite) TestSyncToolsCommand(c *gc.C) { 125 for i, test := range syncToolsCommandTests { 126 c.Logf("test %d: %s", i, test.description) 127 targetEnv, err := environs.PrepareFromName("test-target", s.configStore) 128 c.Assert(err, gc.IsNil) 129 called := false 130 syncTools = func(sctx *sync.SyncContext) error { 131 c.Assert(sctx.AllVersions, gc.Equals, test.sctx.AllVersions) 132 c.Assert(sctx.MajorVersion, gc.Equals, test.sctx.MajorVersion) 133 c.Assert(sctx.MinorVersion, gc.Equals, test.sctx.MinorVersion) 134 c.Assert(sctx.DryRun, gc.Equals, test.sctx.DryRun) 135 c.Assert(sctx.Dev, gc.Equals, test.sctx.Dev) 136 c.Assert(sctx.Public, gc.Equals, test.sctx.Public) 137 c.Assert(sctx.Source, gc.Equals, test.sctx.Source) 138 c.Assert(dummy.IsSameStorage(sctx.Target, targetEnv.Storage()), jc.IsTrue) 139 called = true 140 return nil 141 } 142 ctx, err := runSyncToolsCommand(c, test.args...) 143 c.Assert(err, gc.IsNil) 144 c.Assert(ctx, gc.NotNil) 145 c.Assert(called, jc.IsTrue) 146 s.Reset(c) 147 } 148 } 149 150 func (s *syncToolsSuite) TestSyncToolsCommandTargetDirectory(c *gc.C) { 151 called := false 152 dir := c.MkDir() 153 syncTools = func(sctx *sync.SyncContext) error { 154 c.Assert(sctx.AllVersions, gc.Equals, false) 155 c.Assert(sctx.DryRun, gc.Equals, false) 156 c.Assert(sctx.Dev, gc.Equals, false) 157 c.Assert(sctx.Source, gc.Equals, "") 158 url, err := sctx.Target.URL("") 159 c.Assert(err, gc.IsNil) 160 c.Assert(url, gc.Equals, "file://"+dir) 161 called = true 162 return nil 163 } 164 ctx, err := runSyncToolsCommand(c, "-e", "test-target", "--local-dir", dir) 165 c.Assert(err, gc.IsNil) 166 c.Assert(ctx, gc.NotNil) 167 c.Assert(called, jc.IsTrue) 168 s.Reset(c) 169 }