github.com/letsencrypt/boulder@v0.20251208.0/observer/obs_conf_test.go (about) 1 package observer 2 3 import ( 4 "errors" 5 "testing" 6 "time" 7 8 "github.com/letsencrypt/boulder/cmd" 9 "github.com/letsencrypt/boulder/config" 10 "github.com/letsencrypt/boulder/metrics" 11 "github.com/letsencrypt/boulder/observer/probers" 12 _ "github.com/letsencrypt/boulder/observer/probers/mock" 13 "github.com/letsencrypt/boulder/test" 14 ) 15 16 const ( 17 debugAddr = ":8040" 18 errDBZMsg = "over 9000" 19 mockConf = "Mock" 20 ) 21 22 func TestObsConf_makeMonitors(t *testing.T) { 23 var errDBZ = errors.New(errDBZMsg) 24 var cfgSyslog = cmd.SyslogConfig{StdoutLevel: 6, SyslogLevel: 6} 25 var cfgDur = config.Duration{Duration: time.Second * 5} 26 var cfgBuckets = []float64{.001} 27 var validMonConf = &MonConf{ 28 cfgDur, mockConf, probers.Settings{"valid": true, "pname": "foo", "pkind": "bar"}} 29 var invalidMonConf = &MonConf{ 30 cfgDur, mockConf, probers.Settings{"valid": false, "errmsg": errDBZMsg, "pname": "foo", "pkind": "bar"}} 31 type fields struct { 32 Syslog cmd.SyslogConfig 33 Buckets []float64 34 DebugAddr string 35 MonConfs []*MonConf 36 } 37 tests := []struct { 38 name string 39 fields fields 40 errs []error 41 wantErr bool 42 }{ 43 // valid 44 {"1 valid", fields{cfgSyslog, cfgBuckets, debugAddr, []*MonConf{validMonConf}}, nil, false}, 45 {"2 valid", fields{ 46 cfgSyslog, cfgBuckets, debugAddr, []*MonConf{validMonConf, validMonConf}}, nil, false}, 47 {"1 valid, 1 invalid", fields{ 48 cfgSyslog, cfgBuckets, debugAddr, []*MonConf{validMonConf, invalidMonConf}}, []error{errDBZ}, false}, 49 {"1 valid, 2 invalid", fields{ 50 cfgSyslog, cfgBuckets, debugAddr, []*MonConf{invalidMonConf, validMonConf, invalidMonConf}}, []error{errDBZ, errDBZ}, false}, 51 // invalid 52 {"1 invalid", fields{cfgSyslog, cfgBuckets, debugAddr, []*MonConf{invalidMonConf}}, []error{errDBZ}, true}, 53 {"0", fields{cfgSyslog, cfgBuckets, debugAddr, []*MonConf{}}, nil, true}, 54 } 55 for _, tt := range tests { 56 t.Run(tt.name, func(t *testing.T) { 57 c := &ObsConf{ 58 Syslog: tt.fields.Syslog, 59 Buckets: tt.fields.Buckets, 60 DebugAddr: tt.fields.DebugAddr, 61 MonConfs: tt.fields.MonConfs, 62 } 63 _, errs, err := c.makeMonitors(metrics.NoopRegisterer) 64 if len(errs) != len(tt.errs) { 65 t.Errorf("ObsConf.validateMonConfs() errs = %d, want %d", len(errs), len(tt.errs)) 66 t.Logf("%v", errs) 67 } 68 if (err != nil) != tt.wantErr { 69 t.Errorf("ObsConf.validateMonConfs() err = %v, want %v", err, tt.wantErr) 70 } 71 }) 72 } 73 } 74 75 func TestObsConf_ValidateDebugAddr(t *testing.T) { 76 type fields struct { 77 DebugAddr string 78 } 79 tests := []struct { 80 name string 81 fields fields 82 wantErr bool 83 }{ 84 // valid 85 {"max len and range", fields{":65535"}, false}, 86 {"min len and range", fields{":1"}, false}, 87 {"2 digits", fields{":80"}, false}, 88 // invalid 89 {"out of range high", fields{":65536"}, true}, 90 {"out of range low", fields{":0"}, true}, 91 {"not even a port", fields{":foo"}, true}, 92 {"missing :", fields{"foo"}, true}, 93 {"missing port", fields{"foo:"}, true}, 94 } 95 for _, tt := range tests { 96 t.Run(tt.name, func(t *testing.T) { 97 c := &ObsConf{ 98 DebugAddr: tt.fields.DebugAddr, 99 } 100 err := c.validateDebugAddr() 101 if tt.wantErr { 102 test.AssertError(t, err, "ObsConf.ValidateDebugAddr() should have errored") 103 } else { 104 test.AssertNotError(t, err, "ObsConf.ValidateDebugAddr() shouldn't have errored") 105 } 106 }) 107 } 108 } 109 110 func TestObsConf_validateSyslog(t *testing.T) { 111 type fields struct { 112 Syslog cmd.SyslogConfig 113 } 114 tests := []struct { 115 name string 116 fields fields 117 wantErr bool 118 }{ 119 // valid 120 {"valid", fields{cmd.SyslogConfig{StdoutLevel: 6, SyslogLevel: 6}}, false}, 121 // invalid 122 {"both too high", fields{cmd.SyslogConfig{StdoutLevel: 9, SyslogLevel: 9}}, true}, 123 {"stdout too high", fields{cmd.SyslogConfig{StdoutLevel: 9, SyslogLevel: 6}}, true}, 124 {"syslog too high", fields{cmd.SyslogConfig{StdoutLevel: 6, SyslogLevel: 9}}, true}, 125 {"both too low", fields{cmd.SyslogConfig{StdoutLevel: -1, SyslogLevel: -1}}, true}, 126 {"stdout too low", fields{cmd.SyslogConfig{StdoutLevel: -1, SyslogLevel: 6}}, true}, 127 {"syslog too low", fields{cmd.SyslogConfig{StdoutLevel: 6, SyslogLevel: -1}}, true}, 128 } 129 for _, tt := range tests { 130 t.Run(tt.name, func(t *testing.T) { 131 c := &ObsConf{ 132 Syslog: tt.fields.Syslog, 133 } 134 err := c.validateSyslog() 135 if tt.wantErr { 136 test.AssertError(t, err, "ObsConf.validateSyslog() should have errored") 137 } else { 138 test.AssertNotError(t, err, "ObsConf.validateSyslog() shouldn't have errored") 139 } 140 }) 141 } 142 }