github.com/polydawn/docket@v0.5.4-0.20140630233848-90b70fb433da/conf/parse_test.go (about)

     1  package conf
     2  
     3  import (
     4  	"path/filepath"
     5  	"testing"
     6  	"github.com/coocood/assrt"
     7  )
     8  
     9  func parser() *TomlConfigParser {
    10  	return &TomlConfigParser{}
    11  }
    12  
    13  func TestTomlParser(t *testing.T) {
    14  	//Testing library, current directory, and some config strings
    15  	assert := assrt.NewAssert(t)
    16  	cwd, _ := filepath.Abs(".")
    17  	nwd, _ := filepath.Abs("..")
    18  	f1, f2, f3, f4, f5, settings := "", "", "", "", "", "[settings]\n"
    19  
    20  
    21  	//
    22  	//	Default config
    23  	//
    24  	conf := parser().GetConfig()
    25  	assert.Equal(DefaultConfiguration, *conf)
    26  
    27  
    28  	//
    29  	//	Basic settings
    30  	//
    31  	f1 = `
    32  		# Custom DNS servers
    33  		dns = [ "8.8.8.8" ]
    34  
    35  		# What container folder to start in
    36  		folder = "/hroot"
    37  
    38  		# Interactive mode
    39  		attach = true
    40  
    41  		# Delete the container after running
    42  		purge = true
    43  	`
    44  	conf = parser().
    45  		AddConfig(settings + f1, ".").
    46  		GetConfig()
    47  	expect := DefaultConfiguration //Use default fields with a few exceptions
    48  	expect.Settings.DNS = []string{ "8.8.8.8" }
    49  	expect.Settings.Folder = "/hroot"
    50  	expect.Settings.Attach = true
    51  	expect.Settings.Purge = true
    52  	assert.Equal(expect, *conf)
    53  
    54  
    55  	//
    56  	//	Mount localizing
    57  	//
    58  	f2 = `
    59  		# Folder mounts
    60  		#	(host folder, container folder, 'ro' or 'rw' permissions)
    61  		mounts = [
    62  			[ ".../", "/boxen",    "ro"],  # The top folder
    63  			[ "./",   "/hroot",   "rw"],  # The current folder
    64  		]
    65  	`
    66  	conf = parser().
    67  		AddConfig(settings + f1 + f2, "..").
    68  		GetConfig()
    69  	expect.Settings.Mounts = [][]string{
    70  		[]string{ nwd, "/boxen",  "ro" },
    71  		[]string{ cwd, "/hroot", "rw" },
    72  	}
    73  	assert.Equal(expect, *conf)
    74  
    75  
    76  	//
    77  	//	Settings override
    78  	//
    79  	f3 = `
    80  		folder = "/home"
    81  	`
    82  	conf = parser().
    83  		AddConfig(settings + f1 + f2, "..").
    84  		AddConfig(settings + f3,      "." ).
    85  		GetConfig()
    86  	expect.Settings.Folder = "/home"
    87  	assert.Equal(expect, *conf)
    88  
    89  
    90  	//
    91  	// Image names
    92  	//
    93  	f4 = `
    94  	[image]
    95  		name     = "example.com/ubuntu/12.04"
    96  		upstream = "index.docker.IO/ubuntu/12.04"
    97  	`
    98  	conf = parser().
    99  			AddConfig(settings + f1 + f2, "..").
   100  			AddConfig(settings + f3 + f4, "." ).
   101  			GetConfig()
   102  	expect.Image.Name     = "example.com/ubuntu/12.04"
   103  	expect.Image.Upstream = "index.docker.IO/ubuntu/12.04"
   104  	assert.Equal(expect, *conf)
   105  
   106  
   107  	//
   108  	//	Target settings override
   109  	//
   110  
   111  	f5 = `
   112  	# This is where you specify run targets.
   113  	# Targets let you take different actions with the same container.
   114  	[target.bash]
   115  		command = [ "/bin/bash" ]
   116  		dns = [ "8.8.4.4" ]
   117  	`
   118  	conf = parser().
   119  		AddConfig(settings + f1 + f2,      "..").
   120  		AddConfig(settings + f3 + f4 + f5, "." ).
   121  		GetConfig()
   122  	expect.Settings.DNS = append(expect.Settings.DNS, "8.8.4.4")
   123  	expect.Settings.Command = []string{ "/bin/bash" }
   124  	assert.Equal(1, len(conf.Targets))
   125  	assert.Equal(expect.Settings, conf.Targets["bash"])
   126  }