diff --git a/prometheus/desc.go b/prometheus/desc.go index 68ffe3c24..ad347113c 100644 --- a/prometheus/desc.go +++ b/prometheus/desc.go @@ -189,12 +189,15 @@ func (d *Desc) String() string { fmt.Sprintf("%s=%q", lp.GetName(), lp.GetValue()), ) } - vlStrings := make([]string, 0, len(d.variableLabels.names)) - for _, vl := range d.variableLabels.names { - if fn, ok := d.variableLabels.labelConstraints[vl]; ok && fn != nil { - vlStrings = append(vlStrings, fmt.Sprintf("c(%s)", vl)) - } else { - vlStrings = append(vlStrings, vl) + vlStrings := []string{} + if d.variableLabels != nil { + vlStrings = make([]string, 0, len(d.variableLabels.names)) + for _, vl := range d.variableLabels.names { + if fn, ok := d.variableLabels.labelConstraints[vl]; ok && fn != nil { + vlStrings = append(vlStrings, fmt.Sprintf("c(%s)", vl)) + } else { + vlStrings = append(vlStrings, vl) + } } } return fmt.Sprintf( diff --git a/prometheus/desc_test.go b/prometheus/desc_test.go index 5f854db0b..1e5333fab 100644 --- a/prometheus/desc_test.go +++ b/prometheus/desc_test.go @@ -28,3 +28,37 @@ func TestNewDescInvalidLabelValues(t *testing.T) { t.Errorf("NewDesc: expected error because: %s", desc.err) } } + +func TestNewDescNilLabelValues(t *testing.T) { + desc := NewDesc( + "sample_label", + "sample label", + nil, + nil, + ) + if desc.err != nil { + t.Errorf("NewDesc: unexpected error: %s", desc.err) + } +} + +func TestNewDescWithNilLabelValues_String(t *testing.T) { + desc := NewDesc( + "sample_label", + "sample label", + nil, + nil, + ) + if desc.String() != `Desc{fqName: "sample_label", help: "sample label", constLabels: {}, variableLabels: {}}` { + t.Errorf("String: unexpected output: %s", desc.String()) + } +} + + +func TestNewInvalidDesc_String(t *testing.T) { + desc := NewInvalidDesc( + nil, + ) + if desc.String() != `Desc{fqName: "", help: "", constLabels: {}, variableLabels: {}}` { + t.Errorf("String: unexpected output: %s", desc.String()) + } +}