Hex Artifact Content
Not logged in

Artifact a0c2bf201e3f0fd4d498854e33a9bc66091a1941:


0000: 70 61 63 6b 61 67 65 20 6c 6f 67 72 75 73 0a 0a  package logrus..
0010: 69 6d 70 6f 72 74 20 28 0a 09 22 74 65 73 74 69  import (.."testi
0020: 6e 67 22 0a 0a 09 22 67 69 74 68 75 62 2e 63 6f  ng"..."github.co
0030: 6d 2f 73 74 72 65 74 63 68 72 2f 74 65 73 74 69  m/stretchr/testi
0040: 66 79 2f 61 73 73 65 72 74 22 0a 29 0a 0a 74 79  fy/assert".)..ty
0050: 70 65 20 54 65 73 74 48 6f 6f 6b 20 73 74 72 75  pe TestHook stru
0060: 63 74 20 7b 0a 09 46 69 72 65 64 20 62 6f 6f 6c  ct {..Fired bool
0070: 0a 7d 0a 0a 66 75 6e 63 20 28 68 6f 6f 6b 20 2a  .}..func (hook *
0080: 54 65 73 74 48 6f 6f 6b 29 20 46 69 72 65 28 65  TestHook) Fire(e
0090: 6e 74 72 79 20 2a 45 6e 74 72 79 29 20 65 72 72  ntry *Entry) err
00a0: 6f 72 20 7b 0a 09 68 6f 6f 6b 2e 46 69 72 65 64  or {..hook.Fired
00b0: 20 3d 20 74 72 75 65 0a 09 72 65 74 75 72 6e 20   = true..return 
00c0: 6e 69 6c 0a 7d 0a 0a 66 75 6e 63 20 28 68 6f 6f  nil.}..func (hoo
00d0: 6b 20 2a 54 65 73 74 48 6f 6f 6b 29 20 4c 65 76  k *TestHook) Lev
00e0: 65 6c 73 28 29 20 5b 5d 4c 65 76 65 6c 20 7b 0a  els() []Level {.
00f0: 09 72 65 74 75 72 6e 20 5b 5d 4c 65 76 65 6c 7b  .return []Level{
0100: 0a 09 09 44 65 62 75 67 4c 65 76 65 6c 2c 0a 09  ...DebugLevel,..
0110: 09 49 6e 66 6f 4c 65 76 65 6c 2c 0a 09 09 57 61  .InfoLevel,...Wa
0120: 72 6e 4c 65 76 65 6c 2c 0a 09 09 45 72 72 6f 72  rnLevel,...Error
0130: 4c 65 76 65 6c 2c 0a 09 09 46 61 74 61 6c 4c 65  Level,...FatalLe
0140: 76 65 6c 2c 0a 09 09 50 61 6e 69 63 4c 65 76 65  vel,...PanicLeve
0150: 6c 2c 0a 09 7d 0a 7d 0a 0a 66 75 6e 63 20 54 65  l,..}.}..func Te
0160: 73 74 48 6f 6f 6b 46 69 72 65 73 28 74 20 2a 74  stHookFires(t *t
0170: 65 73 74 69 6e 67 2e 54 29 20 7b 0a 09 68 6f 6f  esting.T) {..hoo
0180: 6b 20 3a 3d 20 6e 65 77 28 54 65 73 74 48 6f 6f  k := new(TestHoo
0190: 6b 29 0a 0a 09 4c 6f 67 41 6e 64 41 73 73 65 72  k)...LogAndAsser
01a0: 74 4a 53 4f 4e 28 74 2c 20 66 75 6e 63 28 6c 6f  tJSON(t, func(lo
01b0: 67 20 2a 4c 6f 67 67 65 72 29 20 7b 0a 09 09 6c  g *Logger) {...l
01c0: 6f 67 2e 48 6f 6f 6b 73 2e 41 64 64 28 68 6f 6f  og.Hooks.Add(hoo
01d0: 6b 29 0a 09 09 61 73 73 65 72 74 2e 45 71 75 61  k)...assert.Equa
01e0: 6c 28 74 2c 20 68 6f 6f 6b 2e 46 69 72 65 64 2c  l(t, hook.Fired,
01f0: 20 66 61 6c 73 65 29 0a 0a 09 09 6c 6f 67 2e 50   false)....log.P
0200: 72 69 6e 74 28 22 74 65 73 74 22 29 0a 09 7d 2c  rint("test")..},
0210: 20 66 75 6e 63 28 66 69 65 6c 64 73 20 46 69 65   func(fields Fie
0220: 6c 64 73 29 20 7b 0a 09 09 61 73 73 65 72 74 2e  lds) {...assert.
0230: 45 71 75 61 6c 28 74 2c 20 68 6f 6f 6b 2e 46 69  Equal(t, hook.Fi
0240: 72 65 64 2c 20 74 72 75 65 29 0a 09 7d 29 0a 7d  red, true)..}).}
0250: 0a 0a 74 79 70 65 20 4d 6f 64 69 66 79 48 6f 6f  ..type ModifyHoo
0260: 6b 20 73 74 72 75 63 74 20 7b 0a 7d 0a 0a 66 75  k struct {.}..fu
0270: 6e 63 20 28 68 6f 6f 6b 20 2a 4d 6f 64 69 66 79  nc (hook *Modify
0280: 48 6f 6f 6b 29 20 46 69 72 65 28 65 6e 74 72 79  Hook) Fire(entry
0290: 20 2a 45 6e 74 72 79 29 20 65 72 72 6f 72 20 7b   *Entry) error {
02a0: 0a 09 65 6e 74 72 79 2e 44 61 74 61 5b 22 77 6f  ..entry.Data["wo
02b0: 77 22 5d 20 3d 20 22 77 68 61 6c 65 22 0a 09 72  w"] = "whale"..r
02c0: 65 74 75 72 6e 20 6e 69 6c 0a 7d 0a 0a 66 75 6e  eturn nil.}..fun
02d0: 63 20 28 68 6f 6f 6b 20 2a 4d 6f 64 69 66 79 48  c (hook *ModifyH
02e0: 6f 6f 6b 29 20 4c 65 76 65 6c 73 28 29 20 5b 5d  ook) Levels() []
02f0: 4c 65 76 65 6c 20 7b 0a 09 72 65 74 75 72 6e 20  Level {..return 
0300: 5b 5d 4c 65 76 65 6c 7b 0a 09 09 44 65 62 75 67  []Level{...Debug
0310: 4c 65 76 65 6c 2c 0a 09 09 49 6e 66 6f 4c 65 76  Level,...InfoLev
0320: 65 6c 2c 0a 09 09 57 61 72 6e 4c 65 76 65 6c 2c  el,...WarnLevel,
0330: 0a 09 09 45 72 72 6f 72 4c 65 76 65 6c 2c 0a 09  ...ErrorLevel,..
0340: 09 46 61 74 61 6c 4c 65 76 65 6c 2c 0a 09 09 50  .FatalLevel,...P
0350: 61 6e 69 63 4c 65 76 65 6c 2c 0a 09 7d 0a 7d 0a  anicLevel,..}.}.
0360: 0a 66 75 6e 63 20 54 65 73 74 48 6f 6f 6b 43 61  .func TestHookCa
0370: 6e 4d 6f 64 69 66 79 45 6e 74 72 79 28 74 20 2a  nModifyEntry(t *
0380: 74 65 73 74 69 6e 67 2e 54 29 20 7b 0a 09 68 6f  testing.T) {..ho
0390: 6f 6b 20 3a 3d 20 6e 65 77 28 4d 6f 64 69 66 79  ok := new(Modify
03a0: 48 6f 6f 6b 29 0a 0a 09 4c 6f 67 41 6e 64 41 73  Hook)...LogAndAs
03b0: 73 65 72 74 4a 53 4f 4e 28 74 2c 20 66 75 6e 63  sertJSON(t, func
03c0: 28 6c 6f 67 20 2a 4c 6f 67 67 65 72 29 20 7b 0a  (log *Logger) {.
03d0: 09 09 6c 6f 67 2e 48 6f 6f 6b 73 2e 41 64 64 28  ..log.Hooks.Add(
03e0: 68 6f 6f 6b 29 0a 09 09 6c 6f 67 2e 57 69 74 68  hook)...log.With
03f0: 46 69 65 6c 64 28 22 77 6f 77 22 2c 20 22 65 6c  Field("wow", "el
0400: 65 70 68 61 6e 74 22 29 2e 50 72 69 6e 74 28 22  ephant").Print("
0410: 74 65 73 74 22 29 0a 09 7d 2c 20 66 75 6e 63 28  test")..}, func(
0420: 66 69 65 6c 64 73 20 46 69 65 6c 64 73 29 20 7b  fields Fields) {
0430: 0a 09 09 61 73 73 65 72 74 2e 45 71 75 61 6c 28  ...assert.Equal(
0440: 74 2c 20 66 69 65 6c 64 73 5b 22 77 6f 77 22 5d  t, fields["wow"]
0450: 2c 20 22 77 68 61 6c 65 22 29 0a 09 7d 29 0a 7d  , "whale")..}).}
0460: 0a 0a 66 75 6e 63 20 54 65 73 74 43 61 6e 46 69  ..func TestCanFi
0470: 72 65 4d 75 6c 74 69 70 6c 65 48 6f 6f 6b 73 28  reMultipleHooks(
0480: 74 20 2a 74 65 73 74 69 6e 67 2e 54 29 20 7b 0a  t *testing.T) {.
0490: 09 68 6f 6f 6b 31 20 3a 3d 20 6e 65 77 28 4d 6f  .hook1 := new(Mo
04a0: 64 69 66 79 48 6f 6f 6b 29 0a 09 68 6f 6f 6b 32  difyHook)..hook2
04b0: 20 3a 3d 20 6e 65 77 28 54 65 73 74 48 6f 6f 6b   := new(TestHook
04c0: 29 0a 0a 09 4c 6f 67 41 6e 64 41 73 73 65 72 74  )...LogAndAssert
04d0: 4a 53 4f 4e 28 74 2c 20 66 75 6e 63 28 6c 6f 67  JSON(t, func(log
04e0: 20 2a 4c 6f 67 67 65 72 29 20 7b 0a 09 09 6c 6f   *Logger) {...lo
04f0: 67 2e 48 6f 6f 6b 73 2e 41 64 64 28 68 6f 6f 6b  g.Hooks.Add(hook
0500: 31 29 0a 09 09 6c 6f 67 2e 48 6f 6f 6b 73 2e 41  1)...log.Hooks.A
0510: 64 64 28 68 6f 6f 6b 32 29 0a 0a 09 09 6c 6f 67  dd(hook2)....log
0520: 2e 57 69 74 68 46 69 65 6c 64 28 22 77 6f 77 22  .WithField("wow"
0530: 2c 20 22 65 6c 65 70 68 61 6e 74 22 29 2e 50 72  , "elephant").Pr
0540: 69 6e 74 28 22 74 65 73 74 22 29 0a 09 7d 2c 20  int("test")..}, 
0550: 66 75 6e 63 28 66 69 65 6c 64 73 20 46 69 65 6c  func(fields Fiel
0560: 64 73 29 20 7b 0a 09 09 61 73 73 65 72 74 2e 45  ds) {...assert.E
0570: 71 75 61 6c 28 74 2c 20 66 69 65 6c 64 73 5b 22  qual(t, fields["
0580: 77 6f 77 22 5d 2c 20 22 77 68 61 6c 65 22 29 0a  wow"], "whale").
0590: 09 09 61 73 73 65 72 74 2e 45 71 75 61 6c 28 74  ..assert.Equal(t
05a0: 2c 20 68 6f 6f 6b 32 2e 46 69 72 65 64 2c 20 74  , hook2.Fired, t
05b0: 72 75 65 29 0a 09 7d 29 0a 7d 0a 0a 74 79 70 65  rue)..}).}..type
05c0: 20 45 72 72 6f 72 48 6f 6f 6b 20 73 74 72 75 63   ErrorHook struc
05d0: 74 20 7b 0a 09 46 69 72 65 64 20 62 6f 6f 6c 0a  t {..Fired bool.
05e0: 7d 0a 0a 66 75 6e 63 20 28 68 6f 6f 6b 20 2a 45  }..func (hook *E
05f0: 72 72 6f 72 48 6f 6f 6b 29 20 46 69 72 65 28 65  rrorHook) Fire(e
0600: 6e 74 72 79 20 2a 45 6e 74 72 79 29 20 65 72 72  ntry *Entry) err
0610: 6f 72 20 7b 0a 09 68 6f 6f 6b 2e 46 69 72 65 64  or {..hook.Fired
0620: 20 3d 20 74 72 75 65 0a 09 72 65 74 75 72 6e 20   = true..return 
0630: 6e 69 6c 0a 7d 0a 0a 66 75 6e 63 20 28 68 6f 6f  nil.}..func (hoo
0640: 6b 20 2a 45 72 72 6f 72 48 6f 6f 6b 29 20 4c 65  k *ErrorHook) Le
0650: 76 65 6c 73 28 29 20 5b 5d 4c 65 76 65 6c 20 7b  vels() []Level {
0660: 0a 09 72 65 74 75 72 6e 20 5b 5d 4c 65 76 65 6c  ..return []Level
0670: 7b 0a 09 09 45 72 72 6f 72 4c 65 76 65 6c 2c 0a  {...ErrorLevel,.
0680: 09 7d 0a 7d 0a 0a 66 75 6e 63 20 54 65 73 74 45  .}.}..func TestE
0690: 72 72 6f 72 48 6f 6f 6b 53 68 6f 75 6c 64 6e 74  rrorHookShouldnt
06a0: 46 69 72 65 4f 6e 49 6e 66 6f 28 74 20 2a 74 65  FireOnInfo(t *te
06b0: 73 74 69 6e 67 2e 54 29 20 7b 0a 09 68 6f 6f 6b  sting.T) {..hook
06c0: 20 3a 3d 20 6e 65 77 28 45 72 72 6f 72 48 6f 6f   := new(ErrorHoo
06d0: 6b 29 0a 0a 09 4c 6f 67 41 6e 64 41 73 73 65 72  k)...LogAndAsser
06e0: 74 4a 53 4f 4e 28 74 2c 20 66 75 6e 63 28 6c 6f  tJSON(t, func(lo
06f0: 67 20 2a 4c 6f 67 67 65 72 29 20 7b 0a 09 09 6c  g *Logger) {...l
0700: 6f 67 2e 48 6f 6f 6b 73 2e 41 64 64 28 68 6f 6f  og.Hooks.Add(hoo
0710: 6b 29 0a 09 09 6c 6f 67 2e 49 6e 66 6f 28 22 74  k)...log.Info("t
0720: 65 73 74 22 29 0a 09 7d 2c 20 66 75 6e 63 28 66  est")..}, func(f
0730: 69 65 6c 64 73 20 46 69 65 6c 64 73 29 20 7b 0a  ields Fields) {.
0740: 09 09 61 73 73 65 72 74 2e 45 71 75 61 6c 28 74  ..assert.Equal(t
0750: 2c 20 68 6f 6f 6b 2e 46 69 72 65 64 2c 20 66 61  , hook.Fired, fa
0760: 6c 73 65 29 0a 09 7d 29 0a 7d 0a 0a 66 75 6e 63  lse)..}).}..func
0770: 20 54 65 73 74 45 72 72 6f 72 48 6f 6f 6b 53 68   TestErrorHookSh
0780: 6f 75 6c 64 46 69 72 65 4f 6e 45 72 72 6f 72 28  ouldFireOnError(
0790: 74 20 2a 74 65 73 74 69 6e 67 2e 54 29 20 7b 0a  t *testing.T) {.
07a0: 09 68 6f 6f 6b 20 3a 3d 20 6e 65 77 28 45 72 72  .hook := new(Err
07b0: 6f 72 48 6f 6f 6b 29 0a 0a 09 4c 6f 67 41 6e 64  orHook)...LogAnd
07c0: 41 73 73 65 72 74 4a 53 4f 4e 28 74 2c 20 66 75  AssertJSON(t, fu
07d0: 6e 63 28 6c 6f 67 20 2a 4c 6f 67 67 65 72 29 20  nc(log *Logger) 
07e0: 7b 0a 09 09 6c 6f 67 2e 48 6f 6f 6b 73 2e 41 64  {...log.Hooks.Ad
07f0: 64 28 68 6f 6f 6b 29 0a 09 09 6c 6f 67 2e 45 72  d(hook)...log.Er
0800: 72 6f 72 28 22 74 65 73 74 22 29 0a 09 7d 2c 20  ror("test")..}, 
0810: 66 75 6e 63 28 66 69 65 6c 64 73 20 46 69 65 6c  func(fields Fiel
0820: 64 73 29 20 7b 0a 09 09 61 73 73 65 72 74 2e 45  ds) {...assert.E
0830: 71 75 61 6c 28 74 2c 20 68 6f 6f 6b 2e 46 69 72  qual(t, hook.Fir
0840: 65 64 2c 20 74 72 75 65 29 0a 09 7d 29 0a 7d 0a  ed, true)..}).}.