mirror of
				https://github.com/datarhei/core.git
				synced 2025-10-31 11:26:52 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package access
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/datarhei/core/v16/io/fs"
 | |
| 	"github.com/stretchr/testify/require"
 | |
| )
 | |
| 
 | |
| func TestAddPolicy(t *testing.T) {
 | |
| 	memfs, err := fs.NewMemFilesystem(fs.MemConfig{})
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	ai, err := NewJSONAdapter(memfs, "/policy.json", nil)
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	a, ok := ai.(*adapter)
 | |
| 	require.True(t, ok)
 | |
| 
 | |
| 	err = a.AddPolicy("p", "p", []string{"foobar", "group", "resource", "action"})
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	require.Equal(t, 1, len(a.domains))
 | |
| 
 | |
| 	data, err := memfs.ReadFile("/policy.json")
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	g := []Domain{}
 | |
| 	err = json.Unmarshal(data, &g)
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	require.Equal(t, "group", g[0].Name)
 | |
| 	require.Equal(t, 1, len(g[0].Policies))
 | |
| 	require.Equal(t, DomainPolicy{
 | |
| 		Username: "foobar",
 | |
| 		Role: Role{
 | |
| 			Resource: "resource",
 | |
| 			Actions:  "action",
 | |
| 		},
 | |
| 	}, g[0].Policies[0])
 | |
| }
 | |
| 
 | |
| func TestFormatActions(t *testing.T) {
 | |
| 	data := [][]string{
 | |
| 		{"a|b|c", "a|b|c"},
 | |
| 		{"b|c|a", "a|b|c"},
 | |
| 	}
 | |
| 
 | |
| 	for _, d := range data {
 | |
| 		require.Equal(t, d[1], formatActions(d[0]), d[0])
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestRemovePolicy(t *testing.T) {
 | |
| 	memfs, err := fs.NewMemFilesystem(fs.MemConfig{})
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	ai, err := NewJSONAdapter(memfs, "/policy.json", nil)
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	a, ok := ai.(*adapter)
 | |
| 	require.True(t, ok)
 | |
| 
 | |
| 	err = a.AddPolicies("p", "p", [][]string{
 | |
| 		{"foobar1", "group", "resource1", "action1"},
 | |
| 		{"foobar2", "group", "resource2", "action2"},
 | |
| 	})
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	require.Equal(t, 1, len(a.domains))
 | |
| 	require.Equal(t, 2, len(a.domains[0].Policies))
 | |
| 
 | |
| 	err = a.RemovePolicy("p", "p", []string{"foobar1", "group", "resource1", "action1"})
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	require.Equal(t, 1, len(a.domains))
 | |
| 	require.Equal(t, 1, len(a.domains[0].Policies))
 | |
| 
 | |
| 	err = a.RemovePolicy("p", "p", []string{"foobar2", "group", "resource2", "action2"})
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	require.Equal(t, 0, len(a.domains))
 | |
| 
 | |
| 	data, err := memfs.ReadFile("/policy.json")
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	g := []Domain{}
 | |
| 	err = json.Unmarshal(data, &g)
 | |
| 	require.NoError(t, err)
 | |
| 
 | |
| 	require.Equal(t, 0, len(g))
 | |
| }
 | 
