github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/uniter/paths_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package uniter_test 5 6 import ( 7 "path/filepath" 8 9 "github.com/juju/os" 10 "github.com/juju/testing" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 "gopkg.in/juju/names.v2" 14 15 "github.com/juju/juju/worker/uniter" 16 ) 17 18 type PathsSuite struct { 19 testing.IsolationSuite 20 } 21 22 var _ = gc.Suite(&PathsSuite{}) 23 24 func relPathFunc(base string) func(parts ...string) string { 25 return func(parts ...string) string { 26 allParts := append([]string{base}, parts...) 27 return filepath.Join(allParts...) 28 } 29 } 30 31 func (s *PathsSuite) TestWindows(c *gc.C) { 32 s.PatchValue(&os.HostOS, func() os.OSType { return os.Windows }) 33 34 dataDir := c.MkDir() 35 unitTag := names.NewUnitTag("some-application/323") 36 paths := uniter.NewPaths(dataDir, unitTag) 37 38 relData := relPathFunc(dataDir) 39 relAgent := relPathFunc(relData("agents", "unit-some-application-323")) 40 c.Assert(paths, jc.DeepEquals, uniter.Paths{ 41 ToolsDir: relData("tools/unit-some-application-323"), 42 Runtime: uniter.RuntimePaths{ 43 JujuRunSocket: `\\.\pipe\unit-some-application-323-run`, 44 JujucServerSocket: `\\.\pipe\unit-some-application-323-agent`, 45 }, 46 State: uniter.StatePaths{ 47 BaseDir: relAgent(), 48 CharmDir: relAgent("charm"), 49 OperationsFile: relAgent("state", "uniter"), 50 RelationsDir: relAgent("state", "relations"), 51 BundlesDir: relAgent("state", "bundles"), 52 DeployerDir: relAgent("state", "deployer"), 53 StorageDir: relAgent("state", "storage"), 54 MetricsSpoolDir: relAgent("state", "spool", "metrics"), 55 }, 56 }) 57 } 58 59 func (s *PathsSuite) TestWorkerPathsWindows(c *gc.C) { 60 s.PatchValue(&os.HostOS, func() os.OSType { return os.Windows }) 61 62 dataDir := c.MkDir() 63 unitTag := names.NewUnitTag("some-application/323") 64 worker := "some-worker" 65 paths := uniter.NewWorkerPaths(dataDir, unitTag, worker) 66 67 relData := relPathFunc(dataDir) 68 relAgent := relPathFunc(relData("agents", "unit-some-application-323")) 69 c.Assert(paths, jc.DeepEquals, uniter.Paths{ 70 ToolsDir: relData("tools/unit-some-application-323"), 71 Runtime: uniter.RuntimePaths{ 72 JujuRunSocket: `\\.\pipe\unit-some-application-323-some-worker-run`, 73 JujucServerSocket: `\\.\pipe\unit-some-application-323-some-worker-agent`, 74 }, 75 State: uniter.StatePaths{ 76 BaseDir: relAgent(), 77 CharmDir: relAgent("charm"), 78 OperationsFile: relAgent("state", "uniter"), 79 RelationsDir: relAgent("state", "relations"), 80 BundlesDir: relAgent("state", "bundles"), 81 DeployerDir: relAgent("state", "deployer"), 82 StorageDir: relAgent("state", "storage"), 83 MetricsSpoolDir: relAgent("state", "spool", "metrics"), 84 }, 85 }) 86 } 87 88 func (s *PathsSuite) TestOther(c *gc.C) { 89 s.PatchValue(&os.HostOS, func() os.OSType { return os.Unknown }) 90 91 dataDir := c.MkDir() 92 unitTag := names.NewUnitTag("some-application/323") 93 paths := uniter.NewPaths(dataDir, unitTag) 94 95 relData := relPathFunc(dataDir) 96 relAgent := relPathFunc(relData("agents", "unit-some-application-323")) 97 c.Assert(paths, jc.DeepEquals, uniter.Paths{ 98 ToolsDir: relData("tools/unit-some-application-323"), 99 Runtime: uniter.RuntimePaths{ 100 JujuRunSocket: relAgent("run.socket"), 101 JujucServerSocket: "@" + relAgent("agent.socket"), 102 }, 103 State: uniter.StatePaths{ 104 BaseDir: relAgent(), 105 CharmDir: relAgent("charm"), 106 OperationsFile: relAgent("state", "uniter"), 107 RelationsDir: relAgent("state", "relations"), 108 BundlesDir: relAgent("state", "bundles"), 109 DeployerDir: relAgent("state", "deployer"), 110 StorageDir: relAgent("state", "storage"), 111 MetricsSpoolDir: relAgent("state", "spool", "metrics"), 112 }, 113 }) 114 } 115 116 func (s *PathsSuite) TestWorkerPaths(c *gc.C) { 117 s.PatchValue(&os.HostOS, func() os.OSType { return os.Unknown }) 118 119 dataDir := c.MkDir() 120 unitTag := names.NewUnitTag("some-application/323") 121 worker := "worker-id" 122 paths := uniter.NewWorkerPaths(dataDir, unitTag, worker) 123 124 relData := relPathFunc(dataDir) 125 relAgent := relPathFunc(relData("agents", "unit-some-application-323")) 126 c.Assert(paths, jc.DeepEquals, uniter.Paths{ 127 ToolsDir: relData("tools/unit-some-application-323"), 128 Runtime: uniter.RuntimePaths{ 129 JujuRunSocket: relAgent(worker + "-run.socket"), 130 JujucServerSocket: "@" + relAgent(worker+"-agent.socket"), 131 }, 132 State: uniter.StatePaths{ 133 BaseDir: relAgent(), 134 CharmDir: relAgent("charm"), 135 OperationsFile: relAgent("state", "uniter"), 136 RelationsDir: relAgent("state", "relations"), 137 BundlesDir: relAgent("state", "bundles"), 138 DeployerDir: relAgent("state", "deployer"), 139 StorageDir: relAgent("state", "storage"), 140 MetricsSpoolDir: relAgent("state", "spool", "metrics"), 141 }, 142 }) 143 } 144 145 func (s *PathsSuite) TestContextInterface(c *gc.C) { 146 paths := uniter.Paths{ 147 ToolsDir: "/path/to/tools", 148 Runtime: uniter.RuntimePaths{ 149 JujucServerSocket: "/path/to/socket", 150 }, 151 State: uniter.StatePaths{ 152 CharmDir: "/path/to/charm", 153 MetricsSpoolDir: "/path/to/spool/metrics", 154 }, 155 } 156 c.Assert(paths.GetToolsDir(), gc.Equals, "/path/to/tools") 157 c.Assert(paths.GetCharmDir(), gc.Equals, "/path/to/charm") 158 c.Assert(paths.GetJujucSocket(), gc.Equals, "/path/to/socket") 159 c.Assert(paths.GetMetricsSpoolDir(), gc.Equals, "/path/to/spool/metrics") 160 }