mirror of https://github.com/minio/minio.git
				
				
				
			
		
			
				
	
	
		
			183 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			5.4 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 auth
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"testing"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| func TestExpToInt64(t *testing.T) {
 | |
| 	testCases := []struct {
 | |
| 		exp             interface{}
 | |
| 		expectedFailure bool
 | |
| 	}{
 | |
| 		{"", true},
 | |
| 		{"-1", true},
 | |
| 		{"1574812326", false},
 | |
| 		{1574812326, false},
 | |
| 		{int64(1574812326), false},
 | |
| 		{int(1574812326), false},
 | |
| 		{uint(1574812326), false},
 | |
| 		{uint64(1574812326), false},
 | |
| 		{json.Number("1574812326"), false},
 | |
| 		{1574812326.000, false},
 | |
| 		{time.Duration(3) * time.Minute, false},
 | |
| 	}
 | |
| 
 | |
| 	for _, testCase := range testCases {
 | |
| 		testCase := testCase
 | |
| 		t.Run("", func(t *testing.T) {
 | |
| 			_, err := ExpToInt64(testCase.exp)
 | |
| 			if err != nil && !testCase.expectedFailure {
 | |
| 				t.Errorf("Expected success but got failure %s", err)
 | |
| 			}
 | |
| 			if err == nil && testCase.expectedFailure {
 | |
| 				t.Error("Expected failure but got success")
 | |
| 			}
 | |
| 		})
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestIsAccessKeyValid(t *testing.T) {
 | |
| 	testCases := []struct {
 | |
| 		accessKey      string
 | |
| 		expectedResult bool
 | |
| 	}{
 | |
| 		{alphaNumericTable[:accessKeyMinLen], true},
 | |
| 		{alphaNumericTable[:accessKeyMinLen+1], true},
 | |
| 		{alphaNumericTable[:accessKeyMinLen-1], false},
 | |
| 	}
 | |
| 
 | |
| 	for i, testCase := range testCases {
 | |
| 		result := IsAccessKeyValid(testCase.accessKey)
 | |
| 		if result != testCase.expectedResult {
 | |
| 			t.Fatalf("test %v: expected: %v, got: %v", i+1, testCase.expectedResult, result)
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestIsSecretKeyValid(t *testing.T) {
 | |
| 	testCases := []struct {
 | |
| 		secretKey      string
 | |
| 		expectedResult bool
 | |
| 	}{
 | |
| 		{alphaNumericTable[:secretKeyMinLen], true},
 | |
| 		{alphaNumericTable[:secretKeyMinLen+1], true},
 | |
| 		{alphaNumericTable[:secretKeyMinLen-1], false},
 | |
| 	}
 | |
| 
 | |
| 	for i, testCase := range testCases {
 | |
| 		result := IsSecretKeyValid(testCase.secretKey)
 | |
| 		if result != testCase.expectedResult {
 | |
| 			t.Fatalf("test %v: expected: %v, got: %v", i+1, testCase.expectedResult, result)
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestGetNewCredentials(t *testing.T) {
 | |
| 	cred, err := GetNewCredentials()
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("Failed to get a new credential")
 | |
| 	}
 | |
| 	if !cred.IsValid() {
 | |
| 		t.Fatalf("Failed to get new valid credential")
 | |
| 	}
 | |
| 	if len(cred.AccessKey) != accessKeyMaxLen {
 | |
| 		t.Fatalf("access key length: expected: %v, got: %v", secretKeyMaxLen, len(cred.AccessKey))
 | |
| 	}
 | |
| 	if len(cred.SecretKey) != secretKeyMaxLen {
 | |
| 		t.Fatalf("secret key length: expected: %v, got: %v", secretKeyMaxLen, len(cred.SecretKey))
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestCreateCredentials(t *testing.T) {
 | |
| 	testCases := []struct {
 | |
| 		accessKey   string
 | |
| 		secretKey   string
 | |
| 		valid       bool
 | |
| 		expectedErr error
 | |
| 	}{
 | |
| 		// Valid access and secret keys with minimum length.
 | |
| 		{alphaNumericTable[:accessKeyMinLen], alphaNumericTable[:secretKeyMinLen], true, nil},
 | |
| 		// Valid access and/or secret keys are longer than minimum length.
 | |
| 		{alphaNumericTable[:accessKeyMinLen+1], alphaNumericTable[:secretKeyMinLen+1], true, nil},
 | |
| 		// Smaller access key.
 | |
| 		{alphaNumericTable[:accessKeyMinLen-1], alphaNumericTable[:secretKeyMinLen], false, ErrInvalidAccessKeyLength},
 | |
| 		// Smaller secret key.
 | |
| 		{alphaNumericTable[:accessKeyMinLen], alphaNumericTable[:secretKeyMinLen-1], false, ErrInvalidSecretKeyLength},
 | |
| 	}
 | |
| 
 | |
| 	for i, testCase := range testCases {
 | |
| 		cred, err := CreateCredentials(testCase.accessKey, testCase.secretKey)
 | |
| 
 | |
| 		if err != nil {
 | |
| 			if testCase.expectedErr == nil {
 | |
| 				t.Fatalf("test %v: error: expected = <nil>, got = %v", i+1, err)
 | |
| 			}
 | |
| 			if testCase.expectedErr.Error() != err.Error() {
 | |
| 				t.Fatalf("test %v: error: expected = %v, got = %v", i+1, testCase.expectedErr, err)
 | |
| 			}
 | |
| 		} else {
 | |
| 			if testCase.expectedErr != nil {
 | |
| 				t.Fatalf("test %v: error: expected = %v, got = <nil>", i+1, testCase.expectedErr)
 | |
| 			}
 | |
| 			if !cred.IsValid() {
 | |
| 				t.Fatalf("test %v: got invalid credentials", i+1)
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestCredentialsEqual(t *testing.T) {
 | |
| 	cred, err := GetNewCredentials()
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("Failed to get a new credential")
 | |
| 	}
 | |
| 	cred2, err := GetNewCredentials()
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("Failed to get a new credential")
 | |
| 	}
 | |
| 	testCases := []struct {
 | |
| 		cred           Credentials
 | |
| 		ccred          Credentials
 | |
| 		expectedResult bool
 | |
| 	}{
 | |
| 		// Same Credentialss.
 | |
| 		{cred, cred, true},
 | |
| 		// Empty credentials to compare.
 | |
| 		{cred, Credentials{}, false},
 | |
| 		// Empty credentials.
 | |
| 		{Credentials{}, cred, false},
 | |
| 		// Two different credentialss
 | |
| 		{cred, cred2, false},
 | |
| 		// Access key is different in credentials to compare.
 | |
| 		{cred, Credentials{AccessKey: "myuser", SecretKey: cred.SecretKey}, false},
 | |
| 		// Secret key is different in credentials to compare.
 | |
| 		{cred, Credentials{AccessKey: cred.AccessKey, SecretKey: "mypassword"}, false},
 | |
| 	}
 | |
| 
 | |
| 	for i, testCase := range testCases {
 | |
| 		result := testCase.cred.Equal(testCase.ccred)
 | |
| 		if result != testCase.expectedResult {
 | |
| 			t.Fatalf("test %v: expected: %v, got: %v", i+1, testCase.expectedResult, result)
 | |
| 		}
 | |
| 	}
 | |
| }
 |