| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package sbmodel_test |
| |
| import ( |
| "reflect" |
| "testing" |
| "time" |
| |
| "v.io/x/sensorlog/internal/sbmodel" |
| "v.io/x/sensorlog/internal/sbmodel/keyutil" |
| ) |
| |
| type keyTest interface { |
| Run(t *testing.T, keyPrototype sbmodel.PersistentDataKey) |
| } |
| |
| // validKeyTest verifies that the key is correctly parsed and built. |
| type validKeyTest struct { |
| keyStr string |
| keyParsed sbmodel.PersistentDataKey |
| } |
| |
| func (kt *validKeyTest) Run(t *testing.T, keyPrototype sbmodel.PersistentDataKey) { |
| if err := keyPrototype.Parse(kt.keyStr); err != nil { |
| t.Errorf("key %q parse failed: %v", kt.keyStr, err) |
| return |
| } |
| if got, want := keyPrototype, kt.keyParsed; !reflect.DeepEqual(got, want) { |
| t.Errorf("incorrect key parse: got %v, want %v", got, want) |
| } |
| if got, want := kt.keyParsed.Table(), keyPrototype.Table(); got != want { |
| t.Errorf("incorrect parsed key table: got %v, want %v", got, want) |
| } |
| if got, want := kt.keyParsed.Key(), kt.keyStr; got != want { |
| t.Errorf("incorrect key build: got %s, want %s", got, want) |
| } |
| } |
| |
| // invalidKeyTest verifies that malformed key parsing fails. |
| type invalidKeyTest struct { |
| keyStr string |
| } |
| |
| func (kt *invalidKeyTest) Run(t *testing.T, keyPrototype sbmodel.PersistentDataKey) { |
| if err := keyPrototype.Parse(kt.keyStr); err == nil { |
| t.Errorf("key %q parse should have failed", kt.keyStr) |
| } |
| } |
| |
| func TestDeviceCfgKeys(t *testing.T) { |
| tests := []keyTest{ |
| &validKeyTest{ |
| keyStr: keyutil.Join("foo"), |
| keyParsed: &sbmodel.KDeviceCfg{ |
| DevId: "foo", |
| }, |
| }, |
| &invalidKeyTest{ |
| keyStr: keyutil.Join("foo", "bar"), |
| }, |
| } |
| for _, kt := range tests { |
| kt.Run(t, &sbmodel.KDeviceCfg{}) |
| } |
| } |
| |
| func TestStreamDefKeys(t *testing.T) { |
| tests := []keyTest{ |
| &validKeyTest{ |
| keyStr: keyutil.Join("pc", "cputemp"), |
| keyParsed: &sbmodel.KStreamDef{ |
| DevId: "pc", |
| StreamId: "cputemp", |
| }, |
| }, |
| &invalidKeyTest{ |
| keyStr: keyutil.Join("pc"), |
| }, |
| } |
| for _, kt := range tests { |
| kt.Run(t, &sbmodel.KStreamDef{}) |
| } |
| } |
| |
| func TestDataPointKeys(t *testing.T) { |
| tests := []keyTest{ |
| &validKeyTest{ |
| keyStr: keyutil.Join("meter", "amps", "00000022fcde41b2"), |
| keyParsed: &sbmodel.KDataPoint{ |
| DevId: "meter", |
| StreamId: "amps", |
| Timestamp: time.Unix(0, 0x22fcde41b2), |
| }, |
| }, |
| &invalidKeyTest{ |
| keyStr: keyutil.Join("meter", "amps"), |
| }, |
| &invalidKeyTest{ |
| keyStr: keyutil.Join("meter", "amps", "2.17"), |
| }, |
| } |
| for _, kt := range tests { |
| kt.Run(t, &sbmodel.KDataPoint{}) |
| } |
| } |