lightning-terminal/perms/manager_test.go
2023-05-01 00:37:58 -07:00

87 lines
2.5 KiB
Go

package perms
import (
"testing"
"github.com/stretchr/testify/require"
"gopkg.in/macaroon-bakery.v2/bakery"
)
// TestMatchRegexURI tests the behaviour of the MatchRegexURI method of the
// Manager.
func TestMatchRegexURI(t *testing.T) {
// Construct a new Manager with a predefined list of perms.
m := &Manager{
perms: map[string][]bakery.Op{
"/lnrpc.WalletUnlocker/GenSeed": {},
"/lnrpc.WalletUnlocker/InitWallet": {},
"/lnrpc.Lightning/SendCoins": {{
Entity: "onchain",
Action: "write",
}},
"/litrpc.Sessions/AddSession": {{
Entity: "sessions",
Action: "write",
}},
"/litrpc.Sessions/ListSessions": {{
Entity: "sessions",
Action: "read",
}},
"/litrpc.Sessions/RevokeSession": {{
Entity: "sessions",
Action: "write",
}},
},
}
// Assert that a full URI is not considered a wild card.
uris, isRegex := m.MatchRegexURI("/litrpc.Sessions/RevokeSession")
require.False(t, isRegex)
require.Empty(t, uris)
// Assert that an invalid URI is also caught as such.
uris, isRegex = m.MatchRegexURI("***")
require.False(t, isRegex)
require.Nil(t, uris)
// Assert that the function correctly matches on a valid wild card for
// litrpc URIs.
uris, isRegex = m.MatchRegexURI("/litrpc.Sessions/.*")
require.True(t, isRegex)
require.ElementsMatch(t, uris, []string{
"/litrpc.Sessions/AddSession",
"/litrpc.Sessions/ListSessions",
"/litrpc.Sessions/RevokeSession",
})
// Assert that the function correctly matches on a valid wild card for
// lnd URIs. First we check that we can specify that only the
// "WalletUnlocker" methods should be included.
uris, isRegex = m.MatchRegexURI("/lnrpc.WalletUnlocker/.*")
require.True(t, isRegex)
require.ElementsMatch(t, uris, []string{
"/lnrpc.WalletUnlocker/GenSeed",
"/lnrpc.WalletUnlocker/InitWallet",
})
// Now we check that we can include all the `lnrpc` methods.
uris, isRegex = m.MatchRegexURI("/lnrpc\\..*")
require.True(t, isRegex)
require.ElementsMatch(t, uris, []string{
"/lnrpc.WalletUnlocker/GenSeed",
"/lnrpc.WalletUnlocker/InitWallet",
"/lnrpc.Lightning/SendCoins",
})
// Assert that the function does not return any URIs for a wild card
// URI that does not match on any of its perms.
uris, isRegex = m.MatchRegexURI("/poolrpc.Trader/.*")
require.True(t, isRegex)
require.Empty(t, uris)
// Assert that the read-only permission's keyword is not seen as a valid
// regex.
uris, isRegex = m.MatchRegexURI("***readonly***")
require.False(t, isRegex)
require.Empty(t, uris)
}