func parseValues(b []byte) ([]api.Value, error) { buffer := bytes.NewBuffer(b) var n uint16 if err := binary.Read(buffer, binary.BigEndian, &n); err != nil { return nil, err } if int(n*9) != buffer.Len() { return nil, ErrInvalid } types := make([]byte, n) values := make([]api.Value, n) if _, err := buffer.Read(types); err != nil { return nil, err } for i, typ := range types { switch typ { case dsTypeGauge: var v float64 if err := binary.Read(buffer, binary.LittleEndian, &v); err != nil { return nil, err } values[i] = api.Gauge(v) case dsTypeDerive: var v int64 if err := binary.Read(buffer, binary.BigEndian, &v); err != nil { return nil, err } values[i] = api.Derive(v) case dsTypeCounter: var v uint64 if err := binary.Read(buffer, binary.BigEndian, &v); err != nil { return nil, err } values[i] = api.Counter(v) default: return nil, ErrInvalid } } return values, nil }
func TestNewName(t *testing.T) { cases := []struct { vl api.ValueList index int want string }{ {api.ValueList{ Identifier: api.Identifier{ Plugin: "cpu", Type: "cpu", }, DSNames: []string{"value"}, Values: []api.Value{api.Derive(0)}, }, 0, "collectd_cpu"}, {api.ValueList{ Identifier: api.Identifier{ Plugin: "dns", Type: "dns_qtype", }, DSNames: []string{"value"}, Values: []api.Value{api.Derive(0)}, }, 0, "collectd_dns_dns_qtype"}, {api.ValueList{ Identifier: api.Identifier{ Plugin: "df", Type: "df", }, DSNames: []string{"used", "free"}, Values: []api.Value{api.Gauge(0), api.Gauge(1)}, }, 0, "collectd_df_used"}, {api.ValueList{ Identifier: api.Identifier{ Plugin: "df", Type: "df", }, DSNames: []string{"used", "free"}, Values: []api.Value{api.Gauge(0), api.Gauge(1)}, }, 1, "collectd_df_free"}, {api.ValueList{ Identifier: api.Identifier{ Plugin: "cpu", Type: "percent", }, DSNames: []string{"value"}, Values: []api.Value{api.Gauge(0)}, }, 0, "collectd_cpu_percent"}, {api.ValueList{ Identifier: api.Identifier{ Plugin: "interface", Type: "if_octets", }, DSNames: []string{"rx", "tx"}, Values: []api.Value{api.Counter(0), api.Counter(1)}, }, 0, "collectd_interface_if_octets_rx_total"}, {api.ValueList{ Identifier: api.Identifier{ Plugin: "interface", Type: "if_octets", }, DSNames: []string{"rx", "tx"}, Values: []api.Value{api.Counter(0), api.Counter(1)}, }, 1, "collectd_interface_if_octets_tx_total"}, } for _, c := range cases { got := newName(c.vl, c.index) if got != c.want { t.Errorf("newName(%v): got %q, want %q", c.vl, got, c.want) } } }