mirror of
https://github.com/datarhei/core.git
synced 2025-10-05 07:57:13 +08:00
446 lines
8.9 KiB
Go
446 lines
8.9 KiB
Go
package store
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/datarhei/core/v16/iam/access"
|
|
"github.com/datarhei/core/v16/iam/identity"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestAddIdentityCommand(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
identity := identity.User{
|
|
Name: "foobar",
|
|
}
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpAddIdentity,
|
|
Data: CommandAddIdentity{
|
|
Identity: identity,
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Users.Users))
|
|
}
|
|
|
|
func TestAddIdentity(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
idty := identity.User{
|
|
Name: "foobar",
|
|
}
|
|
|
|
err = s.addIdentity(CommandAddIdentity{
|
|
Identity: idty,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Users.Users))
|
|
require.Equal(t, 0, len(s.data.Policies.Policies))
|
|
|
|
err = s.addIdentity(CommandAddIdentity{
|
|
Identity: idty,
|
|
})
|
|
require.Error(t, err)
|
|
require.Equal(t, 1, len(s.data.Users.Users))
|
|
require.Equal(t, 0, len(s.data.Policies.Policies))
|
|
|
|
u := s.IAMIdentityGet("foobar")
|
|
require.Equal(t, 1, len(u.Users))
|
|
|
|
user := u.Users[0]
|
|
|
|
require.Equal(t, user.CreatedAt, user.UpdatedAt)
|
|
require.NotEqual(t, time.Time{}, user.CreatedAt)
|
|
}
|
|
|
|
func TestAddIdentityWithAlias(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
idty := identity.User{
|
|
Name: "foobar",
|
|
}
|
|
|
|
err = s.addIdentity(CommandAddIdentity{
|
|
Identity: idty,
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
idty = identity.User{
|
|
Name: "foobaz",
|
|
Alias: "foobar",
|
|
}
|
|
|
|
err = s.addIdentity(CommandAddIdentity{
|
|
Identity: idty,
|
|
})
|
|
require.Error(t, err)
|
|
|
|
idty = identity.User{
|
|
Name: "foobaz",
|
|
Alias: "foobaz",
|
|
}
|
|
|
|
err = s.addIdentity(CommandAddIdentity{
|
|
Identity: idty,
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
idty = identity.User{
|
|
Name: "barfoo",
|
|
Alias: "foobaz",
|
|
}
|
|
|
|
err = s.addIdentity(CommandAddIdentity{
|
|
Identity: idty,
|
|
})
|
|
require.Error(t, err)
|
|
}
|
|
|
|
func TestRemoveIdentityCommand(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
identity := identity.User{
|
|
Name: "foobar",
|
|
}
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpAddIdentity,
|
|
Data: CommandAddIdentity{
|
|
Identity: identity,
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Users.Users))
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpRemoveIdentity,
|
|
Data: CommandRemoveIdentity{
|
|
Name: "foobar",
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 0, len(s.data.Users.Users))
|
|
}
|
|
|
|
func TestRemoveIdentity(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
identity := identity.User{
|
|
Name: "foobar",
|
|
}
|
|
|
|
err = s.addIdentity(CommandAddIdentity{
|
|
Identity: identity,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Users.Users))
|
|
require.Equal(t, 0, len(s.data.Policies.Policies))
|
|
|
|
err = s.removeIdentity(CommandRemoveIdentity{
|
|
Name: "foobar",
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 0, len(s.data.Users.Users))
|
|
require.Equal(t, 0, len(s.data.Policies.Policies))
|
|
|
|
err = s.removeIdentity(CommandRemoveIdentity{
|
|
Name: "foobar",
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 0, len(s.data.Users.Users))
|
|
require.Equal(t, 0, len(s.data.Policies.Policies))
|
|
}
|
|
|
|
func TestRemoveIdentityWithAlias(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
idty := identity.User{
|
|
Name: "foobar",
|
|
Alias: "foobaz",
|
|
}
|
|
|
|
err = s.addIdentity(CommandAddIdentity{
|
|
Identity: idty,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Users.Users))
|
|
|
|
err = s.removeIdentity(CommandRemoveIdentity{
|
|
Name: "foobaz",
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 0, len(s.data.Users.Users))
|
|
|
|
err = s.removeIdentity(CommandRemoveIdentity{
|
|
Name: "foobar",
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 0, len(s.data.Users.Users))
|
|
}
|
|
|
|
func TestUpdateUserCommand(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
idty1 := identity.User{
|
|
Name: "foobar1",
|
|
}
|
|
|
|
idty2 := identity.User{
|
|
Name: "foobar2",
|
|
}
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpAddIdentity,
|
|
Data: CommandAddIdentity{
|
|
Identity: idty1,
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Users.Users))
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpAddIdentity,
|
|
Data: CommandAddIdentity{
|
|
Identity: idty2,
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 2, len(s.data.Users.Users))
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpUpdateIdentity,
|
|
Data: CommandUpdateIdentity{
|
|
Name: "foobar1",
|
|
Identity: identity.User{
|
|
Name: "foobar3",
|
|
},
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 2, len(s.data.Users.Users))
|
|
}
|
|
|
|
func TestUpdateIdentity(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
idty1 := identity.User{
|
|
Name: "foobar1",
|
|
}
|
|
|
|
idty2 := identity.User{
|
|
Name: "foobar2",
|
|
}
|
|
|
|
err = s.addIdentity(CommandAddIdentity{
|
|
Identity: idty1,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Users.Users))
|
|
|
|
err = s.addIdentity(CommandAddIdentity{
|
|
Identity: idty2,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 2, len(s.data.Users.Users))
|
|
|
|
foobar := s.IAMIdentityGet("foobar1").Users[0]
|
|
require.True(t, foobar.CreatedAt.Equal(foobar.UpdatedAt))
|
|
require.False(t, time.Time{}.Equal(foobar.CreatedAt))
|
|
|
|
idty := identity.User{
|
|
Name: "foobaz",
|
|
}
|
|
|
|
err = s.updateIdentity(CommandUpdateIdentity{
|
|
Name: "foobar",
|
|
Identity: idty,
|
|
})
|
|
require.Error(t, err)
|
|
require.Equal(t, 2, len(s.data.Users.Users))
|
|
|
|
idty.Name = "foobar2"
|
|
|
|
err = s.updateIdentity(CommandUpdateIdentity{
|
|
Name: "foobar1",
|
|
Identity: idty,
|
|
})
|
|
require.Error(t, err)
|
|
require.Equal(t, 2, len(s.data.Users.Users))
|
|
|
|
idty.Name = "foobaz"
|
|
|
|
err = s.updateIdentity(CommandUpdateIdentity{
|
|
Name: "foobar1",
|
|
Identity: idty,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 2, len(s.data.Users.Users))
|
|
|
|
u := s.IAMIdentityGet("foobar1")
|
|
require.Empty(t, u.Users)
|
|
|
|
u = s.IAMIdentityGet("foobar2")
|
|
require.NotEmpty(t, u.Users)
|
|
|
|
u = s.IAMIdentityGet("foobaz")
|
|
require.NotEmpty(t, u.Users)
|
|
|
|
require.True(t, u.Users[0].CreatedAt.Equal(foobar.CreatedAt))
|
|
require.False(t, u.Users[0].UpdatedAt.Equal(foobar.UpdatedAt))
|
|
require.False(t, time.Time{}.Equal(foobar.CreatedAt))
|
|
}
|
|
|
|
func TestUpdateIdentityWithAlias(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
idty1 := identity.User{
|
|
Name: "foobar1",
|
|
Alias: "fooalias1",
|
|
}
|
|
|
|
idty2 := identity.User{
|
|
Name: "foobar2",
|
|
Alias: "fooalias2",
|
|
}
|
|
|
|
err = s.addIdentity(CommandAddIdentity{
|
|
Identity: idty1,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Users.Users))
|
|
|
|
err = s.addIdentity(CommandAddIdentity{
|
|
Identity: idty2,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 2, len(s.data.Users.Users))
|
|
|
|
idty := identity.User{
|
|
Name: "foobaz",
|
|
}
|
|
|
|
err = s.updateIdentity(CommandUpdateIdentity{
|
|
Name: "foobar",
|
|
Identity: idty,
|
|
})
|
|
require.Error(t, err)
|
|
require.Equal(t, 2, len(s.data.Users.Users))
|
|
|
|
idty.Name = "foobar2"
|
|
|
|
err = s.updateIdentity(CommandUpdateIdentity{
|
|
Name: "foobar1",
|
|
Identity: idty,
|
|
})
|
|
require.Error(t, err)
|
|
require.Equal(t, 2, len(s.data.Users.Users))
|
|
|
|
idty.Name = "foobaz"
|
|
idty.Alias = "fooalias2"
|
|
|
|
err = s.updateIdentity(CommandUpdateIdentity{
|
|
Name: "foobar1",
|
|
Identity: idty,
|
|
})
|
|
require.Error(t, err)
|
|
require.Equal(t, 2, len(s.data.Users.Users))
|
|
|
|
idty.Name = "foobaz"
|
|
idty.Alias = "fooalias"
|
|
|
|
err = s.updateIdentity(CommandUpdateIdentity{
|
|
Name: "fooalias1",
|
|
Identity: idty,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 2, len(s.data.Users.Users))
|
|
|
|
u := s.IAMIdentityGet("foobar1")
|
|
require.Empty(t, u.Users)
|
|
|
|
u = s.IAMIdentityGet("fooalias1")
|
|
require.Empty(t, u.Users)
|
|
|
|
u = s.IAMIdentityGet("foobar2")
|
|
require.NotEmpty(t, u.Users)
|
|
|
|
u = s.IAMIdentityGet("fooalias2")
|
|
require.NotEmpty(t, u.Users)
|
|
|
|
u = s.IAMIdentityGet("foobaz")
|
|
require.NotEmpty(t, u.Users)
|
|
|
|
u = s.IAMIdentityGet("fooalias")
|
|
require.NotEmpty(t, u.Users)
|
|
}
|
|
|
|
func TestUpdateIdentityWithPolicies(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
idty1 := identity.User{
|
|
Name: "foobar",
|
|
}
|
|
|
|
policies := []access.Policy{
|
|
{
|
|
Name: "bla",
|
|
Domain: "bla",
|
|
Resource: "bla",
|
|
Actions: []string{},
|
|
},
|
|
{
|
|
Name: "foo",
|
|
Domain: "foo",
|
|
Resource: "foo",
|
|
Actions: []string{},
|
|
},
|
|
}
|
|
|
|
err = s.addIdentity(CommandAddIdentity{
|
|
Identity: idty1,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Users.Users))
|
|
|
|
err = s.setPolicies(CommandSetPolicies{
|
|
Name: "foobar",
|
|
Policies: policies,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 2, len(s.data.Policies.Policies["foobar"]))
|
|
|
|
err = s.updateIdentity(CommandUpdateIdentity{
|
|
Name: "foobar",
|
|
Identity: idty1,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Users.Users))
|
|
require.Equal(t, 2, len(s.data.Policies.Policies["foobar"]))
|
|
|
|
idty2 := identity.User{
|
|
Name: "foobaz",
|
|
}
|
|
|
|
err = s.updateIdentity(CommandUpdateIdentity{
|
|
Name: "foobar",
|
|
Identity: idty2,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Users.Users))
|
|
require.Equal(t, 0, len(s.data.Policies.Policies["foobar"]))
|
|
require.Equal(t, 2, len(s.data.Policies.Policies["foobaz"]))
|
|
}
|