| 
									
										
										
										
											2021-04-19 03:41:13 +08:00
										 |  |  | // Copyright (c) 2015-2021 MinIO, Inc.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // This file is part of MinIO Object Storage stack
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // This program is free software: you can redistribute it and/or modify
 | 
					
						
							|  |  |  | // it under the terms of the GNU Affero General Public License as published by
 | 
					
						
							|  |  |  | // the Free Software Foundation, either version 3 of the License, or
 | 
					
						
							|  |  |  | // (at your option) any later version.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // This program is distributed in the hope that it will be useful
 | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					
						
							|  |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					
						
							|  |  |  | // GNU Affero General Public License for more details.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // You should have received a copy of the GNU Affero General Public License
 | 
					
						
							|  |  |  | // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					
						
							| 
									
										
										
										
											2018-03-29 05:14:06 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | package cmd | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"testing" | 
					
						
							| 
									
										
										
										
											2021-02-12 11:25:47 +08:00
										 |  |  | 	"time" | 
					
						
							| 
									
										
										
										
											2018-03-29 05:14:06 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-10 08:09:08 +08:00
										 |  |  | // Tests ToObjectInfo function.
 | 
					
						
							|  |  |  | func TestCacheMetadataObjInfo(t *testing.T) { | 
					
						
							|  |  |  | 	m := cacheMeta{Meta: nil} | 
					
						
							|  |  |  | 	objInfo := m.ToObjectInfo("testbucket", "testobject") | 
					
						
							|  |  |  | 	if objInfo.Size != 0 { | 
					
						
							|  |  |  | 		t.Fatal("Unexpected object info value for Size", objInfo.Size) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2021-02-12 11:25:47 +08:00
										 |  |  | 	if !objInfo.ModTime.Equal(time.Time{}) { | 
					
						
							| 
									
										
										
										
											2019-08-10 08:09:08 +08:00
										 |  |  | 		t.Fatal("Unexpected object info value for ModTime ", objInfo.ModTime) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if objInfo.IsDir { | 
					
						
							|  |  |  | 		t.Fatal("Unexpected object info value for IsDir", objInfo.IsDir) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if !objInfo.Expires.IsZero() { | 
					
						
							|  |  |  | 		t.Fatal("Unexpected object info value for Expires ", objInfo.Expires) | 
					
						
							| 
									
										
										
										
											2018-03-29 05:14:06 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // test wildcard patterns for excluding entries from cache
 | 
					
						
							|  |  |  | func TestCacheExclusion(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2019-07-11 06:41:11 +08:00
										 |  |  | 	cobjects := &cacheObjects{ | 
					
						
							|  |  |  | 		cache: nil, | 
					
						
							| 
									
										
										
										
											2018-03-29 05:14:06 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-07-11 06:41:11 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-29 05:14:06 +08:00
										 |  |  | 	testCases := []struct { | 
					
						
							|  |  |  | 		bucketName     string | 
					
						
							|  |  |  | 		objectName     string | 
					
						
							|  |  |  | 		excludePattern string | 
					
						
							|  |  |  | 		expectedResult bool | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		{"testbucket", "testobjectmatch", "testbucket/testobj*", true}, | 
					
						
							|  |  |  | 		{"testbucket", "testobjectnomatch", "testbucet/testobject*", false}, | 
					
						
							|  |  |  | 		{"testbucket", "testobject/pref1/obj1", "*/*", true}, | 
					
						
							|  |  |  | 		{"testbucket", "testobject/pref1/obj1", "*/pref1/*", true}, | 
					
						
							|  |  |  | 		{"testbucket", "testobject/pref1/obj1", "testobject/*", false}, | 
					
						
							|  |  |  | 		{"photos", "image1.jpg", "*.jpg", true}, | 
					
						
							|  |  |  | 		{"photos", "europe/paris/seine.jpg", "seine.jpg", false}, | 
					
						
							|  |  |  | 		{"photos", "europe/paris/seine.jpg", "*/seine.jpg", true}, | 
					
						
							|  |  |  | 		{"phil", "z/likes/coffee", "*/likes/*", true}, | 
					
						
							|  |  |  | 		{"failbucket", "no/slash/prefixes", "/failbucket/no/", false}, | 
					
						
							|  |  |  | 		{"failbucket", "no/slash/prefixes", "/failbucket/no/*", false}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for i, testCase := range testCases { | 
					
						
							| 
									
										
										
										
											2019-07-11 06:41:11 +08:00
										 |  |  | 		cobjects.exclude = []string{testCase.excludePattern} | 
					
						
							|  |  |  | 		if cobjects.isCacheExclude(testCase.bucketName, testCase.objectName) != testCase.expectedResult { | 
					
						
							| 
									
										
										
										
											2018-03-29 05:14:06 +08:00
										 |  |  | 			t.Fatal("Cache exclusion test failed for case ", i) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |