mirror of
https://github.com/minio/minio.git
synced 2025-02-03 18:06:00 -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
|
||||
// cmdType value.
|
||||
func testServicesCmdHandler(cmd cmdType, args map[string]interface{}, t *testing.T) {
|
||||
func testServicesCmdHandler(cmd cmdType, t *testing.T) {
|
||||
adminTestBed, err := prepareAdminXLTestBed()
|
||||
if err != nil {
|
||||
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()
|
||||
var body []byte
|
||||
|
||||
if cmd == setCreds {
|
||||
body, _ = xml.Marshal(setCredsReq{Username: args["username"].(string), Password: args["password"].(string)})
|
||||
}
|
||||
|
||||
req, err := getServiceCmdRequest(cmd, credentials, body)
|
||||
if err != nil {
|
||||
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 {
|
||||
resp, _ := ioutil.ReadAll(rec.Body)
|
||||
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.
|
||||
func TestServiceStatusHandler(t *testing.T) {
|
||||
testServicesCmdHandler(statusCmd, nil, t)
|
||||
testServicesCmdHandler(statusCmd, t)
|
||||
}
|
||||
|
||||
// Test for service restart management REST API.
|
||||
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) {
|
||||
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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user