github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/util/cfg/precedence_test.go (about)

     1  package cfg
     2  
     3  import (
     4  	"flag"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  // This file checks precedence rules are correctly working
    13  // The default precedence recommended by this package is the following:
    14  // flag defaults < yaml < user-set flags
    15  //
    16  // The following tests make sure that this is indeed correct
    17  
    18  const y = `
    19  verbose: true
    20  tls:
    21    cert: YAML
    22  server:
    23    port: 1234
    24  `
    25  
    26  func TestYAMLOverDefaults(t *testing.T) {
    27  	data := Data{}
    28  	fs := flag.NewFlagSet(t.Name(), flag.PanicOnError)
    29  	err := Unmarshal(&data,
    30  		Defaults(fs),
    31  		dYAML([]byte(y)),
    32  	)
    33  
    34  	require.NoError(t, err)
    35  	assert.Equal(t, Data{
    36  		Verbose: true, // yaml
    37  		Server: Server{
    38  			Port:    1234,             // yaml
    39  			Timeout: 60 * time.Second, // default
    40  		},
    41  		TLS: TLS{
    42  			Cert: "YAML",       // yaml
    43  			Key:  "DEFAULTKEY", // default
    44  		},
    45  	}, data)
    46  }
    47  
    48  func TestFlagOverYAML(t *testing.T) {
    49  	data := Data{}
    50  	fs := flag.NewFlagSet(t.Name(), flag.PanicOnError)
    51  
    52  	err := Unmarshal(&data,
    53  		Defaults(fs),
    54  		dYAML([]byte(y)),
    55  		dFlags(fs, []string{"-verbose=false", "-tls.cert=CLI"}),
    56  	)
    57  
    58  	require.NoError(t, err)
    59  	assert.Equal(t, Data{
    60  		Verbose: false, // flag
    61  		Server: Server{
    62  			Port:    1234,             // yaml
    63  			Timeout: 60 * time.Second, // default
    64  		},
    65  		TLS: TLS{
    66  			Cert: "CLI",        // flag
    67  			Key:  "DEFAULTKEY", // default
    68  		},
    69  	}, data)
    70  }