mirror of
https://github.com/minio/minio.git
synced 2025-02-04 02:15:59 -05:00
admin: Enhance set credentials test (#3619)
Add more test cases and ignore access and secret keys set from the env
This commit is contained in:
parent
cead24b0f7
commit
fc880f9b23
@ -187,7 +187,7 @@ func getServiceCmdRequest(cmd cmdType, cred credential, body []byte) (*http.Requ
|
|||||||
|
|
||||||
// testServicesCmdHandler - parametrizes service subcommand tests on
|
// testServicesCmdHandler - parametrizes service subcommand tests on
|
||||||
// cmdType value.
|
// cmdType value.
|
||||||
func testServicesCmdHandler(cmd cmdType, args map[string]interface{}, t *testing.T) {
|
func testServicesCmdHandler(cmd cmdType, t *testing.T) {
|
||||||
adminTestBed, err := prepareAdminXLTestBed()
|
adminTestBed, err := prepareAdminXLTestBed()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("Failed to initialize a single node XL backend for admin handler tests.")
|
t.Fatal("Failed to initialize a single node XL backend for admin handler tests.")
|
||||||
@ -214,10 +214,6 @@ func testServicesCmdHandler(cmd cmdType, args map[string]interface{}, t *testing
|
|||||||
credentials := serverConfig.GetCredential()
|
credentials := serverConfig.GetCredential()
|
||||||
var body []byte
|
var body []byte
|
||||||
|
|
||||||
if cmd == setCreds {
|
|
||||||
body, _ = xml.Marshal(setCredsReq{Username: args["username"].(string), Password: args["password"].(string)})
|
|
||||||
}
|
|
||||||
|
|
||||||
req, err := getServiceCmdRequest(cmd, credentials, body)
|
req, err := getServiceCmdRequest(cmd, credentials, body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Failed to build service status request %v", err)
|
t.Fatalf("Failed to build service status request %v", err)
|
||||||
@ -240,18 +236,6 @@ func testServicesCmdHandler(cmd cmdType, args map[string]interface{}, t *testing
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if cmd == setCreds {
|
|
||||||
// Check if new credentials are set
|
|
||||||
cred := serverConfig.GetCredential()
|
|
||||||
if cred.AccessKey != args["username"].(string) {
|
|
||||||
t.Errorf("Wrong access key, expected = %s, found = %s", args["username"].(string), cred.AccessKey)
|
|
||||||
}
|
|
||||||
if cred.SecretKey != args["password"].(string) {
|
|
||||||
t.Errorf("Wrong secret key, expected = %s, found = %s", args["password"].(string), cred.SecretKey)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if rec.Code != http.StatusOK {
|
if rec.Code != http.StatusOK {
|
||||||
resp, _ := ioutil.ReadAll(rec.Body)
|
resp, _ := ioutil.ReadAll(rec.Body)
|
||||||
t.Errorf("Expected to receive %d status code but received %d. Body (%s)",
|
t.Errorf("Expected to receive %d status code but received %d. Body (%s)",
|
||||||
@ -261,16 +245,94 @@ func testServicesCmdHandler(cmd cmdType, args map[string]interface{}, t *testing
|
|||||||
|
|
||||||
// Test for service status management REST API.
|
// Test for service status management REST API.
|
||||||
func TestServiceStatusHandler(t *testing.T) {
|
func TestServiceStatusHandler(t *testing.T) {
|
||||||
testServicesCmdHandler(statusCmd, nil, t)
|
testServicesCmdHandler(statusCmd, t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test for service restart management REST API.
|
// Test for service restart management REST API.
|
||||||
func TestServiceRestartHandler(t *testing.T) {
|
func TestServiceRestartHandler(t *testing.T) {
|
||||||
testServicesCmdHandler(restartCmd, nil, t)
|
testServicesCmdHandler(restartCmd, t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test for service set creds management REST API.
|
||||||
func TestServiceSetCreds(t *testing.T) {
|
func TestServiceSetCreds(t *testing.T) {
|
||||||
testServicesCmdHandler(setCreds, map[string]interface{}{"username": "minio", "password": "minio123"}, t)
|
adminTestBed, err := prepareAdminXLTestBed()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("Failed to initialize a single node XL backend for admin handler tests.")
|
||||||
|
}
|
||||||
|
defer adminTestBed.TearDown()
|
||||||
|
|
||||||
|
// Initialize admin peers to make admin RPC calls. Note: In a
|
||||||
|
// single node setup, this degenerates to a simple function
|
||||||
|
// call under the hood.
|
||||||
|
eps, err := parseStorageEndpoints([]string{"http://localhost"})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed to parse storage end point - %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set globalMinioAddr to be able to distinguish local endpoints from remote.
|
||||||
|
globalMinioAddr = eps[0].Host
|
||||||
|
initGlobalAdminPeers(eps)
|
||||||
|
|
||||||
|
credentials := serverConfig.GetCredential()
|
||||||
|
var body []byte
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
Username string
|
||||||
|
Password string
|
||||||
|
EnvKeysSet bool
|
||||||
|
ExpectedStatusCode int
|
||||||
|
}{
|
||||||
|
// Bad secret key
|
||||||
|
{"minio", "minio", false, http.StatusBadRequest},
|
||||||
|
// Bad secret key set from the env
|
||||||
|
{"minio", "minio", true, http.StatusMethodNotAllowed},
|
||||||
|
// Good keys set from the env
|
||||||
|
{"minio", "minio123", true, http.StatusMethodNotAllowed},
|
||||||
|
// Successful operation should be the last one to do not change server credentials during tests.
|
||||||
|
{"minio", "minio123", false, http.StatusOK},
|
||||||
|
}
|
||||||
|
for i, testCase := range testCases {
|
||||||
|
// Set or unset environement keys
|
||||||
|
if !testCase.EnvKeysSet {
|
||||||
|
globalEnvAccessKey = ""
|
||||||
|
globalEnvSecretKey = ""
|
||||||
|
} else {
|
||||||
|
globalEnvAccessKey = testCase.Username
|
||||||
|
globalEnvSecretKey = testCase.Password
|
||||||
|
}
|
||||||
|
|
||||||
|
// Construct setCreds request body
|
||||||
|
body, _ = xml.Marshal(setCredsReq{Username: testCase.Username, Password: testCase.Password})
|
||||||
|
// Construct setCreds request
|
||||||
|
req, err := getServiceCmdRequest(setCreds, credentials, body)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed to build service status request %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
rec := httptest.NewRecorder()
|
||||||
|
|
||||||
|
// Execute request
|
||||||
|
adminTestBed.mux.ServeHTTP(rec, req)
|
||||||
|
|
||||||
|
// Check if the http code response is expected
|
||||||
|
if rec.Code != testCase.ExpectedStatusCode {
|
||||||
|
t.Errorf("Test %d: Wrong status code, expected = %d, found = %d", i+1, testCase.ExpectedStatusCode, rec.Code)
|
||||||
|
resp, _ := ioutil.ReadAll(rec.Body)
|
||||||
|
t.Errorf("Expected to receive %d status code but received %d. Body (%s)",
|
||||||
|
http.StatusOK, rec.Code, string(resp))
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we got 200 OK, check if new credentials are really set
|
||||||
|
if rec.Code == http.StatusOK {
|
||||||
|
cred := serverConfig.GetCredential()
|
||||||
|
if cred.AccessKey != testCase.Username {
|
||||||
|
t.Errorf("Test %d: Wrong access key, expected = %s, found = %s", i+1, testCase.Username, cred.AccessKey)
|
||||||
|
}
|
||||||
|
if cred.SecretKey != testCase.Password {
|
||||||
|
t.Errorf("Test %d: Wrong secret key, expected = %s, found = %s", i+1, testCase.Password, cred.SecretKey)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// mkLockQueryVal - helper function to build lock query param.
|
// mkLockQueryVal - helper function to build lock query param.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user