github.com/grafana/pyroscope@v1.18.0/pkg/pyroscope/pyroscope_test.go (about)

     1  package pyroscope
     2  
     3  import (
     4  	"bytes"
     5  	"context"
     6  	"flag"
     7  	"io"
     8  	"strings"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/require"
    12  
    13  	statusv1 "github.com/grafana/pyroscope/api/gen/proto/go/status/v1"
    14  )
    15  
    16  func TestFlagDefaults(t *testing.T) {
    17  	c := Config{}
    18  
    19  	f := flag.NewFlagSet("test", flag.PanicOnError)
    20  	c.RegisterFlags(f)
    21  
    22  	buf := bytes.Buffer{}
    23  
    24  	f.SetOutput(&buf)
    25  	f.PrintDefaults()
    26  
    27  	const delim = '\n'
    28  	// Because this is a short flag, it will be printed on the same line as the
    29  	// flag name. So we need to ignore this special case.
    30  	const ignoredHelpFlags = "-h\tPrint basic help."
    31  
    32  	// Populate map with parsed default flags.
    33  	// LabelSet is the flag and value is the default text.
    34  	gotFlags := make(map[string]string)
    35  	for {
    36  		line, err := buf.ReadString(delim)
    37  		if err == io.EOF {
    38  			break
    39  		}
    40  		require.NoError(t, err)
    41  
    42  		if strings.Contains(line, ignoredHelpFlags) {
    43  			continue
    44  		}
    45  
    46  		nextLine, err := buf.ReadString(delim)
    47  		require.NoError(t, err)
    48  
    49  		trimmedLine := strings.Trim(line, " \n")
    50  		splittedLine := strings.Split(trimmedLine, " ")[0]
    51  		gotFlags[splittedLine] = nextLine
    52  	}
    53  
    54  	flagToCheck := "-server.http-listen-port"
    55  	require.Contains(t, gotFlags, flagToCheck)
    56  	require.Equal(t, c.Server.HTTPListenPort, 4040)
    57  	require.Contains(t, gotFlags[flagToCheck], "(default 4040)")
    58  }
    59  
    60  func TestConfigDiff(t *testing.T) {
    61  	defaultCfg := Config{}
    62  	f := flag.NewFlagSet("test", flag.PanicOnError)
    63  	defaultCfg.RegisterFlags(f)
    64  	require.NoError(t, f.Parse([]string{}))
    65  	phlare, err := New(defaultCfg)
    66  	require.NoError(t, err)
    67  
    68  	t.Run("default config unchanged", func(t *testing.T) {
    69  		result, err := phlare.statusService().GetDiffConfig(context.Background(), &statusv1.GetConfigRequest{})
    70  		require.NoError(t, err)
    71  		require.Equal(t, "text/plain; charset=utf-8", result.ContentType)
    72  		require.Equal(t, "{}\n", string(result.Data))
    73  	})
    74  	t.Run("change a limit", func(t *testing.T) {
    75  		phlare.Cfg.LimitsConfig.MaxLabelNameLength = 123
    76  
    77  		result, err := phlare.statusService().GetDiffConfig(context.Background(), &statusv1.GetConfigRequest{})
    78  		require.NoError(t, err)
    79  		require.Equal(t, "text/plain; charset=utf-8", result.ContentType)
    80  		require.Equal(t, "limits:\n    max_label_name_length: 123\n", string(result.Data))
    81  	})
    82  }