[ 
https://issues.apache.org/jira/browse/IGNITE-23979?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mikhail Petrov updated IGNITE-23979:
------------------------------------
    Labels: ise  (was: )

> IgniteCache#clearAllAsync operation does not throw exception if its 
> authorization fails 
> ----------------------------------------------------------------------------------------
>
>                 Key: IGNITE-23979
>                 URL: https://issues.apache.org/jira/browse/IGNITE-23979
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Mikhail Petrov
>            Priority: Major
>              Labels: ise
>
> {code:java}
> /*
>  * Licensed to the Apache Software Foundation (ASF) under one or more
>  * contributor license agreements.  See the NOTICE file distributed with
>  * this work for additional information regarding copyright ownership.
>  * The ASF licenses this file to You under the Apache License, Version 2.0
>  * (the "License"); you may not use this file except in compliance with
>  * the License.  You may obtain a copy of the License at
>  *
>  *      http://www.apache.org/licenses/LICENSE-2.0
>  *
>  * Unless required by applicable law or agreed to in writing, software
>  * distributed under the License is distributed on an "AS IS" BASIS,
>  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>  * See the License for the specific language governing permissions and
>  * limitations under the License.
>  */
> package org.apache.ignite.internal.processors.security.cache;
> import java.util.Arrays;
> import java.util.Collections;
> import java.util.List;
> import java.util.function.Consumer;
> import org.apache.ignite.Ignite;
> import org.apache.ignite.IgniteCache;
> import 
> org.apache.ignite.internal.processors.security.AbstractCacheOperationPermissionCheckTest;
> import org.apache.ignite.plugin.security.SecurityException;
> import org.apache.ignite.plugin.security.SecurityPermissionSetBuilder;
> import org.junit.Test;
> import org.junit.runner.RunWith;
> import org.junit.runners.JUnit4;
> import static 
> org.apache.ignite.plugin.security.SecurityPermission.CACHE_CREATE;
> import static org.apache.ignite.plugin.security.SecurityPermission.CACHE_PUT;
> import static org.apache.ignite.plugin.security.SecurityPermission.CACHE_READ;
> import static 
> org.apache.ignite.plugin.security.SecurityPermission.CACHE_REMOVE;
> import static 
> org.apache.ignite.plugin.security.SecurityPermission.JOIN_AS_SERVER;
> import static 
> org.apache.ignite.testframework.GridTestUtils.assertThrowsWithCause;
> /**
>  * Test CRUD cache permissions.
>  */
> @RunWith(JUnit4.class)
> public class CacheOperationPermissionCheckTest extends 
> AbstractCacheOperationPermissionCheckTest {
>     /** */
>     @Test
>     public void testServerNode() throws Exception {
>         testCrudCachePermissions(false);
>     }
>     /** */
>     @Test
>     public void testClientNode() throws Exception {
>         testCrudCachePermissions(true);
>     }
>     /**
>      * @param isClient True if is client mode.
>      * @throws Exception If failed.
>      */
>     private void testCrudCachePermissions(boolean isClient) throws Exception {
>         Ignite node = startGrid(loginPrefix(isClient) + "_test_node",
>             SecurityPermissionSetBuilder.create()
>                 .defaultAllowAll(false)
>                 .appendSystemPermissions(CACHE_CREATE, JOIN_AS_SERVER)
>                 .appendCachePermissions(CACHE_NAME, CACHE_READ, CACHE_PUT, 
> CACHE_REMOVE)
>                 .appendCachePermissions(FORBIDDEN_CACHE, 
> EMPTY_PERMS).build(), isClient);
>         for (Consumer<IgniteCache<String, String>> c : operations()) {
>             prepareCache(CACHE_NAME);
>             c.accept(node.cache(CACHE_NAME));
>         }
>         prepareCache(FORBIDDEN_CACHE);
>         for (Consumer<IgniteCache<String, String>> c : operations())
>             assertThrowsWithCause(() -> 
> c.accept(node.cache(FORBIDDEN_CACHE)), SecurityException.class);
>     }
>     /**
>      * @return Collection of operations to invoke a cache operation.
>      */
>     private List<Consumer<IgniteCache<String, String>>> operations() {
>         return Arrays.asList(
>             c -> c.clearAllAsync(Collections.singleton("key")).get()
>         );
>     }
>     /** */
>     private void prepareCache(String cacheName) {
>         IgniteCache<Object, Object> cache = grid("server").cache(cacheName);
>         cache.clear();
>         cache.put("key", "val");
>     }
> }
> {code}
> IgniteCache#clearAllAsync operation does not throw exception if its 
> authorization fails. The operation is aborted internally, but the user 
> receives a successfully completed future.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to