1/* 2** Zabbix 3** Copyright (C) 2001-2021 Zabbix SIA 4** 5** This program is free software; you can redistribute it and/or modify 6** it under the terms of the GNU General Public License as published by 7** the Free Software Foundation; either version 2 of the License, or 8** (at your option) any later version. 9** 10** This program is distributed in the hope that it will be useful, 11** but WITHOUT ANY WARRANTY; without even the implied warranty of 12** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13** GNU General Public License for more details. 14** 15** You should have received a copy of the GNU General Public License 16** along with this program; if not, write to the Free Software 17** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18**/ 19 20package metric 21 22import "testing" 23 24var ( 25 number = "42" 26 notNumber = "foo" 27) 28 29func TestNumberValidator_Validate(t *testing.T) { 30 type args struct { 31 value *string 32 } 33 tests := []struct { 34 name string 35 args args 36 wantErr bool 37 }{ 38 { 39 name: "Must successfully validate a number", 40 args: args{&number}, 41 wantErr: false, 42 }, 43 { 44 name: "Must successfully validate nil", 45 args: args{nil}, 46 wantErr: false, 47 }, 48 { 49 name: "Must fail if a given value is not a number", 50 args: args{¬Number}, 51 wantErr: true, 52 }, 53 } 54 for _, tt := range tests { 55 t.Run(tt.name, func(t *testing.T) { 56 v := NumberValidator{} 57 if err := v.Validate(tt.args.value); (err != nil) != tt.wantErr { 58 t.Errorf("Validate() error = %v, wantErr %v", err, tt.wantErr) 59 } 60 }) 61 } 62} 63 64var ( 65 string1 = "hello123" 66 string2 = "hello world" 67) 68 69func TestPatternValidator_Validate(t *testing.T) { 70 type fields struct { 71 Pattern string 72 } 73 type args struct { 74 value *string 75 } 76 tests := []struct { 77 name string 78 fields fields 79 args args 80 wantErr bool 81 }{ 82 { 83 name: "Must successfully validate a string value", 84 fields: fields{"^hello[0-9]+$"}, 85 args: args{&string1}, 86 wantErr: false, 87 }, 88 { 89 name: "Must successfully validate nil", 90 args: args{nil}, 91 wantErr: false, 92 }, 93 { 94 name: "Must fail if a given value does not match a given pattern", 95 fields: fields{"^hello[0-9]+$"}, 96 args: args{&string2}, 97 wantErr: true, 98 }, 99 } 100 for _, tt := range tests { 101 t.Run(tt.name, func(t *testing.T) { 102 v := PatternValidator{ 103 Pattern: tt.fields.Pattern, 104 } 105 if err := v.Validate(tt.args.value); (err != nil) != tt.wantErr { 106 t.Errorf("Validate() error = %v, wantErr %v", err, tt.wantErr) 107 } 108 }) 109 } 110} 111 112var ( 113 valInRange = "50" 114 valNotInRange = "1000" 115) 116 117func TestRangeValidator_Validate(t *testing.T) { 118 type fields struct { 119 Min int 120 Max int 121 } 122 type args struct { 123 value *string 124 } 125 tests := []struct { 126 name string 127 fields fields 128 args args 129 wantErr bool 130 }{ 131 { 132 name: "Must successfully validate a value in a range", 133 fields: fields{0, 100}, 134 args: args{&valInRange}, 135 wantErr: false, 136 }, 137 { 138 name: "Must successfully validate nil", 139 args: args{nil}, 140 wantErr: false, 141 }, 142 { 143 name: "Must fail if a given value is out of a range", 144 fields: fields{0, 100}, 145 args: args{&valNotInRange}, 146 wantErr: true, 147 }, 148 } 149 for _, tt := range tests { 150 t.Run(tt.name, func(t *testing.T) { 151 v := RangeValidator{ 152 Min: tt.fields.Min, 153 Max: tt.fields.Max, 154 } 155 if err := v.Validate(tt.args.value); (err != nil) != tt.wantErr { 156 t.Errorf("Validate() error = %v, wantErr %v", err, tt.wantErr) 157 } 158 }) 159 } 160} 161 162func TestSetValidator_Validate(t *testing.T) { 163 type fields struct { 164 Set []string 165 } 166 type args struct { 167 value *string 168 } 169 tests := []struct { 170 name string 171 fields fields 172 args args 173 wantErr bool 174 }{ 175 { 176 name: "Must successfully validate a value in a set", 177 fields: fields{[]string{"foo", "42", "100500"}}, 178 args: args{&number}, 179 wantErr: false, 180 }, 181 { 182 name: "Must successfully validate nil", 183 args: args{nil}, 184 wantErr: false, 185 }, 186 { 187 name: "Must fail if a given value is out of a set", 188 fields: fields{[]string{"foo", "42", "100500"}}, 189 args: args{&string1}, 190 wantErr: true, 191 }, 192 } 193 for _, tt := range tests { 194 t.Run(tt.name, func(t *testing.T) { 195 v := SetValidator{ 196 Set: tt.fields.Set, 197 } 198 if err := v.Validate(tt.args.value); (err != nil) != tt.wantErr { 199 t.Errorf("Validate() error = %v, wantErr %v", err, tt.wantErr) 200 } 201 }) 202 } 203} 204