storj.io/minio@v0.0.0-20230509071714-0cbc90f649b1/pkg/event/name_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 event
    18  
    19  import (
    20  	"encoding/json"
    21  	"encoding/xml"
    22  	"reflect"
    23  	"testing"
    24  )
    25  
    26  func TestNameExpand(t *testing.T) {
    27  	testCases := []struct {
    28  		name           Name
    29  		expectedResult []Name
    30  	}{
    31  		{BucketCreated, []Name{BucketCreated}},
    32  		{BucketRemoved, []Name{BucketRemoved}},
    33  		{ObjectAccessedAll, []Name{ObjectAccessedGet, ObjectAccessedHead, ObjectAccessedGetRetention, ObjectAccessedGetLegalHold}},
    34  		{ObjectCreatedAll, []Name{ObjectCreatedCompleteMultipartUpload, ObjectCreatedCopy, ObjectCreatedPost, ObjectCreatedPut,
    35  			ObjectCreatedPutRetention, ObjectCreatedPutLegalHold, ObjectCreatedPutTagging, ObjectCreatedDeleteTagging}},
    36  		{ObjectRemovedAll, []Name{ObjectRemovedDelete, ObjectRemovedDeleteMarkerCreated}},
    37  		{ObjectAccessedHead, []Name{ObjectAccessedHead}},
    38  	}
    39  
    40  	for i, testCase := range testCases {
    41  		result := testCase.name.Expand()
    42  
    43  		if !reflect.DeepEqual(result, testCase.expectedResult) {
    44  			t.Errorf("test %v: result: expected: %v, got: %v", i+1, testCase.expectedResult, result)
    45  		}
    46  	}
    47  }
    48  
    49  func TestNameString(t *testing.T) {
    50  	var blankName Name
    51  
    52  	testCases := []struct {
    53  		name           Name
    54  		expectedResult string
    55  	}{
    56  		{BucketCreated, "s3:BucketCreated:*"},
    57  		{BucketRemoved, "s3:BucketRemoved:*"},
    58  		{ObjectAccessedAll, "s3:ObjectAccessed:*"},
    59  		{ObjectAccessedGet, "s3:ObjectAccessed:Get"},
    60  		{ObjectAccessedHead, "s3:ObjectAccessed:Head"},
    61  		{ObjectCreatedAll, "s3:ObjectCreated:*"},
    62  		{ObjectCreatedCompleteMultipartUpload, "s3:ObjectCreated:CompleteMultipartUpload"},
    63  		{ObjectCreatedCopy, "s3:ObjectCreated:Copy"},
    64  		{ObjectCreatedPost, "s3:ObjectCreated:Post"},
    65  		{ObjectCreatedPut, "s3:ObjectCreated:Put"},
    66  		{ObjectRemovedAll, "s3:ObjectRemoved:*"},
    67  		{ObjectRemovedDelete, "s3:ObjectRemoved:Delete"},
    68  		{ObjectCreatedPutRetention, "s3:ObjectCreated:PutRetention"},
    69  		{ObjectCreatedPutLegalHold, "s3:ObjectCreated:PutLegalHold"},
    70  		{ObjectAccessedGetRetention, "s3:ObjectAccessed:GetRetention"},
    71  		{ObjectAccessedGetLegalHold, "s3:ObjectAccessed:GetLegalHold"},
    72  
    73  		{blankName, ""},
    74  	}
    75  
    76  	for i, testCase := range testCases {
    77  		result := testCase.name.String()
    78  
    79  		if result != testCase.expectedResult {
    80  			t.Fatalf("test %v: result: expected: %v, got: %v", i+1, testCase.expectedResult, result)
    81  		}
    82  	}
    83  }
    84  
    85  func TestNameMarshalXML(t *testing.T) {
    86  	var blankName Name
    87  
    88  	testCases := []struct {
    89  		name         Name
    90  		expectedData []byte
    91  		expectErr    bool
    92  	}{
    93  		{ObjectAccessedAll, []byte("<Name>s3:ObjectAccessed:*</Name>"), false},
    94  		{ObjectRemovedDelete, []byte("<Name>s3:ObjectRemoved:Delete</Name>"), false},
    95  		{blankName, []byte("<Name></Name>"), false},
    96  	}
    97  
    98  	for i, testCase := range testCases {
    99  		data, err := xml.Marshal(testCase.name)
   100  		expectErr := (err != nil)
   101  
   102  		if expectErr != testCase.expectErr {
   103  			t.Fatalf("test %v: error: expected: %v, got: %v", i+1, testCase.expectErr, expectErr)
   104  		}
   105  
   106  		if !testCase.expectErr {
   107  			if !reflect.DeepEqual(data, testCase.expectedData) {
   108  				t.Fatalf("test %v: data: expected: %v, got: %v", i+1, string(testCase.expectedData), string(data))
   109  			}
   110  		}
   111  	}
   112  }
   113  
   114  func TestNameUnmarshalXML(t *testing.T) {
   115  	var blankName Name
   116  
   117  	testCases := []struct {
   118  		data         []byte
   119  		expectedName Name
   120  		expectErr    bool
   121  	}{
   122  		{[]byte("<Name>s3:ObjectAccessed:*</Name>"), ObjectAccessedAll, false},
   123  		{[]byte("<Name>s3:ObjectRemoved:Delete</Name>"), ObjectRemovedDelete, false},
   124  		{[]byte("<Name></Name>"), blankName, true},
   125  	}
   126  
   127  	for i, testCase := range testCases {
   128  		var name Name
   129  		err := xml.Unmarshal(testCase.data, &name)
   130  		expectErr := (err != nil)
   131  
   132  		if expectErr != testCase.expectErr {
   133  			t.Fatalf("test %v: error: expected: %v, got: %v", i+1, testCase.expectErr, expectErr)
   134  		}
   135  
   136  		if !testCase.expectErr {
   137  			if !reflect.DeepEqual(name, testCase.expectedName) {
   138  				t.Fatalf("test %v: data: expected: %v, got: %v", i+1, testCase.expectedName, name)
   139  			}
   140  		}
   141  	}
   142  }
   143  
   144  func TestNameMarshalJSON(t *testing.T) {
   145  	var blankName Name
   146  
   147  	testCases := []struct {
   148  		name         Name
   149  		expectedData []byte
   150  		expectErr    bool
   151  	}{
   152  		{ObjectAccessedAll, []byte(`"s3:ObjectAccessed:*"`), false},
   153  		{ObjectRemovedDelete, []byte(`"s3:ObjectRemoved:Delete"`), false},
   154  		{blankName, []byte(`""`), false},
   155  	}
   156  
   157  	for i, testCase := range testCases {
   158  		data, err := json.Marshal(testCase.name)
   159  		expectErr := (err != nil)
   160  
   161  		if expectErr != testCase.expectErr {
   162  			t.Fatalf("test %v: error: expected: %v, got: %v", i+1, testCase.expectErr, expectErr)
   163  		}
   164  
   165  		if !testCase.expectErr {
   166  			if !reflect.DeepEqual(data, testCase.expectedData) {
   167  				t.Fatalf("test %v: data: expected: %v, got: %v", i+1, string(testCase.expectedData), string(data))
   168  			}
   169  		}
   170  	}
   171  }
   172  
   173  func TestNameUnmarshalJSON(t *testing.T) {
   174  	var blankName Name
   175  
   176  	testCases := []struct {
   177  		data         []byte
   178  		expectedName Name
   179  		expectErr    bool
   180  	}{
   181  		{[]byte(`"s3:ObjectAccessed:*"`), ObjectAccessedAll, false},
   182  		{[]byte(`"s3:ObjectRemoved:Delete"`), ObjectRemovedDelete, false},
   183  		{[]byte(`""`), blankName, true},
   184  	}
   185  
   186  	for i, testCase := range testCases {
   187  		var name Name
   188  		err := json.Unmarshal(testCase.data, &name)
   189  		expectErr := (err != nil)
   190  
   191  		if expectErr != testCase.expectErr {
   192  			t.Fatalf("test %v: error: expected: %v, got: %v", i+1, testCase.expectErr, expectErr)
   193  		}
   194  
   195  		if !testCase.expectErr {
   196  			if !reflect.DeepEqual(name, testCase.expectedName) {
   197  				t.Fatalf("test %v: data: expected: %v, got: %v", i+1, testCase.expectedName, name)
   198  			}
   199  		}
   200  	}
   201  }
   202  
   203  func TestParseName(t *testing.T) {
   204  	var blankName Name
   205  
   206  	testCases := []struct {
   207  		s            string
   208  		expectedName Name
   209  		expectErr    bool
   210  	}{
   211  		{"s3:ObjectAccessed:*", ObjectAccessedAll, false},
   212  		{"s3:ObjectRemoved:Delete", ObjectRemovedDelete, false},
   213  		{"", blankName, true},
   214  	}
   215  
   216  	for i, testCase := range testCases {
   217  		name, err := ParseName(testCase.s)
   218  		expectErr := (err != nil)
   219  
   220  		if expectErr != testCase.expectErr {
   221  			t.Fatalf("test %v: error: expected: %v, got: %v", i+1, testCase.expectErr, expectErr)
   222  		}
   223  
   224  		if !testCase.expectErr {
   225  			if !reflect.DeepEqual(name, testCase.expectedName) {
   226  				t.Fatalf("test %v: data: expected: %v, got: %v", i+1, testCase.expectedName, name)
   227  			}
   228  		}
   229  	}
   230  }