// Copyright (c) 2015 Couchbase, Inc. // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the // License. You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an "AS // IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either // express or implied. See the License for the specific language // governing permissions and limitations under the License. package metrics import ( "bytes" "encoding/json" "fmt" "testing" "github.com/blevesearch/bleve/index/store/gtreap" ) func TestMetricsStore(t *testing.T) { s, err := New(nil, map[string]interface{}{}) if err == nil { t.Errorf("expected err when bad config") } s, err = New(nil, map[string]interface{}{ "kvStoreName_actual": "some-invalid-kvstore-name", }) if err == nil { t.Errorf("expected err when unknown kvStoreName_actual") } s, err = New(nil, map[string]interface{}{ "kvStoreName_actual": gtreap.Name, }) if err != nil { t.Fatal(err) } b := bytes.NewBuffer(nil) s.(*Store).WriteJSON(b) if b.Len() <= 0 { t.Errorf("expected some output from WriteJSON") } var m map[string]interface{} err = json.Unmarshal(b.Bytes(), &m) if err != nil { t.Errorf("expected WriteJSON to be unmarshallable") } if len(m) <= 0 { t.Errorf("expected some entries") } b = bytes.NewBuffer(nil) s.(*Store).WriteCSVHeader(b) if b.Len() <= 0 { t.Errorf("expected some output from WriteCSVHeader") } b = bytes.NewBuffer(nil) s.(*Store).WriteCSV(b) if b.Len() <= 0 { t.Errorf("expected some output from WriteCSV") } } func TestErrors(t *testing.T) { s, err := New(nil, map[string]interface{}{ "kvStoreName_actual": gtreap.Name, }) if err != nil { t.Fatal(err) } x, ok := s.(*Store) if !ok { t.Errorf("expecting a Store") } x.AddError("foo", fmt.Errorf("Foo"), []byte("fooKey")) x.AddError("bar", fmt.Errorf("Bar"), nil) x.AddError("baz", fmt.Errorf("Baz"), []byte("bazKey")) b := bytes.NewBuffer(nil) x.WriteJSON(b) var m map[string]interface{} err = json.Unmarshal(b.Bytes(), &m) if err != nil { t.Errorf("expected unmarshallable writeJSON, err: %v, b: %s", err, b.Bytes()) } errorsi, ok := m["Errors"] if !ok || errorsi == nil { t.Errorf("expected errorsi") } errors, ok := errorsi.([]interface{}) if !ok || errors == nil { t.Errorf("expected errorsi is array") } if len(errors) != 3 { t.Errorf("expected errors len 3") } e := errors[0].(map[string]interface{}) if e["Op"].(string) != "foo" || e["Err"].(string) != "Foo" || len(e["Time"].(string)) < 10 || e["Key"].(string) != "fooKey" { t.Errorf("expected foo, %#v", e) } e = errors[1].(map[string]interface{}) if e["Op"].(string) != "bar" || e["Err"].(string) != "Bar" || len(e["Time"].(string)) < 10 || e["Key"].(string) != "" { t.Errorf("expected bar, %#v", e) } e = errors[2].(map[string]interface{}) if e["Op"].(string) != "baz" || e["Err"].(string) != "Baz" || len(e["Time"].(string)) < 10 || e["Key"].(string) != "bazKey" { t.Errorf("expected baz, %#v", e) } }