101 lines
2.7 KiB
Go
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
|
|
}
|