upgrade_risks_prediction_test.go

Copyright 2023 Red Hat, Inc

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

package
server_test
import
(
"encoding/json"
"fmt"
"net/http"
"net/http/httptest"
"strings"
"testing"
"time"
"github.com/google/uuid"
iou_helpers
"github.com/RedHatInsights/insights-operator-utils/tests/helpers"
"github.com/RedHatInsights/insights-results-smart-proxy/server"
"github.com/RedHatInsights/insights-results-smart-proxy/tests/helpers"
"github.com/RedHatInsights/insights-results-smart-proxy/tests/testdata"
ctypes
"github.com/RedHatInsights/insights-results-types"
"github.com/stretchr/testify/assert"
)
const
upgradeRecommended
=
` { "upgrade_recommendation": { "upgrade_recommended": true, "upgrade_risks_predictors": { "alerts": null, "operator_conditions": null } }, "meta": { "last_checked_at": "0001-01-01T00:00:00Z" }, "status":"ok" } `
const
upgradeNotRecommended
=
` { "upgrade_recommendation": { "upgrade_recommended": false, "upgrade_risks_predictors": { "alerts": [ { "name": "alert1", "namespace": "namespace1", "severity": "info", "url": "https://my-cluster.com/monitoring/alerts?orderBy=asc&sortBy=Severity&alert-name=alert1" } ], "operator_conditions": [ { "name": "foc1", "condition": "ExampleCondition", "reason": "Example reason", "url": "https://my-cluster.com/k8s/cluster/config.openshift.io~v1~ClusterOperator/foc1" } ] } }, "meta": { "last_checked_at": "0001-01-01T00:00:00Z" }, "status":"ok" } `
const
upgradeRecommendedMultiClusterOk
=
` { "status":"ok", "predictions": [ { "cluster_id": "%s", "prediction_status": "ok", "upgrade_recommended": true, "upgrade_risks_predictors": { "alerts": [], "operator_conditions": [] }, "last_checked_at": "0001-01-01T00:00:00Z" }, { "cluster_id": "%s", "prediction_status": "ok", "upgrade_recommended": true, "upgrade_risks_predictors": { "alerts": [], "operator_conditions": [] }, "last_checked_at": "0001-01-01T00:00:00Z" } ] } `
const
upgradeRecommendedMultiClusterTwoOkOneNoData
=
` { "status":"ok", "predictions": [ { "cluster_id": "34c3ecc5-624a-49a5-bab8-4fdc5e51a266", "prediction_status": "ok", "upgrade_recommended": true, "upgrade_risks_predictors": { "alerts": [], "operator_conditions": [] }, "last_checked_at": "0001-01-01T00:00:00Z" }, { "cluster_id": "2b9195d4-85d4-428f-944b-4b46f08911f8", "prediction_status": "ok", "upgrade_recommended": true, "upgrade_risks_predictors": { "alerts": [], "operator_conditions": [] }, "last_checked_at": "0001-01-01T00:00:00Z" }, { "cluster_id": "aae0ff10-9892-4572-b77f-73eb3e39825f", "prediction_status": "No data for the cluster", "upgrade_recommended": null, "upgrade_risks_predictors": null, "last_checked_at": null } ] } `
const
upgradeMultiClusterTwoClustersNoData
=
` { "status":"ok", "predictions": [ { "cluster_id": "34c3ecc5-624a-49a5-bab8-4fdc5e51a266", "prediction_status": "No data for the cluster", "upgrade_recommended": null, "upgrade_risks_predictors": null, "last_checked_at": null }, { "cluster_id": "aae0ff10-9892-4572-b77f-73eb3e39825f", "prediction_status": "No data for the cluster", "upgrade_recommended": null, "upgrade_risks_predictors": null, "last_checked_at": null } ] } `
const
multiClusterURPRequestBody
=
`{"clusters": ["34c3ecc5-624a-49a5-bab8-4fdc5e51a288"]}`
func
checkBodyAsMap
(
t
testing
.
TB
,
expected
,
got
[
]
byte
)
{
var
expectedObj
,
gotObj
map
[
string
]
interface
{
}
err
:=
json
.
Unmarshal
(
expected
,
&
expectedObj
)
if
err
!=
nil
{
err
=
fmt
.
Errorf
(
`expected is not JSON. value = "%v", err = "%v"`
,
string
(
expected
)
,
err
)
}
assert
.
NoError
(
t
,
err
)
err
=
json
.
Unmarshal
(
got
,
&
gotObj
)
if
err
!=
nil
{
err
=
fmt
.
Errorf
(
`got is not JSON. value = "%v", err = "%v"`
,
string
(
got
)
,
err
)
}
assert
.
NoError
(
t
,
err
)
assert
.
Equal
(
t
,
expectedObj
,
gotObj
,
fmt
.
Sprintf
(
`%v and %v should represent the same json`
,
string
(
expected
)
,
string
(
got
)
)
,
)
}
func
checkBodyRaw
(
t
testing
.
TB
,
expected
,
got
[
]
byte
)
{
assert
.
Equal
(
t
,
expected
,
got
)
}
func
generateUUIDs
(
count
int
)
[
]
string
{
uuids
:=
make
(
[
]
string
,
count
)
for
i
:=
0
;
i
<
count
;
i
++
{
uuids
[
i
]
=
uuid
.
New
(
)
.
String
(
)
}
return
uuids
}
func
TestHTTPServer_GetUpgradeRisksPrediction
(
t
*
testing
.
T
)
{
helpers
.
RunTestWithTimeout
(
t
,
func
(
t
testing
.
TB
)
{
defer
helpers
.
CleanAfterGock
(
t
)
clusterInfoList
:=
testdata
.
GetRandomClusterInfoListAllUnManaged
(
3
)
cluster
:=
clusterInfoList
[
0
]
.
ID

prepare response from amsclient for list of clusters

		
amsClientMock
:=
helpers
.
AMSClientWithOrgResults
(
testdata
.
OrgID
,
clusterInfoList
,
)
expectedResponse
:=
upgradeRecommended
testServer
:=
helpers
.
CreateHTTPServer
(
&
helpers
.
DefaultServerConfig
,
nil
,
amsClientMock
,
nil
,
nil
,
nil
,
nil
,
nil
)
helpers
.
GockExpectAPIRequest
(
t
,
helpers
.
DefaultServicesConfig
.
UpgradeRisksPredictionEndpoint
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodGet
,
Endpoint
:
"cluster/{clusterId}/upgrade-risks-prediction"
,
EndpointArgs
:
[
]
interface
{
}
{
cluster
}
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusOK
,
Body
:
testdata
.
UpgradeRecommended
,
}
,
)
iou_helpers
.
AssertAPIRequest
(
t
,
testServer
,
serverConfigXRH
.
APIv2Prefix
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodGet
,
Endpoint
:
server
.
UpgradeRisksPredictionEndpoint
,
EndpointArgs
:
[
]
interface
{
}
{
cluster
}
,
XRHIdentity
:
goodXRHAuthToken
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusOK
,
Body
:
expectedResponse
,
BodyChecker
:
checkBodyAsMap
,
}
,
)
}
,
testTimeout
)
}
func
TestHTTPServer_GetUpgradeRisksPredictionNotRecommended
(
t
*
testing
.
T
)
{
helpers
.
RunTestWithTimeout
(
t
,
func
(
t
testing
.
TB
)
{
defer
helpers
.
CleanAfterGock
(
t
)
clusterInfoList
:=
testdata
.
GetRandomClusterInfoListAllUnManaged
(
3
)
cluster
:=
clusterInfoList
[
0
]
.
ID

prepare response from amsclient for list of clusters

		
amsClientMock
:=
helpers
.
AMSClientWithOrgResults
(
testdata
.
OrgID
,
clusterInfoList
,
)
expectedResponse
:=
upgradeNotRecommended
testServer
:=
helpers
.
CreateHTTPServer
(
&
helpers
.
DefaultServerConfig
,
nil
,
amsClientMock
,
nil
,
nil
,
nil
,
nil
,
nil
)
helpers
.
GockExpectAPIRequest
(
t
,
helpers
.
DefaultServicesConfig
.
UpgradeRisksPredictionEndpoint
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodGet
,
Endpoint
:
"cluster/{clusterId}/upgrade-risks-prediction"
,
EndpointArgs
:
[
]
interface
{
}
{
cluster
}
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusOK
,
Body
:
testdata
.
UpgradeNotRecommended
,
}
,
)
iou_helpers
.
AssertAPIRequest
(
t
,
testServer
,
serverConfigXRH
.
APIv2Prefix
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodGet
,
Endpoint
:
server
.
UpgradeRisksPredictionEndpoint
,
EndpointArgs
:
[
]
interface
{
}
{
cluster
}
,
XRHIdentity
:
goodXRHAuthToken
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusOK
,
Body
:
expectedResponse
,
BodyChecker
:
checkBodyAsMap
,
}
,
)
}
,
testTimeout
)
}
func
TestHTTPServer_GetUpgradeRisksPredictionOfflineAMS
(
t
*
testing
.
T
)
{
helpers
.
RunTestWithTimeout
(
t
,
func
(
t
testing
.
TB
)
{
cluster
:=
testdata
.
GetRandomClusterInfoListAllUnManaged
(
1
)
[
0
]
.
ID
testServer
:=
helpers
.
CreateHTTPServer
(
&
helpers
.
DefaultServerConfig
,
nil
,
nil
,
nil
,
nil
,
nil
,
nil
,
nil
)
iou_helpers
.
AssertAPIRequest
(
t
,
testServer
,
serverConfigXRH
.
APIv2Prefix
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodGet
,
Endpoint
:
server
.
UpgradeRisksPredictionEndpoint
,
EndpointArgs
:
[
]
interface
{
}
{
cluster
}
,
XRHIdentity
:
goodXRHAuthToken
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusServiceUnavailable
,
}
,
)
}
,
testTimeout
)
}
func
TestHTTPServer_GetUpgradeRisksPredictionClusterNotBelonging
(
t
*
testing
.
T
)
{
helpers
.
RunTestWithTimeout
(
t
,
func
(
t
testing
.
TB
)
{
defer
helpers
.
CleanAfterGock
(
t
)
clusterInfoList
:=
testdata
.
GetRandomClusterInfoListAllUnManaged
(
3
)
cluster
:=
testdata
.
GetRandomClusterInfoListAllUnManaged
(
1
)
[
0
]
.
ID

prepare response from amsclient for list of clusters

		
amsClientMock
:=
helpers
.
AMSClientWithOrgResults
(
testdata
.
OrgID
,
clusterInfoList
,
)
testServer
:=
helpers
.
CreateHTTPServer
(
&
helpers
.
DefaultServerConfig
,
nil
,
amsClientMock
,
nil
,
nil
,
nil
,
nil
,
nil
)
iou_helpers
.
AssertAPIRequest
(
t
,
testServer
,
serverConfigXRH
.
APIv2Prefix
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodGet
,
Endpoint
:
server
.
UpgradeRisksPredictionEndpoint
,
EndpointArgs
:
[
]
interface
{
}
{
cluster
}
,
XRHIdentity
:
goodXRHAuthToken
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusNotFound
,
}
,
)
}
,
testTimeout
)
}
func
TestHTTPServer_GetUpgradeRisksPredictionNotFound
(
t
*
testing
.
T
)
{
helpers
.
RunTestWithTimeout
(
t
,
func
(
t
testing
.
TB
)
{
defer
helpers
.
CleanAfterGock
(
t
)
clusterInfoList
:=
testdata
.
GetRandomClusterInfoListAllUnManaged
(
3
)
cluster
:=
clusterInfoList
[
0
]
.
ID

prepare response from amsclient for list of clusters

		
amsClientMock
:=
helpers
.
AMSClientWithOrgResults
(
testdata
.
OrgID
,
clusterInfoList
,
)
testServer
:=
helpers
.
CreateHTTPServer
(
&
helpers
.
DefaultServerConfig
,
nil
,
amsClientMock
,
nil
,
nil
,
nil
,
nil
,
nil
)
helpers
.
GockExpectAPIRequest
(
t
,
helpers
.
DefaultServicesConfig
.
UpgradeRisksPredictionEndpoint
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodGet
,
Endpoint
:
"cluster/{clusterId}/upgrade-risks-prediction"
,
EndpointArgs
:
[
]
interface
{
}
{
cluster
}
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusNotFound
,
}
,
)
iou_helpers
.
AssertAPIRequest
(
t
,
testServer
,
serverConfigXRH
.
APIv2Prefix
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodGet
,
Endpoint
:
server
.
UpgradeRisksPredictionEndpoint
,
EndpointArgs
:
[
]
interface
{
}
{
cluster
}
,
XRHIdentity
:
goodXRHAuthToken
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusNotFound
,
}
,
)
}
,
testTimeout
)
}
func
TestHTTPServer_GetUpgradeRisksPredictionInvalidResponse
(
t
*
testing
.
T
)
{
helpers
.
RunTestWithTimeout
(
t
,
func
(
t
testing
.
TB
)
{
defer
helpers
.
CleanAfterGock
(
t
)
clusterInfoList
:=
testdata
.
GetRandomClusterInfoListAllUnManaged
(
3
)
cluster
:=
clusterInfoList
[
0
]
.
ID

prepare response from amsclient for list of clusters

		
amsClientMock
:=
helpers
.
AMSClientWithOrgResults
(
testdata
.
OrgID
,
clusterInfoList
,
)
testServer
:=
helpers
.
CreateHTTPServer
(
&
helpers
.
DefaultServerConfig
,
nil
,
amsClientMock
,
nil
,
nil
,
nil
,
nil
,
nil
)
helpers
.
GockExpectAPIRequest
(
t
,
helpers
.
DefaultServicesConfig
.
UpgradeRisksPredictionEndpoint
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodGet
,
Endpoint
:
"cluster/{clusterId}/upgrade-risks-prediction"
,
EndpointArgs
:
[
]
interface
{
}
{
cluster
}
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusOK
,
Body
:
`this is not a valid response`
,
}
,
)
iou_helpers
.
AssertAPIRequest
(
t
,
testServer
,
serverConfigXRH
.
APIv2Prefix
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodGet
,
Endpoint
:
server
.
UpgradeRisksPredictionEndpoint
,
EndpointArgs
:
[
]
interface
{
}
{
cluster
}
,
XRHIdentity
:
goodXRHAuthToken
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusBadRequest
,
}
,
)
}
,
testTimeout
)
}
func
TestHTTPServer_GetUpgradeRisksPredictionClusterHasNoData
(
t
*
testing
.
T
)
{
helpers
.
RunTestWithTimeout
(
t
,
func
(
t
testing
.
TB
)
{
defer
helpers
.
CleanAfterGock
(
t
)
clusterInfoList
:=
testdata
.
GetRandomClusterInfoListAllUnManaged
(
3
)
cluster
:=
clusterInfoList
[
0
]
.
ID

prepare response from amsclient for list of clusters

		
amsClientMock
:=
helpers
.
AMSClientWithOrgResults
(
testdata
.
OrgID
,
clusterInfoList
,
)
testServer
:=
helpers
.
CreateHTTPServer
(
&
helpers
.
DefaultServerConfig
,
nil
,
amsClientMock
,
nil
,
nil
,
nil
,
nil
,
nil
)
helpers
.
GockExpectAPIRequest
(
t
,
helpers
.
DefaultServicesConfig
.
UpgradeRisksPredictionEndpoint
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodGet
,
Endpoint
:
"cluster/{clusterId}/upgrade-risks-prediction"
,
EndpointArgs
:
[
]
interface
{
}
{
cluster
}
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusNotFound
,
Body
:
"No data for the cluster"
,
}
,
)
iou_helpers
.
AssertAPIRequest
(
t
,
testServer
,
serverConfigXRH
.
APIv2Prefix
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodGet
,
Endpoint
:
server
.
UpgradeRisksPredictionEndpoint
,
EndpointArgs
:
[
]
interface
{
}
{
cluster
}
,
XRHIdentity
:
goodXRHAuthToken
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusNotFound
,
Body
:
`No data for the cluster`
,
BodyChecker
:
checkBodyRaw
,
}
,
)
}
,
testTimeout
)
}
func
TestHTTPServer_GetUpgradeRisksPredictionUnavailableDataEngineering
(
t
*
testing
.
T
)
{
helpers
.
RunTestWithTimeout
(
t
,
func
(
t
testing
.
TB
)
{
clusterInfoList
:=
testdata
.
GetRandomClusterInfoListAllUnManaged
(
3
)
cluster
:=
clusterInfoList
[
0
]
.
ID

prepare response from amsclient for list of clusters

		
amsClientMock
:=
helpers
.
AMSClientWithOrgResults
(
testdata
.
OrgID
,
clusterInfoList
,
)
testServer
:=
helpers
.
CreateHTTPServer
(
&
helpers
.
DefaultServerConfig
,
nil
,
amsClientMock
,
nil
,
nil
,
nil
,
nil
,
nil
)
iou_helpers
.
AssertAPIRequest
(
t
,
testServer
,
serverConfigXRH
.
APIv2Prefix
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodGet
,
Endpoint
:
server
.
UpgradeRisksPredictionEndpoint
,
EndpointArgs
:
[
]
interface
{
}
{
cluster
}
,
XRHIdentity
:
goodXRHAuthToken
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusServiceUnavailable
,
}
,
)
}
,
testTimeout
)
}
func
TestHTTPServer_GetUpgradeRisksPredictionManagedCluster
(
t
*
testing
.
T
)
{
helpers
.
RunTestWithTimeout
(
t
,
func
(
t
testing
.
TB
)
{
defer
helpers
.
CleanAfterGock
(
t
)
clusterInfoList
:=
testdata
.
GetRandomClusterInfoListAllManaged
(
1
)
cluster
:=
clusterInfoList
[
0
]
.
ID

prepare response from amsclient for list of clusters

		
amsClientMock
:=
helpers
.
AMSClientWithOrgResults
(
testdata
.
OrgID
,
clusterInfoList
,
)
testServer
:=
helpers
.
CreateHTTPServer
(
&
helpers
.
DefaultServerConfig
,
nil
,
amsClientMock
,
nil
,
nil
,
nil
,
nil
,
nil
)
iou_helpers
.
AssertAPIRequest
(
t
,
testServer
,
serverConfigXRH
.
APIv2Prefix
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodGet
,
Endpoint
:
server
.
UpgradeRisksPredictionEndpoint
,
EndpointArgs
:
[
]
interface
{
}
{
cluster
}
,
XRHIdentity
:
goodXRHAuthToken
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusNoContent
,
}
,
)
}
,
testTimeout
)
}
func
TestHTTPServer_GetUpgradeRisksPrediction__timesout
(
t
*
testing
.
T
)
{
helpers
.
RunTestWithTimeout
(
t
,
func
(
t
testing
.
TB
)
{
defer
helpers
.
CleanAfterGock
(
t
)
clusterInfoList
:=
testdata
.
GetRandomClusterInfoListAllUnManaged
(
3
)
cluster
:=
clusterInfoList
[
0
]
.
ID

prepare response from amsclient for list of clusters

		
amsClientMock
:=
helpers
.
AMSClientWithOrgResults
(
testdata
.
OrgID
,
clusterInfoList
,
)
dataEngServer
:=
httptest
.
NewServer
(
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
time
.
Sleep
(
6
*
time
.
Second
)
_
,
err
:=
fmt
.
Fprint
(
w
,
upgradeRecommended
)
assert
.
NoError
(
t
,
err
)
}
)
)
defer
dataEngServer
.
Close
(
)
servicesConfig
:=
helpers
.
DefaultServicesConfig
servicesConfig
.
UpgradeRisksPredictionEndpoint
=
dataEngServer
.
URL
testServer
:=
helpers
.
CreateHTTPServer
(
&
helpers
.
DefaultServerConfig
,
&
servicesConfig
,
amsClientMock
,
nil
,
nil
,
nil
,
nil
,
nil
)
iou_helpers
.
AssertAPIRequest
(
t
,
testServer
,
serverConfigXRH
.
APIv2Prefix
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodGet
,
Endpoint
:
server
.
UpgradeRisksPredictionEndpoint
,
EndpointArgs
:
[
]
interface
{
}
{
cluster
}
,
XRHIdentity
:
goodXRHAuthToken
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusServiceUnavailable
,
}
,
)
}
,
testTimeout
)
}
func
TestHTTPServer_GetMulticlusterURPNoBody
(
t
*
testing
.
T
)
{
helpers
.
RunTestWithTimeout
(
t
,
func
(
t
testing
.
TB
)
{
testServer
:=
helpers
.
CreateHTTPServer
(
&
helpers
.
DefaultServerConfig
,
nil
,
nil
,
nil
,
nil
,
nil
,
nil
,
nil
)
expectedResponse
:=
`{"status":"client didn't provide request body"}`
iou_helpers
.
AssertAPIRequest
(
t
,
testServer
,
serverConfigXRH
.
APIv2Prefix
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodPost
,
Endpoint
:
server
.
UpgradeRisksPredictionMultiClusterEndpoint
,
XRHIdentity
:
goodXRHAuthToken
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusBadRequest
,
Body
:
expectedResponse
,
BodyChecker
:
checkBodyAsMap
,
}
,
)
}
,
testTimeout
)
}
func
TestHTTPServer_GetMulticlusterUpgradeRisksServiceUnvailable
(
t
*
testing
.
T
)
{
helpers
.
RunTestWithTimeout
(
t
,
func
(
t
testing
.
TB
)
{
testServer
:=
helpers
.
CreateHTTPServer
(
&
helpers
.
DefaultServerConfig
,
nil
,
nil
,
nil
,
nil
,
nil
,
nil
,
nil
)
expectedResponse
:=
`{"status":"Upgrade Failure Prediction service is unreachable"}`
iou_helpers
.
AssertAPIRequest
(
t
,
testServer
,
serverConfigXRH
.
APIv2Prefix
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodPost
,
Endpoint
:
server
.
UpgradeRisksPredictionMultiClusterEndpoint
,
XRHIdentity
:
goodXRHAuthToken
,
Body
:
helpers
.
ToJSONString
(
testdata
.
ClusterIDListInReq
)
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusServiceUnavailable
,
Body
:
expectedResponse
,
BodyChecker
:
checkBodyAsMap
,
}
,
)
}
,
testTimeout
)
}
func
TestHTTPServer_GetMulticlusterUpgradeRisksPredictionTwoClusters
(
t
*
testing
.
T
)
{
helpers
.
RunTestWithTimeout
(
t
,
func
(
t
testing
.
TB
)
{
dataEngServer
:=
httptest
.
NewServer
(
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
var
clusters
ctypes
.
ClusterListInRequest
err
:=
json
.
NewDecoder
(
r
.
Body
)
.
Decode
(
&
clusters
)
assert
.
NoError
(
t
,
err
)
val
:=
fmt
.
Sprintf
(
upgradeRecommendedMultiClusterOk
,
clusters
.
Clusters
[
0
]
,
clusters
.
Clusters
[
1
]
)
_
,
err
=
fmt
.
Fprint
(
w
,
val
)
assert
.
NoError
(
t
,
err
)
}
)
)
defer
dataEngServer
.
Close
(
)
servicesConfig
:=
helpers
.
DefaultServicesConfig
servicesConfig
.
UpgradeRisksPredictionEndpoint
=
dataEngServer
.
URL
testServer
:=
helpers
.
CreateHTTPServer
(
&
helpers
.
DefaultServerConfig
,
&
servicesConfig
,
nil
,
nil
,
nil
,
nil
,
nil
,
nil
)
cluster1
:=
"34c3ecc5-624a-49a5-bab8-4fdc5e51a266"
cluster2
:=
"34c3ecc5-624a-49a5-bab8-4fdc5e51a288"
reqBody
:=
fmt
.
Sprintf
(
`{"clusters": ["%s", "%s"]}`
,
cluster1
,
cluster2
)
expectedResponse
:=
fmt
.
Sprintf
(
upgradeRecommendedMultiClusterOk
,
cluster1
,
cluster2
)
iou_helpers
.
AssertAPIRequest
(
t
,
testServer
,
serverConfigXRH
.
APIv2Prefix
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodPost
,
Endpoint
:
server
.
UpgradeRisksPredictionMultiClusterEndpoint
,
Body
:
reqBody
,
XRHIdentity
:
goodXRHAuthToken
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusOK
,
Body
:
expectedResponse
,
BodyChecker
:
checkBodyAsMap
,
}
,
)
}
,
testTimeout
)
}
func
TestHTTPServer_GetMulticlusterUpgradeRisksPredictionNoData
(
t
*
testing
.
T
)
{
helpers
.
RunTestWithTimeout
(
t
,
func
(
t
testing
.
TB
)
{
dataEngServer
:=
httptest
.
NewServer
(
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
var
clusters
ctypes
.
ClusterListInRequest
err
:=
json
.
NewDecoder
(
r
.
Body
)
.
Decode
(
&
clusters
)
assert
.
NoError
(
t
,
err
)
_
,
err
=
fmt
.
Fprint
(
w
,
upgradeMultiClusterTwoClustersNoData
)
assert
.
NoError
(
t
,
err
)
}
)
)
defer
dataEngServer
.
Close
(
)
servicesConfig
:=
helpers
.
DefaultServicesConfig
servicesConfig
.
UpgradeRisksPredictionEndpoint
=
dataEngServer
.
URL
testServer
:=
helpers
.
CreateHTTPServer
(
&
helpers
.
DefaultServerConfig
,
&
servicesConfig
,
nil
,
nil
,
nil
,
nil
,
nil
,
nil
)

Same as response from data-eng, but omiting empty values

		
expectedResponse
:=
` { "predictions": [ { "cluster_id": "34c3ecc5-624a-49a5-bab8-4fdc5e51a266", "prediction_status":"No data for the cluster" }, { "cluster_id": "aae0ff10-9892-4572-b77f-73eb3e39825f", "prediction_status":"No data for the cluster" } ], "status": "ok" } `
iou_helpers
.
AssertAPIRequest
(
t
,
testServer
,
serverConfigXRH
.
APIv2Prefix
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodPost
,
Endpoint
:
server
.
UpgradeRisksPredictionMultiClusterEndpoint
,
Body
:
multiClusterURPRequestBody
,
XRHIdentity
:
goodXRHAuthToken
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusOK
,
Body
:
expectedResponse
,
BodyChecker
:
checkBodyAsMap
,
}
,
)
}
,
testTimeout
)
}
func
TestHTTPServer_GetMulticlusterUpgradeRisksPredictionOneNoData
(
t
*
testing
.
T
)
{
helpers
.
RunTestWithTimeout
(
t
,
func
(
t
testing
.
TB
)
{
dataEngServer
:=
httptest
.
NewServer
(
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
var
clusters
ctypes
.
ClusterListInRequest
err
:=
json
.
NewDecoder
(
r
.
Body
)
.
Decode
(
&
clusters
)
assert
.
NoError
(
t
,
err
)
_
,
err
=
fmt
.
Fprint
(
w
,
upgradeRecommendedMultiClusterTwoOkOneNoData
)
assert
.
NoError
(
t
,
err
)
}
)
)
defer
dataEngServer
.
Close
(
)
servicesConfig
:=
helpers
.
DefaultServicesConfig
servicesConfig
.
UpgradeRisksPredictionEndpoint
=
dataEngServer
.
URL
testServer
:=
helpers
.
CreateHTTPServer
(
&
helpers
.
DefaultServerConfig
,
&
servicesConfig
,
nil
,
nil
,
nil
,
nil
,
nil
,
nil
)

Same as response from data-eng, but omiting empty values

		
expectedResponse
:=
` { "status":"ok", "predictions": [ { "cluster_id": "34c3ecc5-624a-49a5-bab8-4fdc5e51a266", "prediction_status": "ok", "upgrade_recommended": true, "upgrade_risks_predictors": { "alerts": [], "operator_conditions": [] }, "last_checked_at": "0001-01-01T00:00:00Z" }, { "cluster_id": "2b9195d4-85d4-428f-944b-4b46f08911f8", "prediction_status": "ok", "upgrade_recommended": true, "upgrade_risks_predictors": { "alerts": [], "operator_conditions": [] }, "last_checked_at": "0001-01-01T00:00:00Z" }, { "cluster_id": "aae0ff10-9892-4572-b77f-73eb3e39825f", "prediction_status": "No data for the cluster" } ] } `
iou_helpers
.
AssertAPIRequest
(
t
,
testServer
,
serverConfigXRH
.
APIv2Prefix
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodPost
,
Endpoint
:
server
.
UpgradeRisksPredictionMultiClusterEndpoint
,
Body
:
multiClusterURPRequestBody
,
XRHIdentity
:
goodXRHAuthToken
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusOK
,
Body
:
expectedResponse
,
BodyChecker
:
checkBodyAsMap
,
}
,
)
}
,
testTimeout
)
}
func
TestHTTPServer_GetMulticlusterUpgradeRisksPredictionMaxAllowedClusters
(
t
*
testing
.
T
)
{
helpers
.
RunTestWithTimeout
(
t
,
func
(
t
testing
.
TB
)
{
dataEngServer
:=
httptest
.
NewServer
(
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
var
clusters
ctypes
.
ClusterListInRequest
err
:=
json
.
NewDecoder
(
r
.
Body
)
.
Decode
(
&
clusters
)
assert
.
NoError
(
t
,
err
)
val
:=
fmt
.
Sprintf
(
upgradeRecommendedMultiClusterOk
,
clusters
.
Clusters
[
0
]
,
clusters
.
Clusters
[
1
]
)
_
,
err
=
fmt
.
Fprint
(
w
,
val
)
assert
.
NoError
(
t
,
err
)
}
)
)
defer
dataEngServer
.
Close
(
)
servicesConfig
:=
helpers
.
DefaultServicesConfig
servicesConfig
.
UpgradeRisksPredictionEndpoint
=
dataEngServer
.
URL
testServer
:=
helpers
.
CreateHTTPServer
(
&
helpers
.
DefaultServerConfig
,
&
servicesConfig
,
nil
,
nil
,
nil
,
nil
,
nil
,
nil
)
clusters
:=
generateUUIDs
(
server
.
MaxAllowedClusters
)
reqBody
:=
fmt
.
Sprintf
(
`{"clusters": ["%s"]}`
,
strings
.
Join
(
clusters
,
`","`
)
)
iou_helpers
.
AssertAPIRequest
(
t
,
testServer
,
serverConfigXRH
.
APIv2Prefix
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodPost
,
Endpoint
:
server
.
UpgradeRisksPredictionMultiClusterEndpoint
,
Body
:
reqBody
,
XRHIdentity
:
goodXRHAuthToken
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusOK
,
Body
:
fmt
.
Sprintf
(
upgradeRecommendedMultiClusterOk
,
clusters
[
0
]
,
clusters
[
1
]
)
,
BodyChecker
:
checkBodyAsMap
,
}
,
)
}
,
testTimeout
)
}
func
TestHTTPServer_GetMulticlusterURPOverMaxAllowed
(
t
*
testing
.
T
)
{
helpers
.
RunTestWithTimeout
(
t
,
func
(
t
testing
.
TB
)
{
testServer
:=
helpers
.
CreateHTTPServer
(
&
helpers
.
DefaultServerConfig
,
nil
,
nil
,
nil
,
nil
,
nil
,
nil
,
nil
)
clusters
:=
generateUUIDs
(
server
.
MaxAllowedClusters
+
1
)
reqBody
:=
fmt
.
Sprintf
(
`{"clusters": ["%s"]}`
,
strings
.
Join
(
clusters
,
`","`
)
)
expectedResponse
:=
`{"status":"the maximum amount of clusters allowed are 100"}`
iou_helpers
.
AssertAPIRequest
(
t
,
testServer
,
serverConfigXRH
.
APIv2Prefix
,
&
helpers
.
APIRequest
{
Method
:
http
.
MethodPost
,
Endpoint
:
server
.
UpgradeRisksPredictionMultiClusterEndpoint
,
Body
:
reqBody
,
XRHIdentity
:
goodXRHAuthToken
,
}
,
&
helpers
.
APIResponse
{
StatusCode
:
http
.
StatusBadRequest
,
Body
:
expectedResponse
,
BodyChecker
:
checkBodyAsMap
,
}
,
)
}
,
testTimeout
)
}