public async Task Validate_Inheritance() { TestPermissionsProvider firstValidator = new TestPermissionsProvider( new string[0], new Dictionary <string, PermissionSet>() { ["/"] = PermissionSet.AllowAll, ["/a/"] = PermissionSet.AllowAll }); TestPermissionsProvider secondValidator = new TestPermissionsProvider( new string[0], new Dictionary <string, PermissionSet>() { ["/"] = PermissionSet.DenyAll, ["/a/"] = PermissionSet.Unset }); // Level 1: / // Allow + Deny = Deny // Level 2: /a/ // Allow + Unset = Allow // Result: Allow PermissionBasedValidator validator = new PermissionBasedValidator(new[] { firstValidator, secondValidator }); ParsedMutation mutation = new ParsedMutation( new AccountStatus[0], new[] { new KeyValuePair <RecordKey, ByteString>(new RecordKey(RecordType.Data, LedgerPath.Parse("/a/"), "a"), ByteString.Parse("aabb")) }); await validator.Validate(mutation, new SignatureEvidence[0], new Dictionary <AccountKey, AccountStatus>()); }
public async Task Validate_DataMutationSuccess() { PermissionBasedValidator validator = CreateValidator( new string[0], new Dictionary <string, PermissionSet>() { ["/"] = PermissionSet.Unset, ["/a/"] = new PermissionSet(Access.Deny, Access.Deny, Access.Deny, Access.Deny, Access.Permit) }); Dictionary <AccountKey, AccountStatus> accounts = new Dictionary <AccountKey, AccountStatus>(); ParsedMutation mutation = new ParsedMutation( new AccountStatus[0], new[] { new KeyValuePair <RecordKey, ByteString>(new RecordKey(RecordType.Data, LedgerPath.Parse("/a/"), "a"), ByteString.Parse("aabb")) }); await validator.Validate(mutation, new SignatureEvidence[0], accounts); }
private static async Task TestAccountChange(PermissionSet accountPermissions, long previousBalance, long newBalance) { PermissionBasedValidator validator = CreateValidator( new string[0], new Dictionary <string, PermissionSet>() { ["/"] = PermissionSet.Unset, ["/a/"] = accountPermissions }); Dictionary <AccountKey, AccountStatus> accounts = new Dictionary <AccountKey, AccountStatus>() { [AccountKey.Parse("/a/", "/b/")] = new AccountStatus(AccountKey.Parse("/a/", "/b/"), previousBalance, ByteString.Empty) }; ParsedMutation mutation = new ParsedMutation( new[] { new AccountStatus(AccountKey.Parse("/a/", "/b/"), newBalance, ByteString.Empty) }, new KeyValuePair <RecordKey, ByteString> [0]); await validator.Validate(mutation, new SignatureEvidence[0], accounts); }
public async Task Validate_ComputeAddress() { PermissionBasedValidator validator = CreateValidator( new string[] { "0123456789abcdef11223344" }, new Dictionary <string, PermissionSet>() { ["/"] = PermissionSet.Unset, ["/a/"] = PermissionSet.AllowAll }); Dictionary <AccountKey, AccountStatus> accounts = new Dictionary <AccountKey, AccountStatus>() { [AccountKey.Parse("/a/", "/b/")] = new AccountStatus(AccountKey.Parse("/a/", "/b/"), 150, ByteString.Empty) }; ParsedMutation mutation = new ParsedMutation( new[] { new AccountStatus(AccountKey.Parse("/a/", "/b/"), 100, ByteString.Empty) }, new KeyValuePair <RecordKey, ByteString>[] { }); await validator.Validate( mutation, new[] { new SignatureEvidence(ByteString.Parse("0123456789abcdef"), ByteString.Parse("11223344")) }, accounts); }
public async Task Validate_DataMutationError() { PermissionBasedValidator validator = CreateValidator( new string[0], new Dictionary <string, PermissionSet>() { ["/"] = PermissionSet.Unset, ["/a/"] = new PermissionSet(Access.Permit, Access.Permit, Access.Permit, Access.Deny) }); ParsedMutation mutation = new ParsedMutation( new AccountStatus[0], new[] { new KeyValuePair <RecordKey, ByteString>(new RecordKey(RecordType.Data, LedgerPath.Parse("/a/"), "a"), ByteString.Parse("aabb")) }); TransactionInvalidException exception = await Assert.ThrowsAsync <TransactionInvalidException>(() => validator.Validate(mutation, new SignatureEvidence[0], new Dictionary <AccountKey, AccountStatus>())); Assert.Equal("CannotModifyData", exception.Reason); }
public async Task Validate_Inheritance() { TestPermissionsProvider firstValidator = new TestPermissionsProvider( new string[0], new Dictionary<string, PermissionSet>() { ["/"] = PermissionSet.AllowAll, ["/a/"] = PermissionSet.AllowAll }); TestPermissionsProvider secondValidator = new TestPermissionsProvider( new string[0], new Dictionary<string, PermissionSet>() { ["/"] = PermissionSet.DenyAll, ["/a/"] = PermissionSet.Unset }); // Level 1: / // Allow + Deny = Deny // Level 2: /a/ // Allow + Unset = Allow // Result: Allow PermissionBasedValidator validator = new PermissionBasedValidator(new[] { firstValidator, secondValidator }); ParsedMutation mutation = new ParsedMutation( new AccountStatus[0], new[] { new KeyValuePair<RecordKey, ByteString>(new RecordKey(RecordType.Data, LedgerPath.Parse("/a/"), "a"), ByteString.Parse("aabb")) }); await validator.Validate(mutation, new SignatureEvidence[0], new Dictionary<AccountKey, AccountStatus>()); }