1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-04-28 13:48:49 +08:00
Mainflux.mainflux/pkg/sdk/go/setup_test.go
b1ackd0t 2673b34c6a
NOISSUE - Use Insert On Conflict For Policies (#1824)
* Initial Commit: Use Insert On Conflict For Policies

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* Invalidate Cache on Adding Policy

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

---------

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
2023-06-20 14:59:53 +02:00

354 lines
8.1 KiB
Go

package sdk_test
import (
"context"
"fmt"
"os"
"regexp"
"testing"
"time"
mfclients "github.com/mainflux/mainflux/pkg/clients"
"github.com/mainflux/mainflux/pkg/errors"
mfgroups "github.com/mainflux/mainflux/pkg/groups"
sdk "github.com/mainflux/mainflux/pkg/sdk/go"
"github.com/mainflux/mainflux/pkg/uuid"
tpolicies "github.com/mainflux/mainflux/things/policies"
"github.com/mainflux/mainflux/users/clients"
umocks "github.com/mainflux/mainflux/users/clients/mocks"
"github.com/mainflux/mainflux/users/hasher"
upolicies "github.com/mainflux/mainflux/users/policies"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
)
const (
invalidIdentity = "invalididentity"
Identity = "identity"
secret = "strongsecret"
token = "token"
invalidToken = "invalidtoken"
contentType = "application/senml+json"
)
var (
idProvider = uuid.New()
phasher = hasher.New()
validMetadata = sdk.Metadata{"role": "client"}
user = sdk.User{
Name: "clientname",
Tags: []string{"tag1", "tag2"},
Credentials: sdk.Credentials{Identity: "clientidentity", Secret: secret},
Metadata: validMetadata,
Status: mfclients.EnabledStatus.String(),
}
thing = sdk.Thing{
Name: "thingname",
Tags: []string{"tag1", "tag2"},
Credentials: sdk.Credentials{Identity: "clientidentity", Secret: generateUUID(&testing.T{})},
Metadata: validMetadata,
Status: mfclients.EnabledStatus.String(),
}
description = "shortdescription"
gName = "groupname"
limit uint64 = 5
offset uint64 = 0
total uint64 = 200
authoritiesObj = "authorities"
subject = generateUUID(&testing.T{})
object = generateUUID(&testing.T{})
emailer = umocks.NewEmailer()
passRegex = regexp.MustCompile("^.{8,}$")
accessDuration = time.Minute * 1
refreshDuration = time.Minute * 10
)
func generateValidToken(t *testing.T, svc clients.Service, cRepo *umocks.Repository) string {
client := mfclients.Client{
ID: generateUUID(t),
Name: "validtoken",
Credentials: mfclients.Credentials{
Identity: "validtoken",
Secret: secret,
},
Role: mfclients.AdminRole,
Status: mfclients.EnabledStatus,
}
rclient := client
rclient.Credentials.Secret, _ = phasher.Hash(client.Credentials.Secret)
repoCall := cRepo.On("RetrieveByIdentity", context.Background(), mock.Anything).Return(rclient, nil)
token, err := svc.IssueToken(context.Background(), client.Credentials.Identity, client.Credentials.Secret)
assert.True(t, errors.Contains(err, nil), fmt.Sprintf("Create token expected nil got %s\n", err))
repoCall.Unset()
return token.AccessToken
}
func generateUUID(t *testing.T) string {
ulid, err := idProvider.ID()
assert.Nil(t, err, fmt.Sprintf("unexpected error: %s", err))
return ulid
}
func convertClientsPage(cp sdk.UsersPage) mfclients.ClientsPage {
return mfclients.ClientsPage{
Clients: convertClients(cp.Users),
}
}
func convertThingsPage(cp sdk.ThingsPage) mfclients.ClientsPage {
return mfclients.ClientsPage{
Clients: convertThings(cp.Things),
}
}
func convertClients(cs []sdk.User) []mfclients.Client {
ccs := []mfclients.Client{}
for _, c := range cs {
ccs = append(ccs, convertClient(c))
}
return ccs
}
func convertThings(cs []sdk.Thing) []mfclients.Client {
ccs := []mfclients.Client{}
for _, c := range cs {
ccs = append(ccs, convertThing(c))
}
return ccs
}
func convertGroups(cs []sdk.Group) []mfgroups.Group {
cgs := []mfgroups.Group{}
for _, c := range cs {
cgs = append(cgs, convertGroup(c))
}
return cgs
}
func convertChannels(cs []sdk.Channel) []mfgroups.Group {
cgs := []mfgroups.Group{}
for _, c := range cs {
cgs = append(cgs, convertChannel(c))
}
return cgs
}
func convertUserPolicies(cs []sdk.Policy) []upolicies.Policy {
ccs := []upolicies.Policy{}
for _, c := range cs {
ccs = append(ccs, convertUserPolicy(c))
}
return ccs
}
func convertUserPolicy(sp sdk.Policy) upolicies.Policy {
return upolicies.Policy{
OwnerID: sp.OwnerID,
Subject: sp.Subject,
Object: sp.Object,
Actions: sp.Actions,
CreatedAt: sp.CreatedAt,
UpdatedAt: sp.UpdatedAt,
}
}
func convertThingPolicy(sp sdk.Policy) tpolicies.Policy {
return tpolicies.Policy{
OwnerID: sp.OwnerID,
Subject: sp.Subject,
Object: sp.Object,
Actions: sp.Actions,
CreatedAt: sp.CreatedAt,
UpdatedAt: sp.UpdatedAt,
}
}
func convertMembershipsPage(m sdk.MembershipsPage) mfgroups.MembershipsPage {
return mfgroups.MembershipsPage{
Page: mfgroups.Page{
Limit: m.Limit,
Total: m.Total,
Offset: m.Offset,
},
Memberships: convertMemberships(m.Memberships),
}
}
func convertChannelsMembershipPage(m sdk.ChannelsPage) mfgroups.MembershipsPage {
return mfgroups.MembershipsPage{
Page: mfgroups.Page{
Limit: m.Limit,
Total: m.Total,
Offset: m.Offset,
},
Memberships: convertChannels(m.Channels),
}
}
func convertClientPage(p sdk.PageMetadata) mfclients.Page {
if p.Status == "" {
p.Status = mfclients.EnabledStatus.String()
}
status, err := mfclients.ToStatus(p.Status)
if err != nil {
return mfclients.Page{}
}
return mfclients.Page{
Status: status,
Total: p.Total,
Offset: p.Offset,
Limit: p.Limit,
Name: p.Name,
Action: p.Action,
Tag: p.Tag,
Metadata: mfclients.Metadata(p.Metadata),
}
}
func convertMemberships(gs []sdk.Group) []mfgroups.Group {
cg := []mfgroups.Group{}
for _, g := range gs {
cg = append(cg, convertGroup(g))
}
return cg
}
func convertGroup(g sdk.Group) mfgroups.Group {
if g.Status == "" {
g.Status = mfclients.EnabledStatus.String()
}
status, err := mfclients.ToStatus(g.Status)
if err != nil {
return mfgroups.Group{}
}
return mfgroups.Group{
ID: g.ID,
Owner: g.OwnerID,
Parent: g.ParentID,
Name: g.Name,
Description: g.Description,
Metadata: mfclients.Metadata(g.Metadata),
Level: g.Level,
Path: g.Path,
Children: convertChildren(g.Children),
CreatedAt: g.CreatedAt,
UpdatedAt: g.UpdatedAt,
Status: status,
}
}
func convertChildren(gs []*sdk.Group) []*mfgroups.Group {
cg := []*mfgroups.Group{}
if len(gs) == 0 {
return cg
}
for _, g := range gs {
insert := convertGroup(*g)
cg = append(cg, &insert)
}
return cg
}
func convertClient(c sdk.User) mfclients.Client {
if c.Status == "" {
c.Status = mfclients.EnabledStatus.String()
}
status, err := mfclients.ToStatus(c.Status)
if err != nil {
return mfclients.Client{}
}
return mfclients.Client{
ID: c.ID,
Name: c.Name,
Tags: c.Tags,
Owner: c.Owner,
Credentials: mfclients.Credentials(c.Credentials),
Metadata: mfclients.Metadata(c.Metadata),
CreatedAt: c.CreatedAt,
UpdatedAt: c.UpdatedAt,
Status: status,
}
}
func convertThing(c sdk.Thing) mfclients.Client {
if c.Status == "" {
c.Status = mfclients.EnabledStatus.String()
}
status, err := mfclients.ToStatus(c.Status)
if err != nil {
return mfclients.Client{}
}
return mfclients.Client{
ID: c.ID,
Name: c.Name,
Tags: c.Tags,
Owner: c.Owner,
Credentials: mfclients.Credentials(c.Credentials),
Metadata: mfclients.Metadata(c.Metadata),
CreatedAt: c.CreatedAt,
UpdatedAt: c.UpdatedAt,
Status: status,
}
}
func convertChannel(g sdk.Channel) mfgroups.Group {
if g.Status == "" {
g.Status = mfclients.EnabledStatus.String()
}
status, err := mfclients.ToStatus(g.Status)
if err != nil {
return mfgroups.Group{}
}
return mfgroups.Group{
ID: g.ID,
Owner: g.OwnerID,
Parent: g.ParentID,
Name: g.Name,
Description: g.Description,
Metadata: mfclients.Metadata(g.Metadata),
Level: g.Level,
Path: g.Path,
CreatedAt: g.CreatedAt,
UpdatedAt: g.UpdatedAt,
Status: status,
}
}
func convertUserPolicyPage(pp sdk.PolicyPage) upolicies.PolicyPage {
return upolicies.PolicyPage{
Page: upolicies.Page{
Limit: pp.Limit,
Total: pp.Total,
Offset: pp.Offset,
},
Policies: convertUserPolicies(pp.Policies),
}
}
func TestMain(m *testing.M) {
exitCode := m.Run()
os.Exit(exitCode)
}