Add tests for target
This commit is contained in:
parent
72225abc28
commit
f5fe88de15
34
internal/server/ptypes/target.go
Normal file
34
internal/server/ptypes/target.go
Normal 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)),
|
||||
)
|
||||
}
|
||||
@ -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(
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -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 {
|
||||
|
||||
113
internal/server/singleprocess/state/target_test.go
Normal file
113
internal/server/singleprocess/state/target_test.go
Normal 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)
|
||||
}
|
||||
})
|
||||
}
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user