mirror of https://github.com/minio/minio.git
				
				
				
			
		
			
				
	
	
		
			223 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Go
		
	
	
	
// 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/>.
 | 
						|
 | 
						|
package cmd
 | 
						|
 | 
						|
import (
 | 
						|
	"net/url"
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
// Test list objects resources V2.
 | 
						|
func TestListObjectsV2Resources(t *testing.T) {
 | 
						|
	testCases := []struct {
 | 
						|
		values                               url.Values
 | 
						|
		prefix, token, startAfter, delimiter string
 | 
						|
		fetchOwner                           bool
 | 
						|
		maxKeys                              int
 | 
						|
		encodingType                         string
 | 
						|
		errCode                              APIErrorCode
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			values: url.Values{
 | 
						|
				"prefix":             []string{"photos/"},
 | 
						|
				"continuation-token": []string{"dG9rZW4="},
 | 
						|
				"start-after":        []string{"start-after"},
 | 
						|
				"delimiter":          []string{SlashSeparator},
 | 
						|
				"fetch-owner":        []string{"true"},
 | 
						|
				"max-keys":           []string{"100"},
 | 
						|
				"encoding-type":      []string{"gzip"},
 | 
						|
			},
 | 
						|
			prefix:       "photos/",
 | 
						|
			token:        "token",
 | 
						|
			startAfter:   "start-after",
 | 
						|
			delimiter:    SlashSeparator,
 | 
						|
			fetchOwner:   true,
 | 
						|
			maxKeys:      100,
 | 
						|
			encodingType: "gzip",
 | 
						|
			errCode:      ErrNone,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			values: url.Values{
 | 
						|
				"prefix":             []string{"photos/"},
 | 
						|
				"continuation-token": []string{"dG9rZW4="},
 | 
						|
				"start-after":        []string{"start-after"},
 | 
						|
				"delimiter":          []string{SlashSeparator},
 | 
						|
				"fetch-owner":        []string{"true"},
 | 
						|
				"encoding-type":      []string{"gzip"},
 | 
						|
			},
 | 
						|
			prefix:       "photos/",
 | 
						|
			token:        "token",
 | 
						|
			startAfter:   "start-after",
 | 
						|
			delimiter:    SlashSeparator,
 | 
						|
			fetchOwner:   true,
 | 
						|
			maxKeys:      maxObjectList,
 | 
						|
			encodingType: "gzip",
 | 
						|
			errCode:      ErrNone,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			values: url.Values{
 | 
						|
				"prefix":             []string{"photos/"},
 | 
						|
				"continuation-token": []string{""},
 | 
						|
				"start-after":        []string{"start-after"},
 | 
						|
				"delimiter":          []string{SlashSeparator},
 | 
						|
				"fetch-owner":        []string{"true"},
 | 
						|
				"encoding-type":      []string{"gzip"},
 | 
						|
			},
 | 
						|
			prefix:       "",
 | 
						|
			token:        "",
 | 
						|
			startAfter:   "",
 | 
						|
			delimiter:    "",
 | 
						|
			fetchOwner:   false,
 | 
						|
			maxKeys:      0,
 | 
						|
			encodingType: "",
 | 
						|
			errCode:      ErrIncorrectContinuationToken,
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for i, testCase := range testCases {
 | 
						|
		prefix, token, startAfter, delimiter, fetchOwner, maxKeys, encodingType, errCode := getListObjectsV2Args(testCase.values)
 | 
						|
 | 
						|
		if errCode != testCase.errCode {
 | 
						|
			t.Errorf("Test %d: Expected error code:%d, got %d", i+1, testCase.errCode, errCode)
 | 
						|
		}
 | 
						|
		if prefix != testCase.prefix {
 | 
						|
			t.Errorf("Test %d: Expected %s, got %s", i+1, testCase.prefix, prefix)
 | 
						|
		}
 | 
						|
		if token != testCase.token {
 | 
						|
			t.Errorf("Test %d: Expected %s, got %s", i+1, testCase.token, token)
 | 
						|
		}
 | 
						|
		if startAfter != testCase.startAfter {
 | 
						|
			t.Errorf("Test %d: Expected %s, got %s", i+1, testCase.startAfter, startAfter)
 | 
						|
		}
 | 
						|
		if delimiter != testCase.delimiter {
 | 
						|
			t.Errorf("Test %d: Expected %s, got %s", i+1, testCase.delimiter, delimiter)
 | 
						|
		}
 | 
						|
		if fetchOwner != testCase.fetchOwner {
 | 
						|
			t.Errorf("Test %d: Expected %t, got %t", i+1, testCase.fetchOwner, fetchOwner)
 | 
						|
		}
 | 
						|
		if maxKeys != testCase.maxKeys {
 | 
						|
			t.Errorf("Test %d: Expected %d, got %d", i+1, testCase.maxKeys, maxKeys)
 | 
						|
		}
 | 
						|
		if encodingType != testCase.encodingType {
 | 
						|
			t.Errorf("Test %d: Expected %s, got %s", i+1, testCase.encodingType, encodingType)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Test list objects resources V1.
 | 
						|
func TestListObjectsV1Resources(t *testing.T) {
 | 
						|
	testCases := []struct {
 | 
						|
		values                    url.Values
 | 
						|
		prefix, marker, delimiter string
 | 
						|
		maxKeys                   int
 | 
						|
		encodingType              string
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			values: url.Values{
 | 
						|
				"prefix":        []string{"photos/"},
 | 
						|
				"marker":        []string{"test"},
 | 
						|
				"delimiter":     []string{SlashSeparator},
 | 
						|
				"max-keys":      []string{"100"},
 | 
						|
				"encoding-type": []string{"gzip"},
 | 
						|
			},
 | 
						|
			prefix:       "photos/",
 | 
						|
			marker:       "test",
 | 
						|
			delimiter:    SlashSeparator,
 | 
						|
			maxKeys:      100,
 | 
						|
			encodingType: "gzip",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			values: url.Values{
 | 
						|
				"prefix":        []string{"photos/"},
 | 
						|
				"marker":        []string{"test"},
 | 
						|
				"delimiter":     []string{SlashSeparator},
 | 
						|
				"encoding-type": []string{"gzip"},
 | 
						|
			},
 | 
						|
			prefix:       "photos/",
 | 
						|
			marker:       "test",
 | 
						|
			delimiter:    SlashSeparator,
 | 
						|
			maxKeys:      maxObjectList,
 | 
						|
			encodingType: "gzip",
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for i, testCase := range testCases {
 | 
						|
		prefix, marker, delimiter, maxKeys, encodingType, argsErr := getListObjectsV1Args(testCase.values)
 | 
						|
		if argsErr != ErrNone {
 | 
						|
			t.Errorf("Test %d: argument parsing failed, got %v", i+1, argsErr)
 | 
						|
		}
 | 
						|
		if prefix != testCase.prefix {
 | 
						|
			t.Errorf("Test %d: Expected %s, got %s", i+1, testCase.prefix, prefix)
 | 
						|
		}
 | 
						|
		if marker != testCase.marker {
 | 
						|
			t.Errorf("Test %d: Expected %s, got %s", i+1, testCase.marker, marker)
 | 
						|
		}
 | 
						|
		if delimiter != testCase.delimiter {
 | 
						|
			t.Errorf("Test %d: Expected %s, got %s", i+1, testCase.delimiter, delimiter)
 | 
						|
		}
 | 
						|
		if maxKeys != testCase.maxKeys {
 | 
						|
			t.Errorf("Test %d: Expected %d, got %d", i+1, testCase.maxKeys, maxKeys)
 | 
						|
		}
 | 
						|
		if encodingType != testCase.encodingType {
 | 
						|
			t.Errorf("Test %d: Expected %s, got %s", i+1, testCase.encodingType, encodingType)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Validates extracting information for object resources.
 | 
						|
func TestGetObjectsResources(t *testing.T) {
 | 
						|
	testCases := []struct {
 | 
						|
		values                     url.Values
 | 
						|
		uploadID                   string
 | 
						|
		partNumberMarker, maxParts int
 | 
						|
		encodingType               string
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			values: url.Values{
 | 
						|
				"uploadId":           []string{"11123-11312312311231-12313"},
 | 
						|
				"part-number-marker": []string{"1"},
 | 
						|
				"max-parts":          []string{"1000"},
 | 
						|
				"encoding-type":      []string{"gzip"},
 | 
						|
			},
 | 
						|
			uploadID:         "11123-11312312311231-12313",
 | 
						|
			partNumberMarker: 1,
 | 
						|
			maxParts:         1000,
 | 
						|
			encodingType:     "gzip",
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for i, testCase := range testCases {
 | 
						|
		uploadID, partNumberMarker, maxParts, encodingType, argsErr := getObjectResources(testCase.values)
 | 
						|
		if argsErr != ErrNone {
 | 
						|
			t.Errorf("Test %d: argument parsing failed, got %v", i+1, argsErr)
 | 
						|
		}
 | 
						|
		if uploadID != testCase.uploadID {
 | 
						|
			t.Errorf("Test %d: Expected %s, got %s", i+1, testCase.uploadID, uploadID)
 | 
						|
		}
 | 
						|
		if partNumberMarker != testCase.partNumberMarker {
 | 
						|
			t.Errorf("Test %d: Expected %d, got %d", i+1, testCase.partNumberMarker, partNumberMarker)
 | 
						|
		}
 | 
						|
		if maxParts != testCase.maxParts {
 | 
						|
			t.Errorf("Test %d: Expected %d, got %d", i+1, testCase.maxParts, maxParts)
 | 
						|
		}
 | 
						|
		if encodingType != testCase.encodingType {
 | 
						|
			t.Errorf("Test %d: Expected %s, got %s", i+1, testCase.encodingType, encodingType)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |