Skip to content

Commit

Permalink
feat(server): improve resource manager test suit debug output (#2487)
Browse files Browse the repository at this point in the history
  • Loading branch information
schoren committed Jun 5, 2023
1 parent 35be564 commit 56276e3
Show file tree
Hide file tree
Showing 7 changed files with 45 additions and 26 deletions.
20 changes: 17 additions & 3 deletions server/resourcemanager/testutil/common_functions.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,27 @@ import (
"encoding/json"
"io"
"net/http"
"net/http/httputil"
"testing"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/kubeshop/tracetest/server/pkg/id"
)

func dumpResponseIfNot(t *testing.T, success bool, resp *http.Response) {
t.Helper()

if success {
return
}

b, _ := httputil.DumpResponse(resp, true)
t.Log("\n", string(b))
t.FailNow()
}

func generateRandomString() string {
generator := id.NewRandGenerator()
return generator.TraceID().String()
Expand Down Expand Up @@ -83,7 +97,7 @@ func responseBodyJSON(t *testing.T, resp *http.Response, ct contentTypeConverter
}

func assertInternalError(t *testing.T, resp *http.Response, ct contentTypeConverter, resourceType, verb string) {
require.Equal(t, 500, resp.StatusCode)
dumpResponseIfNot(t, assert.Equal(t, 500, resp.StatusCode), resp)

jsonBody := responseBodyJSON(t, resp, ct)

Expand All @@ -94,6 +108,6 @@ func assertInternalError(t *testing.T, resp *http.Response, ct contentTypeConver
}{}
json.Unmarshal([]byte(jsonBody), &bodyValues)

require.Equal(t, 500, bodyValues.Code)
require.Contains(t, bodyValues.Error, "error "+verb+" resource "+resourceType)
dumpResponseIfNot(t, assert.Equal(t, 500, bodyValues.Code), resp)
dumpResponseIfNot(t, assert.Contains(t, bodyValues.Error, "error "+verb+" resource "+resourceType), resp)
}
5 changes: 3 additions & 2 deletions server/resourcemanager/testutil/operations_augmented.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"testing"

rm "github.com/kubeshop/tracetest/server/resourcemanager"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

Expand All @@ -27,7 +28,7 @@ var getAugmentedSuccessOperation = buildSingleStepOperation(singleStepOperationT
},
assertResponse: func(t *testing.T, resp *http.Response, ct contentTypeConverter, rt ResourceTypeTest) {
t.Helper()
require.Equal(t, 200, resp.StatusCode)
dumpResponseIfNot(t, assert.Equal(t, 200, resp.StatusCode), resp)

jsonBody := responseBodyJSON(t, resp, ct)

Expand Down Expand Up @@ -59,7 +60,7 @@ var ListAugmentedSuccessOperation = buildSingleStepOperation(singleStepOperation
},
assertResponse: func(t *testing.T, resp *http.Response, ct contentTypeConverter, rt ResourceTypeTest) {
t.Helper()
require.Equal(t, 200, resp.StatusCode)
dumpResponseIfNot(t, assert.Equal(t, 200, resp.StatusCode), resp)

jsonBody := responseBodyJSON(t, resp, ct)

Expand Down
7 changes: 4 additions & 3 deletions server/resourcemanager/testutil/operations_create.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"testing"

rm "github.com/kubeshop/tracetest/server/resourcemanager"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

Expand Down Expand Up @@ -35,15 +36,15 @@ var createNoIDOperation = buildSingleStepOperation(singleStepOperationTester{
)
},
assertResponse: func(t *testing.T, resp *http.Response, ct contentTypeConverter, rt ResourceTypeTest) {
require.Equal(t, 201, resp.StatusCode)
dumpResponseIfNot(t, assert.Equal(t, 201, resp.StatusCode), resp)

jsonBody := responseBodyJSON(t, resp, ct)

clean := removeIDFromJSON(rt.SampleJSON)
expected := ct.toJSON(clean)

rt.customJSONComparer(t, OperationCreateNoID, expected, removeIDFromJSON(jsonBody))
require.NotEmpty(t, extractID(jsonBody))
dumpResponseIfNot(t, assert.NotEmpty(t, extractID(jsonBody)), resp)
},
})

Expand All @@ -62,7 +63,7 @@ var createSuccessOperation = buildSingleStepOperation(singleStepOperationTester{
)
},
assertResponse: func(t *testing.T, resp *http.Response, ct contentTypeConverter, rt ResourceTypeTest) {
require.Equal(t, 201, resp.StatusCode)
dumpResponseIfNot(t, assert.Equal(t, 201, resp.StatusCode), resp)

jsonBody := responseBodyJSON(t, resp, ct)
expected := ct.toJSON(rt.SampleJSON)
Expand Down
9 changes: 5 additions & 4 deletions server/resourcemanager/testutil/operations_delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"testing"

rm "github.com/kubeshop/tracetest/server/resourcemanager"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"golang.org/x/exp/slices"
)
Expand Down Expand Up @@ -38,15 +39,15 @@ var deleteSuccessOperation = buildSingleStepOperation(singleStepOperationTester{

req := buildGetRequest(rt, ct, testServer, t)
resp := doRequest(t, req, ct.contentType, testServer)
require.Equal(t, 404, resp.StatusCode)
dumpResponseIfNot(t, assert.Equal(t, 404, resp.StatusCode), resp)
},
buildRequest: func(t *testing.T, testServer *httptest.Server, ct contentTypeConverter, rt ResourceTypeTest) *http.Request {
return buildDeleteRequest(rt, ct, testServer, t)
},
assertResponse: func(t *testing.T, resp *http.Response, ct contentTypeConverter, rt ResourceTypeTest) {
t.Helper()
require.Equal(t, 204, resp.StatusCode)
require.Empty(t, responseBody(t, resp))
dumpResponseIfNot(t, assert.Equal(t, 204, resp.StatusCode), resp)
dumpResponseIfNot(t, assert.Empty(t, responseBody(t, resp)), resp)
},
})

Expand All @@ -60,7 +61,7 @@ var deleteNotFoundOperation = buildSingleStepOperation(singleStepOperationTester
},
assertResponse: func(t *testing.T, resp *http.Response, ct contentTypeConverter, rt ResourceTypeTest) {
t.Helper()
require.Equal(t, 404, resp.StatusCode)
dumpResponseIfNot(t, assert.Equal(t, 404, resp.StatusCode), resp)
},
})

Expand Down
5 changes: 3 additions & 2 deletions server/resourcemanager/testutil/operations_get.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"testing"

rm "github.com/kubeshop/tracetest/server/resourcemanager"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

Expand Down Expand Up @@ -39,7 +40,7 @@ var getSuccessOperation = buildSingleStepOperation(singleStepOperationTester{
},
assertResponse: func(t *testing.T, resp *http.Response, ct contentTypeConverter, rt ResourceTypeTest) {
t.Helper()
require.Equal(t, 200, resp.StatusCode)
dumpResponseIfNot(t, assert.Equal(t, 200, resp.StatusCode), resp)

jsonBody := responseBodyJSON(t, resp, ct)

Expand All @@ -59,7 +60,7 @@ var getNotFoundOperation = buildSingleStepOperation(singleStepOperationTester{
},
assertResponse: func(t *testing.T, resp *http.Response, ct contentTypeConverter, rt ResourceTypeTest) {
t.Helper()
require.Equal(t, 404, resp.StatusCode)
dumpResponseIfNot(t, assert.Equal(t, 404, resp.StatusCode), resp)
},
})

Expand Down
20 changes: 10 additions & 10 deletions server/resourcemanager/testutil/operations_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ var listNoResultsOperation = buildSingleStepOperation(singleStepOperationTester{
)
},
assertResponse: func(t *testing.T, resp *http.Response, ct contentTypeConverter, rt ResourceTypeTest) {
require.Equal(t, 200, resp.StatusCode)
dumpResponseIfNot(t, assert.Equal(t, 200, resp.StatusCode), resp)

jsonBody := responseBodyJSON(t, resp, ct)

Expand All @@ -61,7 +61,7 @@ var listNoResultsOperation = buildSingleStepOperation(singleStepOperationTester{
"items": []
}`

require.JSONEq(t, expected, jsonBody)
dumpResponseIfNot(t, assert.JSONEq(t, expected, jsonBody), resp)
},
})

Expand All @@ -80,7 +80,7 @@ var listSuccessOperation = buildSingleStepOperation(singleStepOperationTester{
)
},
assertResponse: func(t *testing.T, resp *http.Response, ct contentTypeConverter, rt ResourceTypeTest) {
require.Equal(t, 200, resp.StatusCode)
dumpResponseIfNot(t, assert.Equal(t, 200, resp.StatusCode), resp)

jsonBody := responseBodyJSON(t, resp, ct)

Expand All @@ -90,11 +90,11 @@ var listSuccessOperation = buildSingleStepOperation(singleStepOperationTester{
}
json.Unmarshal([]byte(jsonBody), &parsedJsonBody)

require.Equal(t, 1, parsedJsonBody.Count)
require.Equal(t, 1, len(parsedJsonBody.Items))
dumpResponseIfNot(t, assert.Equal(t, 1, parsedJsonBody.Count), resp)
dumpResponseIfNot(t, assert.Equal(t, 1, len(parsedJsonBody.Items)), resp)

obtainedAsBytes, err := json.Marshal(parsedJsonBody.Items[0])
require.NoError(t, err)
dumpResponseIfNot(t, assert.NoError(t, err), resp)

expected := ct.toJSON(rt.SampleJSON)
obtained := string(obtainedAsBytes)
Expand Down Expand Up @@ -125,7 +125,7 @@ var listWithInvalidSortFieldOperation = buildSingleStepOperation(singleStepOpera
)
},
assertResponse: func(t *testing.T, resp *http.Response, ct contentTypeConverter, rt ResourceTypeTest) {
require.Equal(t, 400, resp.StatusCode)
dumpResponseIfNot(t, assert.Equal(t, 400, resp.StatusCode), resp)
},
})

Expand Down Expand Up @@ -169,7 +169,7 @@ func buildPaginationOperationStep(sortDirection, sortField string) operationTest
},
assertResponse: func(t *testing.T, resp *http.Response, ct contentTypeConverter, rt ResourceTypeTest) {
sortField := sortField
require.Equal(t, 200, resp.StatusCode)
dumpResponseIfNot(t, assert.Equal(t, 200, resp.StatusCode), resp)

jsonBody := responseBodyJSON(t, resp, ct)

Expand All @@ -179,8 +179,8 @@ func buildPaginationOperationStep(sortDirection, sortField string) operationTest
}
json.Unmarshal([]byte(jsonBody), &parsedJsonBody)

require.Equal(t, 3, parsedJsonBody.Count)
require.Greater(t, len(parsedJsonBody.Items), 1)
dumpResponseIfNot(t, assert.Equal(t, 3, parsedJsonBody.Count), resp)
dumpResponseIfNot(t, assert.Greater(t, len(parsedJsonBody.Items), 1), resp)

// we skip the 1st item, so starting in 1 instead of 0
// makes things match later when comparing to len(parsedJsonBody.Items)
Expand Down
5 changes: 3 additions & 2 deletions server/resourcemanager/testutil/operations_update.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"testing"

rm "github.com/kubeshop/tracetest/server/resourcemanager"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

Expand All @@ -32,7 +33,7 @@ var updateSuccessOperation = buildSingleStepOperation(singleStepOperationTester{
},
assertResponse: func(t *testing.T, resp *http.Response, ct contentTypeConverter, rt ResourceTypeTest) {
t.Helper()
require.Equal(t, 200, resp.StatusCode)
dumpResponseIfNot(t, assert.Equal(t, 200, resp.StatusCode), resp)

jsonBody := responseBodyJSON(t, resp, ct)

Expand All @@ -52,7 +53,7 @@ var updateNotFoundOperation = buildSingleStepOperation(singleStepOperationTester
},
assertResponse: func(t *testing.T, resp *http.Response, ct contentTypeConverter, rt ResourceTypeTest) {
t.Helper()
require.Equal(t, 404, resp.StatusCode)
dumpResponseIfNot(t, assert.Equal(t, 404, resp.StatusCode), resp)
},
})

Expand Down

0 comments on commit 56276e3

Please sign in to comment.