github.com/beanworks/dcm@v0.0.0-20230726194615-49d2d0417e04/src/config_test.go (about)

     1  package main
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  var yamlFixtureGoodVersion1 string = `
    13  foo:
    14    bar:
    15      baz: qux
    16  another: value
    17  yet:
    18    another:
    19      - value1
    20      - value2
    21      - value3
    22  `
    23  
    24  var yamlFixtureGoodVersion2 string = `
    25  version: "2"
    26  services:
    27    foo:
    28      bar:
    29        baz: qux
    30    another: value
    31    yet:
    32      another:
    33        - value1
    34        - value2
    35        - value3
    36  `
    37  
    38  var yamlFixtureBad string = `
    39  foo: bar
    40      - baz: qux
    41  `
    42  
    43  func TestCreateNewConfig(t *testing.T) {
    44  	os.Unsetenv("DCM_DIR")
    45  	os.Unsetenv("DCM_PROJECT")
    46  
    47  	c := NewConfig()
    48  	wd, _ := os.Getwd()
    49  
    50  	assert.Equal(t, &Config{
    51  		Dir:     wd,
    52  		Project: "dcm",
    53  		File:    wd + "/dcm.yml",
    54  		Srv:     wd + "/srv/dcm",
    55  	}, c)
    56  }
    57  
    58  func TestCreateNewConfigWithEnvVars(t *testing.T) {
    59  	os.Setenv("DCM_DIR", "/test/dcm/dir")
    60  	os.Setenv("DCM_PROJECT", "testproj")
    61  
    62  	c := NewConfig()
    63  
    64  	assert.Equal(t, &Config{
    65  		Dir:     "/test/dcm/dir",
    66  		Project: "testproj",
    67  		File:    "/test/dcm/dir/testproj.yml",
    68  		Srv:     "/test/dcm/dir/srv/testproj",
    69  	}, c)
    70  }
    71  
    72  func helperCreateTestFile(t *testing.T, prefix, fixture string) string {
    73  	tf, err := ioutil.TempFile("", prefix)
    74  	require.Nil(t, err)
    75  
    76  	_, err = tf.WriteString(fixture)
    77  	require.Nil(t, err)
    78  
    79  	err = tf.Close()
    80  	require.Nil(t, err)
    81  
    82  	return tf.Name()
    83  }
    84  
    85  func TestCreateNewConfigFile(t *testing.T) {
    86  	var (
    87  		file   string
    88  		err    error
    89  		config *Config
    90  	)
    91  
    92  	// Negative case: Bad YAML file name
    93  	os.Setenv("DCM_CONFIG_FILE", "bad_file_name.yml")
    94  	_, err = NewConfigFile()
    95  	assert.Error(t, err)
    96  
    97  	// Negative case: Bad YAML config formatting
    98  	file = helperCreateTestFile(t, "bad_yaml", yamlFixtureBad)
    99  	defer os.Remove(file)
   100  	os.Setenv("DCM_CONFIG_FILE", file)
   101  	_, err = NewConfigFile()
   102  	assert.Error(t, err)
   103  
   104  	// Positive case: success
   105  	expectedYaml := yamlConfig{
   106  		"foo": yamlConfig{
   107  			"bar": yamlConfig{
   108  				"baz": "qux",
   109  			},
   110  		},
   111  		"another": "value",
   112  		"yet": yamlConfig{
   113  			"another": []interface{}{
   114  				"value1",
   115  				"value2",
   116  				"value3",
   117  			},
   118  		},
   119  	}
   120  
   121  	file = helperCreateTestFile(t, "good_yaml_ver1", yamlFixtureGoodVersion1)
   122  	defer os.Remove(file)
   123  	os.Setenv("DCM_CONFIG_FILE", file)
   124  	config, err = NewConfigFile()
   125  	assert.NoError(t, err)
   126  	assert.Equal(t, expectedYaml, config.Config)
   127  
   128  	file = helperCreateTestFile(t, "good_yaml_ver2", yamlFixtureGoodVersion2)
   129  	defer os.Remove(file)
   130  	os.Setenv("DCM_CONFIG_FILE", file)
   131  	config, err = NewConfigFile()
   132  	assert.NoError(t, err)
   133  	assert.Equal(t, expectedYaml, config.Config)
   134  }
   135  
   136  func TestIsDockerComposeVersion2(t *testing.T) {
   137  	assert.False(t, isDockerComposeVersion2(yamlConfig{
   138  		"foo": "bar",
   139  	}))
   140  
   141  	assert.False(t, isDockerComposeVersion2(yamlConfig{
   142  		"version": "2",
   143  		"foo":     "bar",
   144  	}))
   145  
   146  	assert.False(t, isDockerComposeVersion2(yamlConfig{
   147  		"services": yamlConfig{
   148  			"foo": "bar",
   149  		},
   150  	}))
   151  
   152  	assert.True(t, isDockerComposeVersion2(yamlConfig{
   153  		"version": "2",
   154  		"services": yamlConfig{
   155  			"foo": "bar",
   156  		},
   157  	}))
   158  }