Mainflux.mainflux/http/mocks/things.go

54 lines
1.7 KiB
Go

// Copyright (c) Mainflux
// SPDX-License-Identifier: Apache-2.0
package mocks
import (
"context"
"github.com/mainflux/mainflux/pkg/errors"
"github.com/mainflux/mainflux/things/policies"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
var _ policies.AuthServiceClient = (*thingsClient)(nil)
// ServiceErrToken is used to simulate internal server error.
const ServiceErrToken = "unavailable"
type thingsClient struct {
things map[string]string
}
// NewThingsClient returns mock implementation of things service client.
func NewThingsClient(data map[string]string) policies.AuthServiceClient {
return &thingsClient{data}
}
func (tc thingsClient) Authorize(ctx context.Context, req *policies.AuthorizeReq, opts ...grpc.CallOption) (*policies.AuthorizeRes, error) {
secret := req.GetSubject()
// Since there is no appropriate way to simulate internal server error,
// we had to use this obscure approach. ErrorToken simulates gRPC
// call which returns internal server error.
if secret == ServiceErrToken {
return &policies.AuthorizeRes{ThingID: "", Authorized: false}, status.Error(codes.Internal, "internal server error")
}
if secret == "" {
return &policies.AuthorizeRes{ThingID: "", Authorized: false}, errors.ErrAuthentication
}
id, ok := tc.things[secret]
if !ok {
return &policies.AuthorizeRes{ThingID: "", Authorized: false}, status.Error(codes.Unauthenticated, "invalid credentials provided")
}
return &policies.AuthorizeRes{ThingID: id, Authorized: true}, nil
}
func (tc thingsClient) Identify(ctx context.Context, req *policies.IdentifyReq, opts ...grpc.CallOption) (*policies.IdentifyRes, error) {
panic("not implemented")
}