You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
boundary/internal/iam/account_test.go

136 lines
4.1 KiB

// Copyright IBM Corp. 2020, 2025
// SPDX-License-Identifier: BUSL-1.1
package iam
import (
"context"
"testing"
authStore "github.com/hashicorp/boundary/internal/auth/store"
"github.com/hashicorp/boundary/internal/db"
dbassert "github.com/hashicorp/boundary/internal/db/assert"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"google.golang.org/protobuf/proto"
)
// this is a very limited test. we are not testing the auth account triggers
// and integrity checks (we will leave that to the auth subsystem, since that's
// where they are implemented). we just want to make sure that the iam subsystem
// can update the IamUserId field successfully since that's what the iam system
// relies on.
func Test_AccountUpdate(t *testing.T) {
t.Parallel()
conn, _ := db.TestSetup(t, "postgres")
wrapper := db.TestWrapper(t)
repo := TestRepo(t, conn, wrapper)
org, _ := TestScopes(t, repo)
rw := db.New(conn)
t.Run("simple-update", func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
u := TestUser(t, repo, org.PublicId)
authMethodPublicId := testAuthMethod(t, conn, org.PublicId)
acct := testAccount(t, conn, org.PublicId, authMethodPublicId, "")
updateAcct := acct.Clone().(*authAccount)
updateAcct.IamUserId = u.PublicId
updatedRows, err := rw.Update(context.Background(), updateAcct, []string{"IamUserId"}, nil)
require.NoError(err)
assert.Equal(1, updatedRows)
foundAcct := allocAccount()
foundAcct.PublicId = acct.PublicId
err = rw.LookupByPublicId(context.Background(), &foundAcct)
require.NoError(err)
assert.Equal(u.PublicId, foundAcct.IamUserId)
})
}
func TestAccount_GetScope(t *testing.T) {
t.Parallel()
conn, _ := db.TestSetup(t, "postgres")
wrapper := db.TestWrapper(t)
repo := TestRepo(t, conn, wrapper)
org, _ := TestScopes(t, repo)
t.Run("valid-org", func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
w := db.New(conn)
u := TestUser(t, repo, org.PublicId)
authMethodPublicId := testAuthMethod(t, conn, org.PublicId)
acct := testAccount(t, conn, org.PublicId, authMethodPublicId, u.PublicId)
scope, err := acct.GetScope(context.Background(), w)
require.NoError(err)
assert.True(proto.Equal(org, scope))
})
}
func TestAccount_Clone(t *testing.T) {
t.Parallel()
ctx := context.Background()
conn, _ := db.TestSetup(t, "postgres")
wrapper := db.TestWrapper(t)
repo := TestRepo(t, conn, wrapper)
org, _ := TestScopes(t, repo)
t.Run("valid", func(t *testing.T) {
assert := assert.New(t)
u := TestUser(t, repo, org.PublicId)
authMethodPublicId := testAuthMethod(t, conn, org.PublicId)
acct := testAccount(t, conn, org.PublicId, authMethodPublicId, u.PublicId)
cp := acct.Clone()
assert.True(proto.Equal(cp.(*authAccount).Account, acct.Account))
})
t.Run("not-equal", func(t *testing.T) {
assert := assert.New(t)
u := TestUser(t, repo, org.PublicId)
authMethodPublicId := testAuthMethod(t, conn, org.PublicId)
acct := testAccount(t, conn, org.PublicId, authMethodPublicId, u.PublicId)
acct2 := testAccount(t, conn, org.PublicId, authMethodPublicId, "")
underlyingDB, err := conn.SqlDB(ctx)
require.NoError(t, err)
dbassert := dbassert.New(t, underlyingDB)
dbassert.IsNull(acct2, "IamUserId")
cp := acct.Clone()
assert.True(!proto.Equal(cp.(*authAccount).Account, acct2.Account))
})
}
func TestAccount_SetTableName(t *testing.T) {
defaultTableName := defaultAccountTableName
tests := []struct {
name string
initialName string
setNameTo string
want string
}{
{
name: "new-name",
initialName: "",
setNameTo: "new-name",
want: "new-name",
},
{
name: "reset to default",
initialName: "initial",
setNameTo: "",
want: defaultTableName,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
def := &authAccount{
Account: &authStore.Account{},
}
require.Equal(defaultTableName, def.TableName())
s := &authAccount{
Account: &authStore.Account{},
tableName: tt.initialName,
}
s.SetTableName(tt.setNameTo)
assert.Equal(tt.want, s.TableName())
})
}
}