// 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 . package cmd import ( "testing" "time" ) // 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) } if !objInfo.ModTime.Equal(time.Time{}) { 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) } } // test wildcard patterns for excluding entries from cache func TestCacheExclusion(t *testing.T) { cobjects := &cacheObjects{ cache: nil, } 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 { cobjects.exclude = []string{testCase.excludePattern} if cobjects.isCacheExclude(testCase.bucketName, testCase.objectName) != testCase.expectedResult { t.Fatal("Cache exclusion test failed for case ", i) } } }