storj.io/minio@v0.0.0-20230509071714-0cbc90f649b1/pkg/bucket/policy/condition/ipaddressfunc_test.go (about) 1 /* 2 * MinIO Cloud Storage, (C) 2018 MinIO, Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package condition 18 19 import ( 20 "reflect" 21 "testing" 22 ) 23 24 func TestIPAddressFuncEvaluate(t *testing.T) { 25 case1Function, err := newIPAddressFunc(AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0/24"))) 26 if err != nil { 27 t.Fatalf("unexpected error. %v\n", err) 28 } 29 30 testCases := []struct { 31 function Function 32 values map[string][]string 33 expectedResult bool 34 }{ 35 {case1Function, map[string][]string{"SourceIp": {"192.168.1.10"}}, true}, 36 {case1Function, map[string][]string{"SourceIp": {"192.168.2.10"}}, false}, 37 {case1Function, map[string][]string{}, false}, 38 {case1Function, map[string][]string{"delimiter": {"/"}}, false}, 39 } 40 41 for i, testCase := range testCases { 42 result := testCase.function.evaluate(testCase.values) 43 44 if result != testCase.expectedResult { 45 t.Fatalf("case %v: expected: %v, got: %v\n", i+1, testCase.expectedResult, result) 46 } 47 } 48 } 49 50 func TestIPAddressFuncKey(t *testing.T) { 51 case1Function, err := newIPAddressFunc(AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0/24"))) 52 if err != nil { 53 t.Fatalf("unexpected error. %v\n", err) 54 } 55 56 testCases := []struct { 57 function Function 58 expectedResult Key 59 }{ 60 {case1Function, AWSSourceIP}, 61 } 62 63 for i, testCase := range testCases { 64 result := testCase.function.key() 65 66 if result != testCase.expectedResult { 67 t.Fatalf("case %v: expected: %v, got: %v\n", i+1, testCase.expectedResult, result) 68 } 69 } 70 } 71 72 func TestIPAddressFuncToMap(t *testing.T) { 73 case1Function, err := newIPAddressFunc(AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0/24"))) 74 if err != nil { 75 t.Fatalf("unexpected error. %v\n", err) 76 } 77 78 case2Function, err := newIPAddressFunc(AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0/24"), NewStringValue("10.1.10.1/32"))) 79 if err != nil { 80 t.Fatalf("unexpected error. %v\n", err) 81 } 82 83 case1Result := map[Key]ValueSet{ 84 AWSSourceIP: NewValueSet(NewStringValue("192.168.1.0/24")), 85 } 86 87 case2Result := map[Key]ValueSet{ 88 AWSSourceIP: NewValueSet(NewStringValue("192.168.1.0/24"), NewStringValue("10.1.10.1/32")), 89 } 90 91 testCases := []struct { 92 f Function 93 expectedResult map[Key]ValueSet 94 }{ 95 {case1Function, case1Result}, 96 {case2Function, case2Result}, 97 {&ipAddressFunc{}, nil}, 98 } 99 100 for i, testCase := range testCases { 101 result := testCase.f.toMap() 102 103 if !reflect.DeepEqual(result, testCase.expectedResult) { 104 t.Fatalf("case %v: result: expected: %v, got: %v\n", i+1, testCase.expectedResult, result) 105 } 106 } 107 } 108 109 func TestNotIPAddressFuncEvaluate(t *testing.T) { 110 case1Function, err := newNotIPAddressFunc(AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0/24"))) 111 if err != nil { 112 t.Fatalf("unexpected error. %v\n", err) 113 } 114 115 testCases := []struct { 116 function Function 117 values map[string][]string 118 expectedResult bool 119 }{ 120 {case1Function, map[string][]string{"SourceIp": {"192.168.2.10"}}, true}, 121 {case1Function, map[string][]string{}, true}, 122 {case1Function, map[string][]string{"delimiter": {"/"}}, true}, 123 {case1Function, map[string][]string{"SourceIp": {"192.168.1.10"}}, false}, 124 } 125 126 for i, testCase := range testCases { 127 result := testCase.function.evaluate(testCase.values) 128 129 if result != testCase.expectedResult { 130 t.Fatalf("case %v: expected: %v, got: %v\n", i+1, testCase.expectedResult, result) 131 } 132 } 133 } 134 135 func TestNotIPAddressFuncKey(t *testing.T) { 136 case1Function, err := newNotIPAddressFunc(AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0/24"))) 137 if err != nil { 138 t.Fatalf("unexpected error. %v\n", err) 139 } 140 141 testCases := []struct { 142 function Function 143 expectedResult Key 144 }{ 145 {case1Function, AWSSourceIP}, 146 } 147 148 for i, testCase := range testCases { 149 result := testCase.function.key() 150 151 if result != testCase.expectedResult { 152 t.Fatalf("case %v: expected: %v, got: %v\n", i+1, testCase.expectedResult, result) 153 } 154 } 155 } 156 157 func TestNotIPAddressFuncToMap(t *testing.T) { 158 case1Function, err := newNotIPAddressFunc(AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0/24"))) 159 if err != nil { 160 t.Fatalf("unexpected error. %v\n", err) 161 } 162 163 case2Function, err := newNotIPAddressFunc(AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0/24"), NewStringValue("10.1.10.1/32"))) 164 if err != nil { 165 t.Fatalf("unexpected error. %v\n", err) 166 } 167 168 case1Result := map[Key]ValueSet{ 169 AWSSourceIP: NewValueSet(NewStringValue("192.168.1.0/24")), 170 } 171 172 case2Result := map[Key]ValueSet{ 173 AWSSourceIP: NewValueSet(NewStringValue("192.168.1.0/24"), NewStringValue("10.1.10.1/32")), 174 } 175 176 testCases := []struct { 177 f Function 178 expectedResult map[Key]ValueSet 179 }{ 180 {case1Function, case1Result}, 181 {case2Function, case2Result}, 182 {¬IPAddressFunc{}, nil}, 183 } 184 185 for i, testCase := range testCases { 186 result := testCase.f.toMap() 187 188 if !reflect.DeepEqual(result, testCase.expectedResult) { 189 t.Fatalf("case %v: result: expected: %v, got: %v\n", i+1, testCase.expectedResult, result) 190 } 191 } 192 } 193 194 func TestNewIPAddressFunc(t *testing.T) { 195 case1Function, err := newIPAddressFunc(AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0/24"))) 196 if err != nil { 197 t.Fatalf("unexpected error. %v\n", err) 198 } 199 200 case2Function, err := newIPAddressFunc(AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0/24"), NewStringValue("10.1.10.1/32"))) 201 if err != nil { 202 t.Fatalf("unexpected error. %v\n", err) 203 } 204 205 testCases := []struct { 206 key Key 207 values ValueSet 208 expectedResult Function 209 expectErr bool 210 }{ 211 {AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0/24")), case1Function, false}, 212 {AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0/24"), NewStringValue("10.1.10.1/32")), case2Function, false}, 213 // Unsupported key error. 214 {S3Prefix, NewValueSet(NewStringValue("192.168.1.0/24")), nil, true}, 215 // Invalid value error. 216 {AWSSourceIP, NewValueSet(NewStringValue("node1.example.org")), nil, true}, 217 // Invalid CIDR format error. 218 {AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0.0/24")), nil, true}, 219 } 220 221 for i, testCase := range testCases { 222 result, err := newIPAddressFunc(testCase.key, testCase.values) 223 expectErr := (err != nil) 224 225 if expectErr != testCase.expectErr { 226 t.Fatalf("case %v: error: expected: %v, got: %v\n", i+1, testCase.expectErr, expectErr) 227 } 228 229 if !testCase.expectErr { 230 if result.String() != testCase.expectedResult.String() { 231 t.Fatalf("case %v: result: expected: %v, got: %v\n", i+1, testCase.expectedResult, result) 232 } 233 } 234 } 235 } 236 237 func TestNewNotIPAddressFunc(t *testing.T) { 238 case1Function, err := newNotIPAddressFunc(AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0/24"))) 239 if err != nil { 240 t.Fatalf("unexpected error. %v\n", err) 241 } 242 243 case2Function, err := newNotIPAddressFunc(AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0/24"), NewStringValue("10.1.10.1/32"))) 244 if err != nil { 245 t.Fatalf("unexpected error. %v\n", err) 246 } 247 248 testCases := []struct { 249 key Key 250 values ValueSet 251 expectedResult Function 252 expectErr bool 253 }{ 254 {AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0/24")), case1Function, false}, 255 {AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0/24"), NewStringValue("10.1.10.1/32")), case2Function, false}, 256 // Unsupported key error. 257 {S3Prefix, NewValueSet(NewStringValue("192.168.1.0/24")), nil, true}, 258 // Invalid value error. 259 {AWSSourceIP, NewValueSet(NewStringValue("node1.example.org")), nil, true}, 260 // Invalid CIDR format error. 261 {AWSSourceIP, NewValueSet(NewStringValue("192.168.1.0.0/24")), nil, true}, 262 } 263 264 for i, testCase := range testCases { 265 result, err := newNotIPAddressFunc(testCase.key, testCase.values) 266 expectErr := (err != nil) 267 268 if expectErr != testCase.expectErr { 269 t.Fatalf("case %v: error: expected: %v, got: %v\n", i+1, testCase.expectErr, expectErr) 270 } 271 272 if !testCase.expectErr { 273 if result.String() != testCase.expectedResult.String() { 274 t.Fatalf("case %v: result: expected: %v, got: %v\n", i+1, testCase.expectedResult, result) 275 } 276 } 277 } 278 }