crowdsec/pkg/cwapi/utils_test.go
2020-07-24 13:26:55 +02:00

101 lines
2.7 KiB
Go

package cwapi
import (
"fmt"
"io/ioutil"
"net/http"
"strings"
"time"
)
const configFile = "./tests/api_config.yaml"
const apiVersion = "v1"
const apiURL = "https://my_test_endpoint"
var apiBaseURL = fmt.Sprintf("%s/%s/", apiURL, apiVersion)
var httpClientMock = &http.Client{
Transport: newMockTransport(),
Timeout: time.Second * 20,
}
type mockTransport struct {
nbTryTokenOK int // to test token expiration
nbTryTokenNOK int
}
func newMockTransport() http.RoundTripper {
return &mockTransport{}
}
func newMockClient() *http.Client {
return &http.Client{
Transport: newMockTransport(),
Timeout: time.Second * 20,
}
}
// Implement http.RoundTripper
func (t *mockTransport) RoundTrip(req *http.Request) (*http.Response, error) {
var responseBody string
var statusCode int
// Create mocked http.Response
response := &http.Response{
Header: make(http.Header),
Request: req,
}
response.Header.Set("Content-Type", "application/json")
switch req.URL.Path {
case "/v1/signin":
responseBody = `{"statusCode": 200, "message": "crowdsec_api_token"}`
statusCode = 200
case "/v1/register":
responseBody = `{"statusCode": 200, "message": "OK"}`
statusCode = 200
case "/v1/signals":
responseBody = `{"statusCode": 200, "message": "OK"}`
statusCode = 200
case "/v1/signals_token_expired":
if t.nbTryTokenOK == 0 {
responseBody = `{"statusCode": 200, "message": "crowdsec_api_token"}`
statusCode = 401
t.nbTryTokenOK++
} else {
responseBody = `{"statusCode": 200, "message": "OK"}`
statusCode = 200
}
case "/v1/signals_token_renew_fail":
if t.nbTryTokenNOK == 0 {
responseBody = `{"statusCode": 200, "message": "crowdsec_api_token"}`
statusCode = 401
t.nbTryTokenNOK++
} else {
responseBody = `{"statusCode": 500, "message": "token expired"}`
statusCode = 500
}
case "/v1/signals_bad_response_code":
responseBody = `{"statusCode": 200, "message": "OK"}`
statusCode = 500
case "/v1/enroll":
responseBody = `{"statusCode": 200, "message": "OK"}`
statusCode = 200
case "/v1/resetpassword":
responseBody = `{"statusCode": 200, "message": "password updated successfully"}`
statusCode = 200
case "/v1/resetpassword_unknown_user":
responseBody = `{"statusCode": 500, "message": "User not found"}`
statusCode = 200
case "/v1/unknown_path":
statusCode = 404
responseBody = `{"error": "unknown URI"}`
case "/v1/malformed_response":
statusCode = 200
responseBody = `{"statusCode" : 200, "msg" : "api_token"`
case "/v1/bad_response":
statusCode = 200
responseBody = `{"statusCode" : 200, "msg" : "api_token"}`
}
response.StatusCode = statusCode
response.Body = ioutil.NopCloser(strings.NewReader(responseBody))
return response, nil
}