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 }