// This file is part of MinIO Console Server // Copyright (c) 2021 MinIO, Inc. // // 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 . package integration import ( "bytes" b64 "encoding/base64" "encoding/json" "fmt" "io" "log" "net/http" "os" "strconv" "testing" "time" "github.com/go-openapi/loads" "github.com/minio/console/restapi" "github.com/minio/console/restapi/operations" ) var token string func encodeBase64(fileName string) string { /* Helper function to encode in base64 the file name so we can get the path */ path := b64.StdEncoding.EncodeToString([]byte(fileName)) return path } func inspectHTTPResponse(httpResponse *http.Response) string { /* Helper function to inspect the content of a HTTP response. */ b, err := io.ReadAll(httpResponse.Body) if err != nil { log.Fatalln(err) } return "Http Response: " + string(b) } func initConsoleServer() (*restapi.Server, error) { //os.Setenv("CONSOLE_MINIO_SERVER", "localhost:9000") swaggerSpec, err := loads.Embedded(restapi.SwaggerJSON, restapi.FlatSwaggerJSON) if err != nil { return nil, err } noLog := func(string, ...interface{}) { // nothing to log } // Initialize MinIO loggers restapi.LogInfo = noLog restapi.LogError = noLog api := operations.NewConsoleAPI(swaggerSpec) api.Logger = noLog server := restapi.NewServer(api) // register all APIs server.ConfigureAPI() //restapi.GlobalRootCAs, restapi.GlobalPublicCerts, restapi.GlobalTLSCertsManager = globalRootCAs, globalPublicCerts, globalTLSCerts consolePort, _ := strconv.Atoi("9090") server.Host = "0.0.0.0" server.Port = consolePort restapi.Port = "9090" restapi.Hostname = "0.0.0.0" return server, nil } func TestMain(m *testing.M) { // start console server go func() { fmt.Println("start server") srv, err := initConsoleServer() if err != nil { log.Println(err) log.Println("init fail") return } srv.Serve() }() fmt.Println("sleeping") time.Sleep(2 * time.Second) client := &http.Client{ Timeout: 2 * time.Second, } // get login credentials requestData := map[string]string{ "accessKey": "minioadmin", "secretKey": "minioadmin", } requestDataJSON, _ := json.Marshal(requestData) requestDataBody := bytes.NewReader(requestDataJSON) request, err := http.NewRequest("POST", "http://localhost:9090/api/v1/login", requestDataBody) if err != nil { log.Println(err) return } request.Header.Add("Content-Type", "application/json") response, err := client.Do(request) if err != nil { log.Println(err) return } if response != nil { for _, cookie := range response.Cookies() { if cookie.Name == "token" { token = cookie.Value break } } } if token == "" { log.Println("authentication token not found in cookies response") return } code := m.Run() requestDataAdd := map[string]interface{}{ "name": "test1", } requestDataJSON, _ = json.Marshal(requestDataAdd) requestDataBody = bytes.NewReader(requestDataJSON) // get list of buckets request, err = http.NewRequest("DELETE", "http://localhost:9090/api/v1/buckets/test1", requestDataBody) if err != nil { log.Println(err) return } request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) request.Header.Add("Content-Type", "application/json") response, err = client.Do(request) if err != nil { log.Println(err) return } if response != nil { fmt.Println("DELETE StatusCode:", response.StatusCode) } os.Exit(code) }