github.com/minio/minio@v0.0.0-20240328213742-3f72439b8a27/internal/bucket/lifecycle/noncurrentversion_test.go (about)

     1  // Copyright (c) 2015-2021 MinIO, Inc.
     2  //
     3  // This file is part of MinIO Object Storage stack
     4  //
     5  // This program is free software: you can redistribute it and/or modify
     6  // it under the terms of the GNU Affero General Public License as published by
     7  // the Free Software Foundation, either version 3 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 Affero General Public License for more details.
    14  //
    15  // You should have received a copy of the GNU Affero General Public License
    16  // along with this program.  If not, see <http://www.gnu.org/licenses/>.
    17  
    18  package lifecycle
    19  
    20  import "testing"
    21  
    22  func Test_NoncurrentVersionsExpiration_Validation(t *testing.T) {
    23  	testcases := []struct {
    24  		n   NoncurrentVersionExpiration
    25  		err error
    26  	}{
    27  		{
    28  			n: NoncurrentVersionExpiration{
    29  				NoncurrentDays:          0,
    30  				NewerNoncurrentVersions: 0,
    31  				set:                     true,
    32  			},
    33  			err: errXMLNotWellFormed,
    34  		},
    35  		{
    36  			n: NoncurrentVersionExpiration{
    37  				NoncurrentDays:          90,
    38  				NewerNoncurrentVersions: 0,
    39  				set:                     true,
    40  			},
    41  			err: nil,
    42  		},
    43  		{
    44  			n: NoncurrentVersionExpiration{
    45  				NoncurrentDays:          90,
    46  				NewerNoncurrentVersions: 2,
    47  				set:                     true,
    48  			},
    49  			err: nil,
    50  		},
    51  		{
    52  			n: NoncurrentVersionExpiration{
    53  				NoncurrentDays: -1,
    54  				set:            true,
    55  			},
    56  			err: errXMLNotWellFormed,
    57  		},
    58  		{
    59  			n: NoncurrentVersionExpiration{
    60  				NoncurrentDays:          90,
    61  				NewerNoncurrentVersions: -2,
    62  				set:                     true,
    63  			},
    64  			err: errXMLNotWellFormed,
    65  		},
    66  		// MinIO extension: supports zero NoncurrentDays when NewerNoncurrentVersions > 0
    67  		{
    68  			n: NoncurrentVersionExpiration{
    69  				NoncurrentDays:          0,
    70  				NewerNoncurrentVersions: 5,
    71  				set:                     true,
    72  			},
    73  			err: nil,
    74  		},
    75  	}
    76  
    77  	for i, tc := range testcases {
    78  		if got := tc.n.Validate(); got != tc.err {
    79  			t.Fatalf("%d: expected %v but got %v", i+1, tc.err, got)
    80  		}
    81  	}
    82  }