Skip to content

Commit

Permalink
update(cli-e2e): Add e2e tests for the environment resource (#2680)
Browse files Browse the repository at this point in the history
* Update environment tests

* Adding more tests to environment

* Updating tests

* Updating tests

* Updating tests and documentation

* Updating list tests

* Adding more test cases

* Updating test timeout to 5 min

* Updating environment list pretty test

* Adding more tests
  • Loading branch information
danielbdias authored and mathnogueira committed Jun 13, 2023
1 parent e862b9d commit 71ec435
Show file tree
Hide file tree
Showing 17 changed files with 650 additions and 129 deletions.
16 changes: 16 additions & 0 deletions cli/utils/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,22 @@ func (resourceClient ResourceClient) List(ctx context.Context, listArgs ListArgs
return nil, fmt.Errorf("could not send request: %w", err)
}

if resp.StatusCode == http.StatusBadRequest {
body := IOReadCloserToString(resp.Body)

var parsedError struct {
Code int `json:"code"`
Error string `json:"error"`
}
err = json.Unmarshal([]byte(body), &parsedError)
if err != nil {
return nil, fmt.Errorf("could not list resource: %w", err)
}

// parse error message
return nil, fmt.Errorf("could not list resource: %s", parsedError.Error)
}

body := IOReadCloserToString(resp.Body)
if listArgs.All {
baseListResponse, err := parseListResponse(body)
Expand Down
2 changes: 1 addition & 1 deletion testing/cli-e2etest/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ help: Makefile ## show list of commands

test: # run tests for this application
go clean -testcache
go test -v -timeout 150s -p 1 ./...
go test -v -timeout 300s -p 1 ./...
188 changes: 92 additions & 96 deletions testing/cli-e2etest/README.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package environment

import (
"fmt"
"testing"

"github.com/kubeshop/tracetest/cli-e2etest/environment"
"github.com/kubeshop/tracetest/cli-e2etest/helpers"
"github.com/kubeshop/tracetest/cli-e2etest/testscenarios/types"
"github.com/kubeshop/tracetest/cli-e2etest/tracetestcli"
"github.com/stretchr/testify/require"
)
Expand All @@ -24,26 +26,76 @@ func TestApplyNewEnvironment(t *testing.T) {

// When I try to get an environment that doesn't exists
// Then it should return error message
result := tracetestcli.Exec(t, "get environment --id .noenv", tracetestcli.WithCLIConfig(cliConfig))
result := tracetestcli.Exec(t, "get environment --id .noenv --output yaml", tracetestcli.WithCLIConfig(cliConfig))
helpers.RequireExitCodeEqual(t, result, 0)
require.Contains(result.StdOut, "Resource environment with ID .noenv not found")

// When I try to set up a new environment
// Then it should be applied with success
// newEnvironmentPath := env.GetTestResourcePath(t, "new-environment")

// result = tracetestcli.Exec(t, fmt.Sprintf("apply environment --file %s", newEnvironmentPath), tracetestcli.WithCLIConfig(cliConfig))
// require.Equal(0, result.ExitCode)

// // When I try to get the environment applied on the last step
// // Then it should return it
// result = tracetestcli.Exec(t, "get environment --id .env", tracetestcli.WithCLIConfig(cliConfig))
// require.Equal(0, result.ExitCode)

// environmentVars := helpers.UnmarshalYAML[types.EnvironmentResource](t, result.StdOut)
// require.Equal("Environment", environmentVars.Type)
// require.Equal(".env", environmentVars.Spec.ID)
// require.Equal(".env", environmentVars.Spec.Name)
// require.Equal("some-value", environmentVars.Spec.Values["FIRST_VALUE"])
// require.Equal("another_value", environmentVars.Spec.Values["SECOND_VALUE"])
newEnvironmentPath := env.GetTestResourcePath(t, "new-environment")

result = tracetestcli.Exec(t, fmt.Sprintf("apply environment --file %s", newEnvironmentPath), tracetestcli.WithCLIConfig(cliConfig))
require.Equal(0, result.ExitCode)

environmentVars := helpers.UnmarshalYAML[types.EnvironmentResource](t, result.StdOut)

require.Equal("Environment", environmentVars.Type)
require.Equal(".env", environmentVars.Spec.ID)
require.Equal(".env", environmentVars.Spec.Name)
require.Len(environmentVars.Spec.Values, 2)
require.Equal("FIRST_VAR", environmentVars.Spec.Values[0].Key)
require.Equal("some-value", environmentVars.Spec.Values[0].Value)
require.Equal("SECOND_VAR", environmentVars.Spec.Values[1].Key)
require.Equal("another_value", environmentVars.Spec.Values[1].Value)

// When I try to get the environment applied on the last step
// Then it should return it
result = tracetestcli.Exec(t, "get environment --id .env --output yaml", tracetestcli.WithCLIConfig(cliConfig))
require.Equal(0, result.ExitCode)

environmentVars = helpers.UnmarshalYAML[types.EnvironmentResource](t, result.StdOut)
require.Equal("Environment", environmentVars.Type)
require.Equal(".env", environmentVars.Spec.ID)
require.Equal(".env", environmentVars.Spec.Name)
require.Len(environmentVars.Spec.Values, 2)
require.Equal("FIRST_VAR", environmentVars.Spec.Values[0].Key)
require.Equal("some-value", environmentVars.Spec.Values[0].Value)
require.Equal("SECOND_VAR", environmentVars.Spec.Values[1].Key)
require.Equal("another_value", environmentVars.Spec.Values[1].Value)

// When I try to update the last environment
// Then it should be applied with success
updatedNewEnvironmentPath := env.GetTestResourcePath(t, "updated-new-environment")

result = tracetestcli.Exec(t, fmt.Sprintf("apply environment --file %s", updatedNewEnvironmentPath), tracetestcli.WithCLIConfig(cliConfig))
require.Equal(0, result.ExitCode)

updatedEnvironmentVars := helpers.UnmarshalYAML[types.EnvironmentResource](t, result.StdOut)
require.Equal("Environment", updatedEnvironmentVars.Type)
require.Equal(".env", updatedEnvironmentVars.Spec.ID)
require.Equal(".env", updatedEnvironmentVars.Spec.Name)
require.Len(updatedEnvironmentVars.Spec.Values, 3)
require.Equal("FIRST_VAR", updatedEnvironmentVars.Spec.Values[0].Key)
require.Equal("some-value", updatedEnvironmentVars.Spec.Values[0].Value)
require.Equal("SECOND_VAR", updatedEnvironmentVars.Spec.Values[1].Key)
require.Equal("updated_value", updatedEnvironmentVars.Spec.Values[1].Value) // this value has been updated
require.Equal("THIRD_VAR", updatedEnvironmentVars.Spec.Values[2].Key)
require.Equal("hello", updatedEnvironmentVars.Spec.Values[2].Value) // this value was added

// When I try to get the environment applied on the last step
// Then it should return it
result = tracetestcli.Exec(t, "get environment --id .env --output yaml", tracetestcli.WithCLIConfig(cliConfig))
require.Equal(0, result.ExitCode)

updatedEnvironmentVars = helpers.UnmarshalYAML[types.EnvironmentResource](t, result.StdOut)
require.Equal("Environment", updatedEnvironmentVars.Type)
require.Equal(".env", updatedEnvironmentVars.Spec.ID)
require.Equal(".env", updatedEnvironmentVars.Spec.Name)
require.Len(updatedEnvironmentVars.Spec.Values, 3)
require.Equal("FIRST_VAR", updatedEnvironmentVars.Spec.Values[0].Key)
require.Equal("some-value", updatedEnvironmentVars.Spec.Values[0].Value)
require.Equal("SECOND_VAR", updatedEnvironmentVars.Spec.Values[1].Key)
require.Equal("updated_value", updatedEnvironmentVars.Spec.Values[1].Value) // this value has been updated
require.Equal("THIRD_VAR", updatedEnvironmentVars.Spec.Values[2].Key)
require.Equal("hello", updatedEnvironmentVars.Spec.Values[2].Value) // this value was added
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package environment

import (
"fmt"
"testing"

"github.com/kubeshop/tracetest/cli-e2etest/environment"
"github.com/kubeshop/tracetest/cli-e2etest/helpers"
"github.com/kubeshop/tracetest/cli-e2etest/testscenarios/types"
"github.com/kubeshop/tracetest/cli-e2etest/tracetestcli"
"github.com/stretchr/testify/require"
)

func TestDeleteEnvironment(t *testing.T) {
// instantiate require with testing helper
require := require.New(t)

// setup isolated e2e environment
env := environment.CreateAndStart(t)
defer env.Close(t)

cliConfig := env.GetCLIConfigPath(t)

// Given I am a Tracetest CLI user
// And I have my server recently created

// When I try to delete an environment that don't exo
// Then it should return an error and say that this resource does not exist
result := tracetestcli.Exec(t, "delete environment --id .env", tracetestcli.WithCLIConfig(cliConfig))
helpers.RequireExitCodeEqual(t, result, 1)
require.Contains(result.StdErr, "Resource environments with ID .env not found") // TODO: update this message to singular

// When I try to set up a new environment
// Then it should be applied with success
newEnvironmentPath := env.GetTestResourcePath(t, "new-environment")

result = tracetestcli.Exec(t, fmt.Sprintf("apply environment --file %s", newEnvironmentPath), tracetestcli.WithCLIConfig(cliConfig))
helpers.RequireExitCodeEqual(t, result, 0)

environmentVars := helpers.UnmarshalYAML[types.EnvironmentResource](t, result.StdOut)
require.Equal("Environment", environmentVars.Type)
require.Equal(".env", environmentVars.Spec.ID)

// When I try to delete the environment
// Then it should delete with success
result = tracetestcli.Exec(t, "delete environment --id .env", tracetestcli.WithCLIConfig(cliConfig))
helpers.RequireExitCodeEqual(t, result, 0)
require.Contains(result.StdOut, "✔ Environment successfully deleted")

// When I try to get an environment again
// Then it should return a message saying that the environment was not found
result = tracetestcli.Exec(t, "get environment --id .env --output yaml", tracetestcli.WithCLIConfig(cliConfig))
helpers.RequireExitCodeEqual(t, result, 0)
require.Contains(result.StdOut, "Resource environment with ID .env not found")
}

0 comments on commit 71ec435

Please sign in to comment.