Skip to content

Commit

Permalink
Add projects for every org to be inserted in the database (#6669)
Browse files Browse the repository at this point in the history
Signed-off-by: Yashvi Jain <Yashvi.jain@progress.com>
  • Loading branch information
YashviJain01 authored and vinay033 committed Feb 24, 2022
1 parent db95de4 commit 8419c27
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 17 deletions.
31 changes: 27 additions & 4 deletions components/infra-proxy-service/migrations/pipeline/utility.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"encoding/json"
"fmt"
"github.com/chef/automate/api/interservice/authz"
"io/ioutil"
"os"
"path"
Expand All @@ -13,7 +14,7 @@ import (
)

// StoreOrgs reads the Result struct and populate the orgs table
func StoreOrgs(ctx context.Context, st storage.Storage, mst storage.MigrationStorage, res Result) (Result, error) {
func StoreOrgs(ctx context.Context, st storage.Storage, mst storage.MigrationStorage, authzProjectClient authz.ProjectsServiceClient, res Result) (Result, error) {
var err error
var msg string
var totalSucceeded, totalSkipped, totalFailed int64
Expand All @@ -23,7 +24,7 @@ func StoreOrgs(ctx context.Context, st storage.Storage, mst storage.MigrationSto
}
log.Info("Starting the organisation migration phase for migration id: ", res.Meta.MigrationID)
for _, org := range res.ParsedResult.Orgs {
err, _ = StoreOrg(ctx, st, org, res.Meta.ServerID)
err, _ = StoreOrg(ctx, st, org, res.Meta.ServerID, authzProjectClient)
if err != nil {
totalFailed++
msg = err.Error()
Expand All @@ -50,12 +51,17 @@ func StoreOrgs(ctx context.Context, st storage.Storage, mst storage.MigrationSto
}

// StoreOrg stores a single Org into DB
func StoreOrg(ctx context.Context, st storage.Storage, org Org, serverID string) (error, ActionOps) {
func StoreOrg(ctx context.Context, st storage.Storage, org Org, serverID string, authzProjectClient authz.ProjectsServiceClient) (error, ActionOps) {
var actionTaken ActionOps
var err error
switch org.ActionOps {
case Insert:
_, err = st.StoreOrg(ctx, org.Name, org.FullName, "", "", serverID, nil)
projects, err := createProjectFromOrgIdAndServerID(ctx, serverID, org.Name, authzProjectClient)
if err != nil {
log.Errorf("Unable to create project for serverid: %s", serverID)
return err, actionTaken
}
_, err = st.StoreOrg(ctx, org.Name, org.FullName, "", "", serverID, projects)
actionTaken = Insert
case Delete:
_, err = st.DeleteOrg(ctx, org.Name, serverID)
Expand All @@ -68,6 +74,23 @@ func StoreOrg(ctx context.Context, st storage.Storage, org Org, serverID string)
return err, actionTaken
}

//function to create a new iam project for each client
func createProjectFromOrgIdAndServerID(ctx context.Context, serverId string, orgId string, authzProjectClient authz.ProjectsServiceClient) ([]string, error) {

newProject := &authz.CreateProjectReq{
Name: serverId + "_" + orgId,
Id: serverId + "_" + orgId,
SkipPolicies: false,
}

projectID, err := authzProjectClient.CreateProject(ctx, newProject)
if err != nil {
return nil, err
}

return []string{projectID.Project.Name}, nil
}

func ParseOrgs(ctx context.Context, st storage.Storage, mst storage.MigrationStorage, result Result) (Result, error) {
var err error
log.Info("Starting with organisation parsing phase for migration id: ", result.Meta.MigrationID)
Expand Down
43 changes: 30 additions & 13 deletions components/infra-proxy-service/migrations/pipeline/utility_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,51 @@ package pipeline

import (
"context"
"github.com/chef/automate/api/interservice/authz"
"github.com/chef/automate/components/infra-proxy-service/storage"
"github.com/chef/automate/components/infra-proxy-service/storage/testDB"
"github.com/golang/mock/gomock"
"github.com/pkg/errors"
"reflect"
"testing"
)

func TestStoreOrg(t *testing.T) {
type args struct {
ctx context.Context
st storage.Storage
org Org
serverID string
ctx context.Context
st storage.Storage
org Org
serverID string
authzMock *authz.MockProjectsServiceClient
}
tests := []struct {
name string
args args
want error
want1 ActionOps
name string
errorFromProject bool
args args
want error
want1 ActionOps
}{
{name: "Test Delete Org", args: args{ctx: context.Background(), st: &testDB.TestDB{}, org: Org{Name: "org3", FullName: "Org 1", ActionOps: Delete}, serverID: "server1"}, want: nil, want1: Delete},
{name: "Test Store Org", args: args{ctx: context.Background(), st: &testDB.TestDB{}, org: Org{Name: "org2", FullName: "Org 2", ActionOps: Insert}, serverID: "server1"}, want: nil, want1: Insert},
{name: "Test Edit Org", args: args{ctx: context.Background(), st: &testDB.TestDB{}, org: Org{Name: "org3", FullName: "Org 3", ActionOps: Update}, serverID: "server1"}, want: nil, want1: Update},
{name: "Test Delete Org", errorFromProject: false, args: args{ctx: context.Background(), st: &testDB.TestDB{}, org: Org{Name: "org3", FullName: "Org 1", ActionOps: Delete}, serverID: "server1", authzMock: authz.NewMockProjectsServiceClient(gomock.NewController(t))}, want: nil, want1: Delete},
{name: "Test Store Org", errorFromProject: false, args: args{ctx: context.Background(), st: &testDB.TestDB{}, org: Org{Name: "org2", FullName: "Org 2", ActionOps: Insert}, serverID: "server1", authzMock: authz.NewMockProjectsServiceClient(gomock.NewController(t))}, want: nil, want1: Insert},
{name: "Test Edit Org", errorFromProject: false, args: args{ctx: context.Background(), st: &testDB.TestDB{}, org: Org{Name: "org3", FullName: "Org 3", ActionOps: Update}, serverID: "server1", authzMock: authz.NewMockProjectsServiceClient(gomock.NewController(t))}, want: nil, want1: Update},
{name: "Test Create Project Error", errorFromProject: true, args: args{ctx: context.Background(), st: &testDB.TestDB{}, org: Org{Name: "org3", FullName: "Org 3", ActionOps: Insert}, serverID: "server1", authzMock: authz.NewMockProjectsServiceClient(gomock.NewController(t))}, want: errors.New("Project already exists"), want1: 0},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, got1 := StoreOrg(tt.args.ctx, tt.args.st, tt.args.org, tt.args.serverID)
if !reflect.DeepEqual(got, tt.want) {
projectResponse := &authz.CreateProjectResp{
Project: &authz.Project{
Id: "testId",
Name: "test_name",
Status: "test_status",
},
}
if tt.errorFromProject {
tt.args.authzMock.EXPECT().CreateProject(tt.args.ctx, gomock.Any(), gomock.Any()).Return(nil, errors.New("Project already exists"))
} else {
tt.args.authzMock.EXPECT().CreateProject(tt.args.ctx, gomock.Any(), gomock.Any()).Return(projectResponse, nil)
}
got, got1 := StoreOrg(tt.args.ctx, tt.args.st, tt.args.org, tt.args.serverID, tt.args.authzMock)
if got != nil && got.Error() != tt.want.Error() {
t.Errorf("StoreOrg() got = %v, want %v", got, tt.want)
}
if got1 != tt.want1 {
Expand Down

0 comments on commit 8419c27

Please sign in to comment.