Add delete service function implementation. (#2124)

pull/2076/head
Todd 4 years ago committed by GitHub
parent 5f66d8f2af
commit a1c2f9f4d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -138,7 +138,7 @@ func (s Service) ListWorkers(ctx context.Context, req *pbs.ListWorkersRequest) (
return &pbs.ListWorkersResponse{Items: finalItems}, nil
}
// GetWorkers implements the interface pbs.WorkerServiceServer.
// GetWorker implements the interface pbs.WorkerServiceServer.
func (s Service) GetWorker(ctx context.Context, req *pbs.GetWorkerRequest) (*pbs.GetWorkerResponse, error) {
const op = "workers.(Service).GetWorker"
@ -176,6 +176,22 @@ func (s Service) GetWorker(ctx context.Context, req *pbs.GetWorkerRequest) (*pbs
return &pbs.GetWorkerResponse{Item: item}, nil
}
// DeleteWorker implements the interface pbs.WorkerServiceServer.
func (s Service) DeleteWorker(ctx context.Context, req *pbs.DeleteWorkerRequest) (*pbs.DeleteWorkerResponse, error) {
if err := validateDeleteRequest(req); err != nil {
return nil, err
}
authResults := s.authResult(ctx, req.GetId(), action.Delete)
if authResults.Error != nil {
return nil, authResults.Error
}
_, err := s.deleteFromRepo(ctx, req.GetId())
if err != nil {
return nil, err
}
return nil, nil
}
func (s Service) listFromRepo(ctx context.Context, scopeIds []string) ([]*servers.Worker, error) {
repo, err := s.repoFn()
if err != nil {
@ -206,6 +222,22 @@ func (s Service) getFromRepo(ctx context.Context, id string) (*servers.Worker, e
return w, nil
}
func (s Service) deleteFromRepo(ctx context.Context, id string) (bool, error) {
const op = "workers.(Service).deleteFromRepo"
repo, err := s.repoFn()
if err != nil {
return false, err
}
rows, err := repo.DeleteWorker(ctx, id)
if err != nil {
if errors.IsNotFoundError(err) {
return false, nil
}
return false, errors.Wrap(ctx, err, op, errors.WithMsg("unable to delete worker"))
}
return rows > 0, nil
}
func (s Service) authResult(ctx context.Context, id string, a action.Type) auth.VerifyResults {
res := auth.VerifyResults{}
repo, err := s.repoFn()
@ -357,3 +389,7 @@ func validateListRequest(req *pbs.ListWorkersRequest) error {
}
return nil
}
func validateDeleteRequest(req *pbs.DeleteWorkerRequest) error {
return handlers.ValidateDeleteRequest(handlers.NoopValidatorFn, req, servers.WorkerPrefix)
}

@ -221,3 +221,66 @@ func TestList(t *testing.T) {
})
}
}
func TestDelete(t *testing.T) {
conn, _ := db.TestSetup(t, "postgres")
wrap := db.TestWrapper(t)
iamRepo := iam.TestRepo(t, conn, wrap)
iamRepoFn := func() (*iam.Repository, error) {
return iamRepo, nil
}
rw := db.New(conn)
kms := kms.TestKms(t, conn, wrap)
repoFn := func() (*servers.Repository, error) {
return servers.NewRepository(rw, rw, kms)
}
ctx := context.Background()
s, err := NewService(ctx, repoFn, iamRepoFn)
require.NoError(t, err, "Error when getting new worker service.")
w := servers.TestWorker(t, conn, wrap)
cases := []struct {
name string
scopeId string
req *pbs.DeleteWorkerRequest
res *pbs.DeleteWorkerResponse
err error
}{
{
name: "Delete an Existing Worker",
scopeId: w.GetScopeId(),
req: &pbs.DeleteWorkerRequest{
Id: w.GetPublicId(),
},
},
{
name: "Delete bad worker id",
scopeId: w.GetScopeId(),
req: &pbs.DeleteWorkerRequest{
Id: servers.WorkerPrefix + "_doesntexis",
},
err: handlers.ApiErrorWithCode(codes.NotFound),
},
{
name: "Bad Worker Id formatting",
scopeId: w.GetScopeId(),
req: &pbs.DeleteWorkerRequest{
Id: "bad_format",
},
err: handlers.ApiErrorWithCode(codes.InvalidArgument),
},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
got, gErr := s.DeleteWorker(auth.DisabledAuthTestContext(iamRepoFn, tc.scopeId), tc.req)
if tc.err != nil {
require.Error(gErr)
assert.True(errors.Is(gErr, tc.err), "DeleteWorker(%+v) got error %v, wanted %v", tc.req, gErr, tc.err)
}
assert.EqualValuesf(tc.res, got, "DeleteWorker(%+v) got response %q, wanted %q", tc.req, got, tc.res)
})
}
}

Loading…
Cancel
Save