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  		{&notIPAddressFunc{}, 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  }