2016-04-22 02:40:01 -04:00
/ *
2017-10-16 20:20:54 -04:00
* Minio Cloud Storage , ( C ) 2016 , 2017 Minio , Inc .
2016-04-22 02:40:01 -04:00
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an "AS IS" BASIS ,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
* See the License for the specific language governing permissions and
* limitations under the License .
* /
2016-08-18 19:23:42 -04:00
package cmd
2016-04-22 02:40:01 -04:00
import (
"bytes"
2018-03-15 16:27:16 -04:00
"context"
2016-04-22 02:40:01 -04:00
"testing"
)
2016-05-06 15:32:44 -04:00
// Wrapper for calling GetObjectInfo tests for both XL multiple disks and single node setup.
2016-04-22 02:40:01 -04:00
func TestGetObjectInfo ( t * testing . T ) {
2016-05-06 14:57:04 -04:00
ExecObjectLayerTest ( t , testGetObjectInfo )
}
2016-04-22 02:40:01 -04:00
2016-05-06 14:57:04 -04:00
// Testing GetObjectInfo().
2016-07-07 18:05:51 -04:00
func testGetObjectInfo ( obj ObjectLayer , instanceType string , t TestErrHandler ) {
2016-04-22 02:40:01 -04:00
// This bucket is used for testing getObjectInfo operations.
2018-03-15 16:27:16 -04:00
err := obj . MakeBucketWithLocation ( context . Background ( ) , "test-getobjectinfo" , "" )
2016-04-22 02:40:01 -04:00
if err != nil {
2016-05-06 14:57:04 -04:00
t . Fatalf ( "%s : %s" , instanceType , err . Error ( ) )
2016-04-22 02:40:01 -04:00
}
2018-09-10 12:42:43 -04:00
opts := ObjectOptions { }
_ , err = obj . PutObject ( context . Background ( ) , "test-getobjectinfo" , "Asia/asiapics.jpg" , mustGetHashReader ( t , bytes . NewBufferString ( "asiapics" ) , int64 ( len ( "asiapics" ) ) , "" , "" ) , nil , opts )
2016-04-22 02:40:01 -04:00
if err != nil {
2016-05-06 14:57:04 -04:00
t . Fatalf ( "%s : %s" , instanceType , err . Error ( ) )
2016-04-22 02:40:01 -04:00
}
2018-09-05 19:38:03 -04:00
// Put an empty directory
2018-09-10 12:42:43 -04:00
_ , err = obj . PutObject ( context . Background ( ) , "test-getobjectinfo" , "Asia/empty-dir/" , mustGetHashReader ( t , bytes . NewBufferString ( "" ) , int64 ( len ( "" ) ) , "" , "" ) , nil , opts )
2018-09-05 19:38:03 -04:00
if err != nil {
t . Fatalf ( "%s : %s" , instanceType , err . Error ( ) )
}
2016-04-22 02:40:01 -04:00
resultCases := [ ] ObjectInfo {
// ObjectInfo -1.
// ObjectName set to a existing object in the test case (Test case 14).
{ Bucket : "test-getobjectinfo" , Name : "Asia/asiapics.jpg" , ContentType : "image/jpeg" , IsDir : false } ,
2018-09-05 19:38:03 -04:00
{ Bucket : "test-getobjectinfo" , Name : "Asia/empty-dir/" , ContentType : "application/octet-stream" , IsDir : true } ,
2016-04-22 02:40:01 -04:00
}
testCases := [ ] struct {
bucketName string
objectName string
// Expected output of GetObjectInfo.
result ObjectInfo
err error
// Flag indicating whether the test is expected to pass or not.
shouldPass bool
} {
// Test cases with invalid bucket names ( Test number 1-4 ).
{ ".test" , "" , ObjectInfo { } , BucketNameInvalid { Bucket : ".test" } , false } ,
{ "Test" , "" , ObjectInfo { } , BucketNameInvalid { Bucket : "Test" } , false } ,
{ "---" , "" , ObjectInfo { } , BucketNameInvalid { Bucket : "---" } , false } ,
{ "ad" , "" , ObjectInfo { } , BucketNameInvalid { Bucket : "ad" } , false } ,
2016-09-09 01:38:18 -04:00
// Test cases with valid but non-existing bucket names (Test number 5-6).
2016-04-22 02:40:01 -04:00
{ "abcdefgh" , "abc" , ObjectInfo { } , BucketNotFound { Bucket : "abcdefgh" } , false } ,
{ "ijklmnop" , "efg" , ObjectInfo { } , BucketNotFound { Bucket : "ijklmnop" } , false } ,
2016-09-09 01:38:18 -04:00
// Test cases with valid but non-existing bucket names and invalid object name (Test number 7-8).
2016-05-08 04:58:05 -04:00
{ "test-getobjectinfo" , "" , ObjectInfo { } , ObjectNameInvalid { Bucket : "test-getobjectinfo" , Object : "" } , false } ,
{ "test-getobjectinfo" , "" , ObjectInfo { } , ObjectNameInvalid { Bucket : "test-getobjectinfo" , Object : "" } , false } ,
2016-09-09 01:38:18 -04:00
// Test cases with non-existing object name with existing bucket (Test number 9-11).
2016-04-22 02:40:01 -04:00
{ "test-getobjectinfo" , "Africa" , ObjectInfo { } , ObjectNotFound { Bucket : "test-getobjectinfo" , Object : "Africa" } , false } ,
{ "test-getobjectinfo" , "Antartica" , ObjectInfo { } , ObjectNotFound { Bucket : "test-getobjectinfo" , Object : "Antartica" } , false } ,
{ "test-getobjectinfo" , "Asia/myfile" , ObjectInfo { } , ObjectNotFound { Bucket : "test-getobjectinfo" , Object : "Asia/myfile" } , false } ,
2017-10-16 20:20:54 -04:00
// Valid case with existing object (Test number 12).
2016-04-22 02:40:01 -04:00
{ "test-getobjectinfo" , "Asia/asiapics.jpg" , resultCases [ 0 ] , nil , true } ,
2018-09-05 19:38:03 -04:00
{ "test-getobjectinfo" , "Asia/empty-dir/" , resultCases [ 1 ] , nil , true } ,
2016-04-22 02:40:01 -04:00
}
for i , testCase := range testCases {
2018-09-10 12:42:43 -04:00
result , err := obj . GetObjectInfo ( context . Background ( ) , testCase . bucketName , testCase . objectName , opts )
2016-04-22 02:40:01 -04:00
if err != nil && testCase . shouldPass {
2016-05-06 14:57:04 -04:00
t . Errorf ( "Test %d: %s: Expected to pass, but failed with: <ERROR> %s" , i + 1 , instanceType , err . Error ( ) )
2016-04-22 02:40:01 -04:00
}
if err == nil && ! testCase . shouldPass {
2016-05-06 14:57:04 -04:00
t . Errorf ( "Test %d: %s: Expected to fail with <ERROR> \"%s\", but passed instead" , i + 1 , instanceType , testCase . err . Error ( ) )
2016-04-22 02:40:01 -04:00
}
// Failed as expected, but does it fail for the expected reason.
if err != nil && ! testCase . shouldPass {
2016-04-29 17:24:10 -04:00
if testCase . err . Error ( ) != err . Error ( ) {
2016-05-06 14:57:04 -04:00
t . Errorf ( "Test %d: %s: Expected to fail with error \"%s\", but instead failed with error \"%s\" instead" , i + 1 , instanceType , testCase . err . Error ( ) , err . Error ( ) )
2016-04-22 02:40:01 -04:00
}
}
// Test passes as expected, but the output values are verified for correctness here.
if err == nil && testCase . shouldPass {
if testCase . result . Bucket != result . Bucket {
2016-05-06 14:57:04 -04:00
t . Fatalf ( "Test %d: %s: Expected Bucket name to be '%s', but found '%s' instead" , i + 1 , instanceType , testCase . result . Bucket , result . Bucket )
2016-04-22 02:40:01 -04:00
}
if testCase . result . Name != result . Name {
2016-05-06 14:57:04 -04:00
t . Errorf ( "Test %d: %s: Expected Object name to be %s, but instead found it to be %s" , i + 1 , instanceType , testCase . result . Name , result . Name )
2016-04-22 02:40:01 -04:00
}
if testCase . result . ContentType != result . ContentType {
2016-05-06 14:57:04 -04:00
t . Errorf ( "Test %d: %s: Expected Content Type of the object to be %v, but instead found it to be %v" , i + 1 , instanceType , testCase . result . ContentType , result . ContentType )
2016-04-22 02:40:01 -04:00
}
if testCase . result . IsDir != result . IsDir {
2016-05-06 15:32:44 -04:00
t . Errorf ( "Test %d: %s: Expected IsDir flag of the object to be %v, but instead found it to be %v" , i + 1 , instanceType , testCase . result . IsDir , result . IsDir )
2016-04-22 02:40:01 -04:00
}
}
}
}