| // Copyright 2020 The Prometheus Authors |
| // 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 promlog |
| |
| import ( |
| "fmt" |
| "testing" |
| |
| "github.com/go-kit/log/level" |
| "gopkg.in/yaml.v2" |
| ) |
| |
| // Make sure creating and using a logger with an empty configuration doesn't |
| // result in a panic. |
| func TestDefaultConfig(t *testing.T) { |
| logger := New(&Config{}) |
| |
| if err := logger.Log("hello", "world"); err != nil { |
| t.Fatal(err) |
| } |
| } |
| |
| func TestUnmarshallLevel(t *testing.T) { |
| l := &AllowedLevel{} |
| err := yaml.Unmarshal([]byte(`debug`), l) |
| if err != nil { |
| t.Error(err) |
| } |
| if l.s != "debug" { |
| t.Errorf("expected %s, got %s", "debug", l.s) |
| } |
| } |
| |
| func TestUnmarshallEmptyLevel(t *testing.T) { |
| l := &AllowedLevel{} |
| err := yaml.Unmarshal([]byte(``), l) |
| if err != nil { |
| t.Error(err) |
| } |
| if l.s != "" { |
| t.Errorf("expected empty level, got %s", l.s) |
| } |
| } |
| |
| func TestUnmarshallBadLevel(t *testing.T) { |
| l := &AllowedLevel{} |
| err := yaml.Unmarshal([]byte(`debugg`), l) |
| if err == nil { |
| t.Error("expected error") |
| } |
| expErr := `unrecognized log level "debugg"` |
| if err.Error() != expErr { |
| t.Errorf("expected error %s, got %s", expErr, err.Error()) |
| } |
| if l.s != "" { |
| t.Errorf("expected empty level, got %s", l.s) |
| } |
| } |
| |
| type recordKeyvalLogger struct { |
| count int |
| } |
| |
| func (r *recordKeyvalLogger) Log(keyvals ...interface{}) error { |
| for _, v := range keyvals { |
| if fmt.Sprintf("%v", v) == "Log level changed" { |
| return nil |
| } |
| } |
| r.count++ |
| return nil |
| } |
| |
| func TestDynamic(t *testing.T) { |
| logger := NewDynamic(&Config{}) |
| |
| debugLevel := &AllowedLevel{} |
| if err := debugLevel.Set("debug"); err != nil { |
| t.Fatal(err) |
| } |
| infoLevel := &AllowedLevel{} |
| if err := infoLevel.Set("info"); err != nil { |
| t.Fatal(err) |
| } |
| |
| recorder := &recordKeyvalLogger{} |
| logger.base = recorder |
| logger.SetLevel(debugLevel) |
| if err := level.Debug(logger).Log("hello", "world"); err != nil { |
| t.Fatal(err) |
| } |
| if recorder.count != 1 { |
| t.Fatal("log not found") |
| } |
| |
| recorder.count = 0 |
| logger.SetLevel(infoLevel) |
| if err := level.Debug(logger).Log("hello", "world"); err != nil { |
| t.Fatal(err) |
| } |
| if recorder.count != 0 { |
| t.Fatal("log found") |
| } |
| if err := level.Info(logger).Log("hello", "world"); err != nil { |
| t.Fatal(err) |
| } |
| if recorder.count != 1 { |
| t.Fatal("log not found") |
| } |
| if err := level.Debug(logger).Log("hello", "world"); err != nil { |
| t.Fatal(err) |
| } |
| if recorder.count != 1 { |
| t.Fatal("extra log found") |
| } |
| } |