Commit 50293c8a authored by Dima Brusilovsky's avatar Dima Brusilovsky
Browse files

fix: cli client tests

parent bddd0a98
Showing with 47 additions and 35 deletions
+47 -35
......@@ -8,7 +8,7 @@ import (
type CLIClient interface {
RequestEvaluation(request *cliClient.EvaluationRequest) (*cliClient.EvaluationResponse, error)
CreateEvaluation(request *cliClient.CreateEvaluationRequest) (int, error)
CreateEvaluation(request *cliClient.CreateEvaluationRequest) (*cliClient.CreateEvaluationResponse, error)
UpdateEvaluationValidation(request *cliClient.UpdateEvaluationValidationRequest) error
}
......@@ -40,9 +40,9 @@ type Error struct {
Filename string
}
func (e *Evaluator) CreateEvaluation(cliId string, cliVersion string, k8sVersion string) (int, error) {
evaluationId, err := e.cliClient.CreateEvaluation(&cliClient.CreateEvaluationRequest{
K8sVersion: k8sVersion,
func (e *Evaluator) CreateEvaluation(cliId string, cliVersion string, k8sVersion string) (*cliClient.CreateEvaluationResponse, error) {
createEvaluationResponse, err := e.cliClient.CreateEvaluation(&cliClient.CreateEvaluationRequest{
K8sVersion: &k8sVersion,
CliId: cliId,
Metadata: &cliClient.Metadata{
CliVersion: cliVersion,
......@@ -52,7 +52,7 @@ func (e *Evaluator) CreateEvaluation(cliId string, cliVersion string, k8sVersion
},
})
return evaluationId, err
return createEvaluationResponse, err
}
func (e *Evaluator) Evaluate(validFilesPathsChan chan string, invalidFilesPathsChan chan *validation.InvalidFile, evaluationId int) (*EvaluationResults, []*validation.InvalidFile, []*extractor.FileConfiguration, []*Error, error) {
......
package evaluation
import (
"github.com/datreeio/datree/bl/validation"
"path/filepath"
"testing"
"github.com/datreeio/datree/bl/validation"
"github.com/datreeio/datree/pkg/cliClient"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
......@@ -14,9 +15,9 @@ type mockCliClient struct {
mock.Mock
}
func (m *mockCliClient) CreateEvaluation(createEvaluationRequest *cliClient.CreateEvaluationRequest) (int, error) {
func (m *mockCliClient) CreateEvaluation(createEvaluationRequest *cliClient.CreateEvaluationRequest) (*cliClient.CreateEvaluationResponse, error) {
args := m.Called(createEvaluationRequest)
return args.Get(0).(int), args.Error(1)
return args.Get(0).(*cliClient.CreateEvaluationResponse), args.Error(1)
}
func (m *mockCliClient) RequestEvaluation(evaluationRequest *cliClient.EvaluationRequest) (*cliClient.EvaluationResponse, error) {
......@@ -37,6 +38,7 @@ func (m *mockCliClient) GetVersionMessage(cliVersion string, timeout int) (*cliC
type cliClientMockTestCase struct {
createEvaluation struct {
evaluationId int
k8sVersion string
err error
}
requestEvaluation struct {
......@@ -62,7 +64,7 @@ func TestEvaluate(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
mockedCliClient := &mockCliClient{}
mockedCliClient.On("CreateEvaluation", mock.Anything).Return(tt.mock.cliClient.createEvaluation.evaluationId, tt.mock.cliClient.createEvaluation.err)
mockedCliClient.On("CreateEvaluation", mock.Anything).Return(tt.mock.cliClient.createEvaluation, tt.mock.cliClient.createEvaluation.err)
mockedCliClient.On("UpdateEvaluationValidation", mock.Anything).Return(nil)
evaluator := &Evaluator{
......@@ -163,6 +165,7 @@ func request_evaluation_all_valid() *evaluateTestCase {
cliClient: &cliClientMockTestCase{
createEvaluation: struct {
evaluationId int
k8sVersion string
err error
}{
evaluationId: 1,
......@@ -230,6 +233,7 @@ func request_evaluation_all_invalid() *evaluateTestCase {
cliClient: &cliClientMockTestCase{
createEvaluation: struct {
evaluationId int
k8sVersion string
err error
}{
evaluationId: 1,
......
......@@ -4,6 +4,7 @@ import (
"fmt"
"time"
"github.com/datreeio/datree/pkg/cliClient"
"github.com/datreeio/datree/pkg/extractor"
"github.com/briandowns/spinner"
......@@ -17,7 +18,7 @@ import (
type Evaluator interface {
Evaluate(validFilesPathsChan chan string, invalidFilesPaths chan *validation.InvalidFile, evaluationId int) (*evaluation.EvaluationResults, []*validation.InvalidFile, []*extractor.FileConfiguration, []*evaluation.Error, error)
CreateEvaluation(cliId string, cliVersion string, k8sVersion string) (int, error)
CreateEvaluation(cliId string, cliVersion string, k8sVersion string) (*cliClient.CreateEvaluationResponse, error)
}
type Messager interface {
......@@ -73,7 +74,6 @@ func New(ctx *TestCommandContext) *cobra.Command {
}
testCommandFlags := TestCommandFlags{Output: outputFlag, K8sVersion: k8sVersion}
ctx.K8sValidator = validation.New(k8sVersion)
return test(ctx, args, testCommandFlags)
},
SilenceUsage: true,
......@@ -106,12 +106,13 @@ func test(ctx *TestCommandContext, paths []string, flags TestCommandFlags) error
go ctx.Messager.LoadVersionMessages(messages, ctx.CliVersion)
evaluationId, err := ctx.Evaluator.CreateEvaluation(ctx.LocalConfig.CliId, ctx.CliVersion, flags.K8sVersion)
createEvaluationResponse, err := ctx.Evaluator.CreateEvaluation(ctx.LocalConfig.CliId, ctx.CliVersion, flags.K8sVersion)
if err != nil {
fmt.Println(err.Error())
return err
}
ctx.K8sValidator = validation.New(createEvaluationResponse.K8sVersion)
validFilesPathsChan, invalidFilesPathsChan, errorsChan := ctx.K8sValidator.ValidateResources(paths)
go func() {
for err := range errorsChan {
......@@ -119,7 +120,7 @@ func test(ctx *TestCommandContext, paths []string, flags TestCommandFlags) error
}
}()
results, invalidFiles, filesConfigurations, errors, err := ctx.Evaluator.Evaluate(validFilesPathsChan, invalidFilesPathsChan, evaluationId)
results, invalidFiles, filesConfigurations, errors, err := ctx.Evaluator.Evaluate(validFilesPathsChan, invalidFilesPathsChan, createEvaluationResponse.EvaluationId)
spinner.Stop()
......@@ -135,7 +136,7 @@ func test(ctx *TestCommandContext, paths []string, flags TestCommandFlags) error
PassedPolicyCheckCount: passedPolicyCheckCount,
}
err = evaluation.PrintResults(results, invalidFiles, evaluationSummary, fmt.Sprintf("https://app.datree.io/login?cliId=%s", ctx.LocalConfig.CliId), flags.Output, ctx.Printer, flags.K8sVersion)
err = evaluation.PrintResults(results, invalidFiles, evaluationSummary, fmt.Sprintf("https://app.datree.io/login?cliId=%s", ctx.LocalConfig.CliId), flags.Output, ctx.Printer, createEvaluationResponse.K8sVersion)
var invocationFailedErr error = nil
......
......@@ -4,6 +4,7 @@ import (
"testing"
"github.com/datreeio/datree/bl/validation"
"github.com/datreeio/datree/pkg/cliClient"
"github.com/datreeio/datree/pkg/extractor"
"github.com/datreeio/datree/pkg/printer"
......@@ -22,9 +23,9 @@ func (m *mockEvaluator) Evaluate(validFilesPathsChan chan string, invalidFilesPa
return args.Get(0).(*evaluation.EvaluationResults), args.Get(1).([]*validation.InvalidFile), args.Get(2).([]*extractor.FileConfiguration), args.Get(3).([]*evaluation.Error), args.Error(4)
}
func (m *mockEvaluator) CreateEvaluation(cliId string, cliVersion string, k8sVersion string) (int, error) {
func (m *mockEvaluator) CreateEvaluation(cliId string, cliVersion string, k8sVersion string) (*cliClient.CreateEvaluationResponse, error) {
args := m.Called(cliId, cliVersion, k8sVersion)
return args.Get(0).(int), args.Error(1)
return args.Get(0).(*cliClient.CreateEvaluationResponse), args.Error(1)
}
type mockMessager struct {
......@@ -103,8 +104,7 @@ func TestTestCommand(t *testing.T) {
mockedEvaluator := &mockEvaluator{}
mockedEvaluator.On("Evaluate", mock.Anything, mock.Anything, mock.Anything).Return(evaluationResults, invalidFiles, fileConfigurations, evaluationErrors, nil)
mockedEvaluator.On("CreateEvaluation", mock.Anything, mock.Anything, mock.Anything).Return(evaluationId, nil)
mockedEvaluator.On("CreateEvaluation", mock.Anything, mock.Anything, mock.Anything).Return(&cliClient.CreateEvaluationResponse{EvaluationId: evaluationId, K8sVersion: "1.18.0"}, nil)
messager := &mockMessager{}
messager.On("LoadVersionMessages", mock.Anything, mock.Anything)
......@@ -140,7 +140,7 @@ func TestTestCommand(t *testing.T) {
}
func test_testCommand_no_flags(t *testing.T, evaluator *mockEvaluator, validFilesPathChan chan string, invalidFilesChan chan *validation.InvalidFile, evaluationId int, ctx *TestCommandContext) {
test(ctx, []string{"8/*"}, TestCommandFlags{})
test(ctx, []string{"8/*"}, TestCommandFlags{K8sVersion: "", Output: ""})
evaluator.AssertCalled(t, "Evaluate", validFilesPathChan, invalidFilesChan, evaluationId)
evaluator.AssertNotCalled(t, "PrintFileParsingErrors")
......
......@@ -3,12 +3,13 @@ package cliClient
import (
"bytes"
"encoding/json"
"gopkg.in/yaml.v3"
"io/ioutil"
"net/http"
"path/filepath"
"testing"
"gopkg.in/yaml.v3"
"github.com/datreeio/datree/pkg/extractor"
"github.com/datreeio/datree/pkg/httpClient"
"github.com/stretchr/testify/assert"
......@@ -25,7 +26,7 @@ func (c *mockHTTPClient) Request(method string, resourceURI string, body interfa
return args.Get(0).(httpClient.Response), args.Error(1)
}
func (c *mockHTTPClient) name() {
func (c *mockHTTPClient) name() {
}
......@@ -140,11 +141,10 @@ func TestCreateRequestEvaluation(t *testing.T) {
httpClient: &httpClientMock,
}
actualEvaluationId, _ := client.CreateEvaluation(tt.args.createEvaluationRequest)
res, _ := client.CreateEvaluation(tt.args.createEvaluationRequest)
httpClientMock.AssertCalled(t, "Request", tt.expected.request.method, tt.expected.request.uri, tt.expected.request.body, tt.expected.request.headers)
assert.Equal(t, tt.expected.response.EvaluationId, actualEvaluationId)
assert.Equal(t, tt.expected.response, res)
})
}
}
......@@ -161,9 +161,8 @@ func TestGetVersionMessage(t *testing.T) {
mockedHTTPResponse := httpClient.Response{StatusCode: tt.mock.response.status, Body: body}
httpClientMock.On("Request", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(mockedHTTPResponse, nil)
client := &CliClient{
baseUrl: "http://cli-service.test.io",
baseUrl: "http://cli-service.test.io",
timeoutClient: &httpClientMock,
}
......@@ -312,13 +311,16 @@ func test_requestEvaluation_success() *RequestEvaluationTestCase {
}
func test_createEvaluation_success() *CreateEvaluationTestCase {
k8sVersion := "1.18.0"
return &CreateEvaluationTestCase{
name: "success - create evaluation",
args: struct {
createEvaluationRequest *CreateEvaluationRequest
}{
createEvaluationRequest: &CreateEvaluationRequest{
CliId: "cli_id",
K8sVersion: &k8sVersion,
CliId: "cli_id",
Metadata: &Metadata{
CliVersion: "0.0.1",
Os: "darwin",
......@@ -340,6 +342,7 @@ func test_createEvaluation_success() *CreateEvaluationTestCase {
status: http.StatusOK,
body: &CreateEvaluationResponse{
EvaluationId: 123,
K8sVersion: k8sVersion,
},
},
},
......@@ -361,7 +364,8 @@ func test_createEvaluation_success() *CreateEvaluationTestCase {
method: http.MethodPost,
uri: "/cli/evaluation/create",
body: &CreateEvaluationRequest{
CliId: "cli_id",
K8sVersion: &k8sVersion,
CliId: "cli_id",
Metadata: &Metadata{
CliVersion: "0.0.1",
Os: "darwin",
......@@ -373,6 +377,7 @@ func test_createEvaluation_success() *CreateEvaluationTestCase {
},
response: &CreateEvaluationResponse{
EvaluationId: 123,
K8sVersion: k8sVersion,
},
},
}
......
......@@ -2,8 +2,9 @@ package cliClient
import (
"encoding/json"
"github.com/datreeio/datree/pkg/extractor"
"net/http"
"github.com/datreeio/datree/pkg/extractor"
)
type Metadata struct {
......@@ -16,26 +17,27 @@ type Metadata struct {
type CreateEvaluationRequest struct {
CliId string `json:"cliId"`
Metadata *Metadata `json:"metadata"`
K8sVersion string `json:"k8sVersion"`
K8sVersion *string `json:"k8sVersion"`
}
type CreateEvaluationResponse struct {
EvaluationId int `json:"evaluationId"`
EvaluationId int `json:"evaluationId"`
K8sVersion string `json:"k8sVersion"`
}
func (c *CliClient) CreateEvaluation(request *CreateEvaluationRequest) (int, error) {
func (c *CliClient) CreateEvaluation(request *CreateEvaluationRequest) (*CreateEvaluationResponse, error) {
httpRes, err := c.httpClient.Request(http.MethodPost, "/cli/evaluation/create", request, nil)
if err != nil {
return 0, err
return nil, err
}
var res = &CreateEvaluationResponse{}
err = json.Unmarshal(httpRes.Body, &res)
if err != nil {
return 0, err
return nil, err
}
return res.EvaluationId, nil
return res, nil
}
type Match struct {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment