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  }