github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/utils/syslog/config_test.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package syslog_test
     5  
     6  import (
     7  	"io/ioutil"
     8  	"path/filepath"
     9  
    10  	"github.com/juju/testing"
    11  	jc "github.com/juju/testing/checkers"
    12  	gc "gopkg.in/check.v1"
    13  
    14  	"github.com/juju/juju/agent"
    15  	"github.com/juju/juju/utils/syslog"
    16  	syslogtesting "github.com/juju/juju/utils/syslog/testing"
    17  )
    18  
    19  type syslogConfigSuite struct {
    20  	testing.IsolationSuite
    21  	configDir string
    22  }
    23  
    24  var _ = gc.Suite(&syslogConfigSuite{})
    25  
    26  func (s *syslogConfigSuite) SetUpTest(c *gc.C) {
    27  	s.IsolationSuite.SetUpTest(c)
    28  	s.configDir = c.MkDir()
    29  }
    30  
    31  func (s *syslogConfigSuite) assertRsyslogConfigPath(c *gc.C, slConfig *syslog.SyslogConfig) {
    32  	slConfig.ConfigDir = s.configDir
    33  	slConfig.ConfigFileName = "rsyslog.conf"
    34  	c.Assert(slConfig.ConfigFilePath(), gc.Equals, filepath.Join(s.configDir, "rsyslog.conf"))
    35  }
    36  
    37  func (s *syslogConfigSuite) assertRsyslogConfigContents(c *gc.C, slConfig *syslog.SyslogConfig, expectedConf string) {
    38  	data, err := slConfig.Render()
    39  	c.Assert(err, jc.ErrorIsNil)
    40  	if len(data) == 0 {
    41  		c.Fatal("got empty data from render")
    42  	}
    43  	d := string(data)
    44  	if d != expectedConf {
    45  		diff(c, d, expectedConf)
    46  		c.Fail()
    47  	}
    48  }
    49  
    50  func args() syslogtesting.TemplateArgs {
    51  	return syslogtesting.TemplateArgs{
    52  		MachineTag: "some-machine",
    53  		LogDir:     agent.DefaultLogDir,
    54  		DataDir:    agent.DefaultDataDir,
    55  		Port:       8888,
    56  		Server:     "server",
    57  	}
    58  }
    59  
    60  func cfg() *syslog.SyslogConfig {
    61  	return &syslog.SyslogConfig{
    62  		LogFileName:          "some-machine",
    63  		LogDir:               agent.DefaultLogDir,
    64  		JujuConfigDir:        agent.DefaultDataDir,
    65  		Port:                 8888,
    66  		StateServerAddresses: []string{"server"},
    67  	}
    68  }
    69  
    70  func (s *syslogConfigSuite) TestAccumulateConfigRender(c *gc.C) {
    71  	cfg := cfg()
    72  	syslog.NewAccumulateConfig(cfg)
    73  	s.assertRsyslogConfigContents(
    74  		c,
    75  		cfg,
    76  		syslogtesting.ExpectedAccumulateSyslogConf(c, args()),
    77  	)
    78  }
    79  
    80  func (s *syslogConfigSuite) TestAccumulateConfigWrite(c *gc.C) {
    81  	syslogConfigRenderer := cfg()
    82  	syslog.NewAccumulateConfig(syslogConfigRenderer)
    83  	syslogConfigRenderer.ConfigDir = s.configDir
    84  	syslogConfigRenderer.ConfigFileName = "rsyslog.conf"
    85  	s.assertRsyslogConfigPath(c, syslogConfigRenderer)
    86  	err := syslogConfigRenderer.Write()
    87  	c.Assert(err, jc.ErrorIsNil)
    88  	syslogConfData, err := ioutil.ReadFile(syslogConfigRenderer.ConfigFilePath())
    89  	c.Assert(err, jc.ErrorIsNil)
    90  	c.Assert(
    91  		string(syslogConfData),
    92  		gc.Equals,
    93  		syslogtesting.ExpectedAccumulateSyslogConf(c, args()),
    94  	)
    95  }
    96  
    97  func (s *syslogConfigSuite) TestAccumulateConfigRenderWithNamespace(c *gc.C) {
    98  	cfg := cfg()
    99  	cfg.Namespace = "namespace"
   100  	cfg.JujuConfigDir = cfg.JujuConfigDir + "-" + cfg.Namespace
   101  	cfg.LogDir = cfg.LogDir + "-" + cfg.Namespace
   102  
   103  	args := args()
   104  	args.Namespace = "namespace"
   105  	syslog.NewAccumulateConfig(cfg)
   106  	s.assertRsyslogConfigContents(
   107  		c,
   108  		cfg,
   109  		syslogtesting.ExpectedAccumulateSyslogConf(c, args),
   110  	)
   111  }
   112  
   113  func (s *syslogConfigSuite) TestForwardConfigRender(c *gc.C) {
   114  	cfg := cfg()
   115  	syslog.NewForwardConfig(cfg)
   116  	s.assertRsyslogConfigContents(
   117  		c,
   118  		cfg,
   119  		syslogtesting.ExpectedForwardSyslogConf(c, args()),
   120  	)
   121  }
   122  
   123  func (s *syslogConfigSuite) TestForwardConfigRenderWithNamespace(c *gc.C) {
   124  	cfg := cfg()
   125  	cfg.Namespace = "namespace"
   126  	args := args()
   127  	args.Namespace = "namespace"
   128  	syslog.NewForwardConfig(cfg)
   129  	s.assertRsyslogConfigContents(
   130  		c,
   131  		cfg,
   132  		syslogtesting.ExpectedForwardSyslogConf(c, args),
   133  	)
   134  }
   135  
   136  func (s *syslogConfigSuite) TestForwardConfigWrite(c *gc.C) {
   137  	syslogConfigRenderer := cfg()
   138  	syslogConfigRenderer.ConfigDir = s.configDir
   139  	syslogConfigRenderer.ConfigFileName = "rsyslog.conf"
   140  	syslog.NewForwardConfig(syslogConfigRenderer)
   141  	s.assertRsyslogConfigPath(c, syslogConfigRenderer)
   142  	err := syslogConfigRenderer.Write()
   143  	c.Assert(err, jc.ErrorIsNil)
   144  	syslogConfData, err := ioutil.ReadFile(syslogConfigRenderer.ConfigFilePath())
   145  	c.Assert(err, jc.ErrorIsNil)
   146  	c.Assert(
   147  		string(syslogConfData),
   148  		gc.Equals,
   149  		syslogtesting.ExpectedForwardSyslogConf(c, args()),
   150  	)
   151  }
   152  
   153  func diff(c *gc.C, got, exp string) {
   154  	expR := []rune(exp)
   155  	gotR := []rune(got)
   156  	for x := 0; x < len(expR); x++ {
   157  		if x >= len(gotR) {
   158  			c.Log("String obtained is truncated version of expected.")
   159  			c.Errorf("Expected: %s, got: %s", exp, got)
   160  			return
   161  		}
   162  		if expR[x] != gotR[x] {
   163  			c.Logf("Diff at offset %d", x)
   164  			gotDiff := string(gotR[x:min(x+50, len(gotR)-x)])
   165  			expDiff := string(expR[x:min(x+50, len(expR)-x)])
   166  			c.Logf("Diff at offset - obtained: %#v\nexpected: %#v", gotDiff, expDiff)
   167  			c.Assert(got, gc.Equals, exp)
   168  			return
   169  		}
   170  	}
   171  }
   172  
   173  func min(x, y int) int {
   174  	if x < y {
   175  		return x
   176  	}
   177  	return y
   178  }