Add tests for target

This commit is contained in:
sophia 2021-09-08 15:56:51 -07:00 committed by Paul Hinze
parent 72225abc28
commit f5fe88de15
No known key found for this signature in database
GPG Key ID: B69DEDF2D55501C0
6 changed files with 172 additions and 16 deletions

View File

@ -0,0 +1,34 @@
package ptypes
import (
validation "github.com/go-ozzo/ozzo-validation/v4"
"github.com/imdario/mergo"
"github.com/mitchellh/go-testing-interface"
"github.com/stretchr/testify/require"
"github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk"
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
)
// TestTarget returns a valid target for tests.
func TestTarget(t testing.T, src *vagrant_server.Target) *vagrant_server.Target {
t.Helper()
if src == nil {
src = &vagrant_server.Target{}
}
require.NoError(t, mergo.Merge(src, &vagrant_server.Target{
Name: "test",
Project: &vagrant_plugin_sdk.Ref_Project{},
}))
return src
}
// ValidateTarget validates the target structure.
func ValidateTarget(t *vagrant_server.Target) error {
return validation.ValidateStruct(t,
validation.Field(&t.Name, validation.By(isEmpty)),
)
}

View File

@ -13,12 +13,12 @@ func (s *service) UpsertTarget(
ctx context.Context,
req *vagrant_server.UpsertTargetRequest,
) (*vagrant_server.UpsertTargetResponse, error) {
m, err := s.state.TargetPut(req.Target)
err := s.state.TargetPut(req.Target)
if err != nil {
return nil, err
}
return &vagrant_server.UpsertTargetResponse{Target: m}, nil
return &vagrant_server.UpsertTargetResponse{Target: req.Target}, nil
}
func (s *service) DeleteTarget(

View File

@ -34,9 +34,10 @@ func TestProject(t *testing.T) {
defer s.Close()
basisRef := testBasis(t, s)
resourceId := "AbCdE"
// Set
err := s.ProjectPut(serverptypes.TestProject(t, &vagrant_server.Project{
ResourceId: "AbCdE",
ResourceId: resourceId,
Basis: basisRef,
Path: "idontexist",
}))
@ -45,21 +46,13 @@ func TestProject(t *testing.T) {
// Get exact
{
resp, err := s.ProjectGet(&vagrant_plugin_sdk.Ref_Project{
ResourceId: "AbCdE",
ResourceId: resourceId,
})
require.NoError(err)
require.NotNil(resp)
}
require.Equal(resp.ResourceId, resourceId)
// TODO:
// Get case insensitive
// {
// resp, err := s.ProjectGet(&vagrant_plugin_sdk.Ref_Project{
// ResourceId: "abcDe",
// })
// require.NoError(err)
// require.NotNil(resp)
// }
}
// List
{

View File

@ -35,7 +35,7 @@ func (s *State) TargetFind(m *vagrant_server.Target) (*vagrant_server.Target, er
return result, err
}
func (s *State) TargetPut(target *vagrant_server.Target) (*vagrant_server.Target, error) {
func (s *State) TargetPut(target *vagrant_server.Target) error {
memTxn := s.inmem.Txn(true)
defer memTxn.Abort()
@ -45,7 +45,7 @@ func (s *State) TargetPut(target *vagrant_server.Target) (*vagrant_server.Target
if err == nil {
memTxn.Commit()
}
return target, err
return err
}
func (s *State) TargetDelete(ref *vagrant_plugin_sdk.Ref_Target) error {

View File

@ -0,0 +1,113 @@
package state
import (
"testing"
"github.com/stretchr/testify/require"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk"
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
serverptypes "github.com/hashicorp/vagrant/internal/server/ptypes"
)
func TestTarget(t *testing.T) {
t.Run("Get returns not found error if not exist", func(t *testing.T) {
require := require.New(t)
s := TestState(t)
defer s.Close()
// Set
_, err := s.TargetGet(&vagrant_plugin_sdk.Ref_Target{
ResourceId: "foo",
})
require.Error(err)
require.Equal(codes.NotFound, status.Code(err))
})
t.Run("Put and Get", func(t *testing.T) {
require := require.New(t)
s := TestState(t)
defer s.Close()
projectRef := testProject(t, s)
resourceId := "AbCdE"
// Set
err := s.TargetPut(serverptypes.TestTarget(t, &vagrant_server.Target{
ResourceId: resourceId,
Project: projectRef,
Name: "test",
}))
require.NoError(err)
// Get exact
{
resp, err := s.TargetGet(&vagrant_plugin_sdk.Ref_Target{
ResourceId: resourceId,
})
require.NoError(err)
require.NotNil(resp)
require.Equal(resp.ResourceId, resourceId)
}
// List
{
resp, err := s.TargetList()
require.NoError(err)
require.Len(resp, 1)
}
})
t.Run("Delete", func(t *testing.T) {
require := require.New(t)
s := TestState(t)
defer s.Close()
projectRef := testProject(t, s)
resourceId := "AbCdE"
// Set
err := s.TargetPut(serverptypes.TestTarget(t, &vagrant_server.Target{
ResourceId: resourceId,
Project: projectRef,
Name: "test",
}))
require.NoError(err)
// Read
resp, err := s.TargetGet(&vagrant_plugin_sdk.Ref_Target{
ResourceId: resourceId,
})
require.NoError(err)
require.NotNil(resp)
// Delete
{
err := s.TargetDelete(&vagrant_plugin_sdk.Ref_Target{
ResourceId: resourceId,
Project: projectRef,
})
require.NoError(err)
}
// Read
{
_, err := s.TargetGet(&vagrant_plugin_sdk.Ref_Target{
ResourceId: resourceId,
})
require.Error(err)
require.Equal(codes.NotFound, status.Code(err))
}
// List
{
resp, err := s.TargetList()
require.NoError(err)
require.Len(resp, 0)
}
})
}

View File

@ -97,6 +97,22 @@ func testBasis(t testing.T, s *State) *vagrant_plugin_sdk.Ref_Basis {
}
}
func testProject(t testing.T, s *State) *vagrant_plugin_sdk.Ref_Project {
basisRef := testBasis(t, s)
s.ProjectPut(serverptypes.TestProject(t, &vagrant_server.Project{
ResourceId: "test-project",
Basis: basisRef,
Path: "idontexist",
Name: "test-project",
}))
return &vagrant_plugin_sdk.Ref_Project{
ResourceId: "test-project",
Path: "idontexist",
Name: "test-project",
Basis: basisRef,
}
}
func testTempDir(t testing.T) string {
dir, err := ioutil.TempDir("", "vagrant-test")
require.NoError(t, err)