Search in sources :

Example 36 with RPCResponse

use of com.sequenceiq.cloudbreak.client.RPCResponse in project cloudbreak by hortonworks.

the class UserSyncOperationsTest method testRemoveGroupsSingle.

@Test
public void testRemoveGroupsSingle() throws FreeIpaClientException, TimeoutException {
    Multimap<String, String> warnings = ArrayListMultimap.create();
    Set<FmsGroup> groups = Set.of(new FmsGroup().withName("group1"), new FmsGroup().withName("group2"));
    ArgumentCaptor<List<Object>> flagsCaptor = ArgumentCaptor.forClass(List.class);
    ArgumentCaptor<Map<String, Object>> paramsCaptor = ArgumentCaptor.forClass(Map.class);
    RPCResponse<Object> response1 = new RPCResponse<>();
    response1.setResult(new Group());
    RPCResponse<Object> response2 = new RPCResponse<>();
    response2.setResult(new Group());
    when(freeIpaClient.invoke(eq("group_del"), flagsCaptor.capture(), paramsCaptor.capture(), eq(Group.class))).thenReturn(response1, response2);
    underTest.removeGroups(false, freeIpaClient, groups, warnings::put);
    assertTrue(warnings.isEmpty());
    verifyNoInteractions(batchPartitionSizeProperties);
    verify(freeIpaClient, never()).callBatch(any(), any(), any(), any(), any());
    List<List<Object>> flagsList = flagsCaptor.getAllValues();
    assertThat(flagsList, allOf(hasItem(hasItem("group1")), hasItem(hasItem("group2"))));
    List<Map<String, Object>> paramsList = paramsCaptor.getAllValues();
    assertThat(paramsList, everyItem(aMapWithSize(0)));
    verify(interruptChecker, times(4)).throwTimeoutExIfInterrupted();
}
Also used : FmsGroup(com.sequenceiq.freeipa.service.freeipa.user.model.FmsGroup) Group(com.sequenceiq.freeipa.client.model.Group) FmsGroup(com.sequenceiq.freeipa.service.freeipa.user.model.FmsGroup) RPCResponse(com.sequenceiq.cloudbreak.client.RPCResponse) List(java.util.List) Map(java.util.Map) Test(org.junit.jupiter.api.Test)

Example 37 with RPCResponse

use of com.sequenceiq.cloudbreak.client.RPCResponse in project cloudbreak by hortonworks.

the class UserSyncOperationsTest method testAddUsersToGroupsSingle.

@Test
public void testAddUsersToGroupsSingle() throws Exception {
    Multimap<String, String> groupMapping = setupGroupMapping(5, MAX_SUBJECTS_PER_REQUEST * 2);
    Multimap<String, String> warnings = ArrayListMultimap.create();
    ArgumentCaptor<List<Object>> flagsCaptor = ArgumentCaptor.forClass(List.class);
    ArgumentCaptor<Map<String, Object>> paramsCaptor = ArgumentCaptor.forClass(Map.class);
    RPCResponse<Object> response = new RPCResponse<>();
    Group result = new Group();
    result.setMemberUser(List.copyOf(groupMapping.values()));
    response.setResult(result);
    when(freeIpaClient.invoke(eq("group_add_member"), flagsCaptor.capture(), paramsCaptor.capture(), eq(Group.class))).thenReturn(response);
    underTest.addUsersToGroups(false, freeIpaClient, groupMapping, warnings::put);
    assertTrue(warnings.isEmpty());
    verifyNoInteractions(batchPartitionSizeProperties);
    verify(freeIpaClient, never()).callBatch(any(), any(), any(), any(), any());
    List<List<Object>> flagsList = flagsCaptor.getAllValues();
    Map<String, Long> flagCount = flagsList.stream().flatMap(Collection::stream).map(o -> (String) o).collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
    assertEquals(5, flagCount.size());
    assertTrue(flagCount.keySet().containsAll(Set.of("group1", "group2", "group3", "group4", "group0")));
    flagCount.forEach((flag, count) -> assertEquals(2, count, flag + " size should be 2"));
    List<Map<String, Object>> paramsList = paramsCaptor.getAllValues();
    assertEquals(10, paramsList.size());
    paramsList.forEach(map -> {
        assertEquals(10, ((List<String>) map.get("user")).size());
        assertTrue(((List<String>) map.get("user")).stream().allMatch(user -> user.startsWith("user")));
    });
    verify(interruptChecker, times(20)).throwTimeoutExIfInterrupted();
}
Also used : Assertions.assertThrows(org.junit.jupiter.api.Assertions.assertThrows) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) ArrayListMultimap(com.google.common.collect.ArrayListMultimap) BeforeEach(org.junit.jupiter.api.BeforeEach) Matchers.aMapWithSize(org.hamcrest.Matchers.aMapWithSize) FmsGroup(com.sequenceiq.freeipa.service.freeipa.user.model.FmsGroup) ArgumentMatchers.eq(org.mockito.ArgumentMatchers.eq) Mock(org.mockito.Mock) RPCResponse(com.sequenceiq.cloudbreak.client.RPCResponse) TimeoutException(java.util.concurrent.TimeoutException) Multimap(com.google.common.collect.Multimap) Function(java.util.function.Function) Group(com.sequenceiq.freeipa.client.model.Group) Mockito.verifyNoInteractions(org.mockito.Mockito.verifyNoInteractions) Mockito.doThrow(org.mockito.Mockito.doThrow) ArgumentCaptor(org.mockito.ArgumentCaptor) HashMultimap(com.google.common.collect.HashMultimap) Matchers.everyItem(org.hamcrest.Matchers.everyItem) Assertions.assertFalse(org.junit.jupiter.api.Assertions.assertFalse) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) Map(java.util.Map) BatchPartitionSizeProperties(com.sequenceiq.freeipa.configuration.BatchPartitionSizeProperties) ThreadInterruptChecker(com.sequenceiq.freeipa.util.ThreadInterruptChecker) MatcherAssert.assertThat(org.hamcrest.MatcherAssert.assertThat) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) Matchers.hasEntry(org.hamcrest.Matchers.hasEntry) InjectMocks(org.mockito.InjectMocks) MockitoExtension(org.mockito.junit.jupiter.MockitoExtension) Matchers.allOf(org.hamcrest.Matchers.allOf) Collection(java.util.Collection) Set(java.util.Set) Matchers(org.hamcrest.Matchers) ReflectionTestUtils(org.springframework.test.util.ReflectionTestUtils) User(com.sequenceiq.freeipa.client.model.User) Mockito.times(org.mockito.Mockito.times) FreeIpaClientException(com.sequenceiq.freeipa.client.FreeIpaClientException) Mockito.when(org.mockito.Mockito.when) FreeIpaClient(com.sequenceiq.freeipa.client.FreeIpaClient) FmsUser(com.sequenceiq.freeipa.service.freeipa.user.model.FmsUser) Collectors(java.util.stream.Collectors) FreeIpaErrorCodes(com.sequenceiq.freeipa.client.FreeIpaErrorCodes) Mockito.verify(org.mockito.Mockito.verify) Test(org.junit.jupiter.api.Test) Mockito.never(org.mockito.Mockito.never) List(java.util.List) Matchers.hasItem(org.hamcrest.Matchers.hasItem) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) JsonRpcClientException(com.googlecode.jsonrpc4j.JsonRpcClientException) FmsGroup(com.sequenceiq.freeipa.service.freeipa.user.model.FmsGroup) Group(com.sequenceiq.freeipa.client.model.Group) RPCResponse(com.sequenceiq.cloudbreak.client.RPCResponse) Collection(java.util.Collection) List(java.util.List) Map(java.util.Map) Test(org.junit.jupiter.api.Test)

Example 38 with RPCResponse

use of com.sequenceiq.cloudbreak.client.RPCResponse in project cloudbreak by hortonworks.

the class UserSyncOperationsTest method testAddGroupsSingle.

@Test
public void testAddGroupsSingle() throws FreeIpaClientException, TimeoutException {
    Multimap<String, String> warnings = ArrayListMultimap.create();
    FmsGroup group1 = new FmsGroup().withName(UserSyncConstants.CDP_USERSYNC_INTERNAL_GROUP);
    FmsGroup group2 = new FmsGroup().withName("group2");
    Set<FmsGroup> groups = Set.of(group1, group2);
    ArgumentCaptor<List<Object>> flagsCaptor = ArgumentCaptor.forClass(List.class);
    ArgumentCaptor<Map<String, Object>> paramsCaptor = ArgumentCaptor.forClass(Map.class);
    RPCResponse<Object> response1 = new RPCResponse<>();
    response1.setResult(new Group());
    RPCResponse<Object> response2 = new RPCResponse<>();
    response2.setResult(new Group());
    when(freeIpaClient.invoke(eq("group_add"), flagsCaptor.capture(), paramsCaptor.capture(), eq(Group.class))).thenReturn(response1, response2);
    underTest.addGroups(false, freeIpaClient, groups, warnings::put);
    assertTrue(warnings.isEmpty());
    verifyNoInteractions(batchPartitionSizeProperties);
    verify(freeIpaClient, never()).callBatch(any(), any(), any(), any(), any());
    List<List<Object>> flagsList = flagsCaptor.getAllValues();
    assertThat(flagsList, allOf(hasItem(hasItem(UserSyncConstants.CDP_USERSYNC_INTERNAL_GROUP)), hasItem(hasItem("group2"))));
    List<Map<String, Object>> paramsList = paramsCaptor.getAllValues();
    assertTrue(paramsList.get(0).isEmpty());
    assertEquals(true, paramsList.get(1).get("nonposix"));
    verify(interruptChecker, times(4)).throwTimeoutExIfInterrupted();
}
Also used : FmsGroup(com.sequenceiq.freeipa.service.freeipa.user.model.FmsGroup) Group(com.sequenceiq.freeipa.client.model.Group) FmsGroup(com.sequenceiq.freeipa.service.freeipa.user.model.FmsGroup) RPCResponse(com.sequenceiq.cloudbreak.client.RPCResponse) List(java.util.List) Map(java.util.Map) Test(org.junit.jupiter.api.Test)

Example 39 with RPCResponse

use of com.sequenceiq.cloudbreak.client.RPCResponse in project cloudbreak by hortonworks.

the class UserSyncOperationsTest method testAddUsersSingle.

@Test
public void testAddUsersSingle() throws FreeIpaClientException, TimeoutException {
    Multimap<String, String> warnings = ArrayListMultimap.create();
    FmsUser user1 = new FmsUser().withName("user1").withFirstName("User_1").withLastName("Test1").withState(FmsUser.State.ENABLED);
    FmsUser user2 = new FmsUser().withName("user2").withFirstName("User_2").withLastName("Test2").withState(FmsUser.State.DISABLED);
    Set<FmsUser> users = Set.of(user1, user2);
    ArgumentCaptor<List<Object>> flagsCaptor = ArgumentCaptor.forClass(List.class);
    ArgumentCaptor<Map<String, Object>> paramsCaptor = ArgumentCaptor.forClass(Map.class);
    RPCResponse<Object> response1 = new RPCResponse<>();
    response1.setResult(new User());
    RPCResponse<Object> response2 = new RPCResponse<>();
    response2.setResult(new User());
    when(freeIpaClient.invoke(eq("user_add"), flagsCaptor.capture(), paramsCaptor.capture(), eq(User.class))).thenReturn(response1, response2);
    underTest.addUsers(false, freeIpaClient, users, warnings::put);
    assertTrue(warnings.isEmpty());
    verifyNoInteractions(batchPartitionSizeProperties);
    verify(freeIpaClient, never()).callBatch(any(), any(), any(), any(), any());
    List<List<Object>> flagsList = flagsCaptor.getAllValues();
    assertThat(flagsList, allOf(hasItem(hasItem("user1")), hasItem(hasItem("user2"))));
    List<Map<String, Object>> paramsList = paramsCaptor.getAllValues();
    assertThat(paramsList, everyItem(aMapWithSize(5)));
    assertThat(paramsList, allOf(Matchers.<Map<String, Object>>hasItem(allOf(hasEntry("givenname", "User_1"), hasEntry("sn", "Test1"))), Matchers.<Map<String, Object>>hasItem(allOf(hasEntry("givenname", "User_2"), hasEntry("sn", "Test2")))));
    verify(interruptChecker, times(4)).throwTimeoutExIfInterrupted();
}
Also used : User(com.sequenceiq.freeipa.client.model.User) FmsUser(com.sequenceiq.freeipa.service.freeipa.user.model.FmsUser) FmsUser(com.sequenceiq.freeipa.service.freeipa.user.model.FmsUser) RPCResponse(com.sequenceiq.cloudbreak.client.RPCResponse) List(java.util.List) Map(java.util.Map) Test(org.junit.jupiter.api.Test)

Example 40 with RPCResponse

use of com.sequenceiq.cloudbreak.client.RPCResponse in project cloudbreak by hortonworks.

the class FreeIpaClient method invoke.

public <T> RPCResponse<T> invoke(String method, List<Object> flags, Map<String, Object> params, Type resultType) throws FreeIpaClientException {
    Map<String, Object> parameterMap = new HashMap<>();
    if (params != null && !params.isEmpty()) {
        parameterMap.putAll(params);
    }
    parameterMap.put("version", apiVersion);
    LOGGER.debug("Issuing JSON-RPC request:\n\n method: {}\n flags: {}\n", method, flags);
    ParameterizedType type = TypeUtils.parameterize(RPCResponse.class, resultType);
    Span span = TracingUtil.initSpan(tracer, "FreeIpa", method);
    try (Scope ignored = tracer.activateSpan(span)) {
        RPCResponse<T> response = (RPCResponse<T>) jsonRpcHttpClient.invoke(method, List.of(flags, parameterMap), type);
        LOGGER.debug("Response object: {}", response);
        if (response == null) {
            // when the cluster-proxy request times out.
            throw new NullPointerException("JSON-RPC response is null");
        }
        return response;
    } catch (ClusterProxyException e) {
        String message = String.format("Invoke FreeIPA failed: %s", e.getLocalizedMessage());
        LOGGER.warn(message);
        OptionalInt responseCode = extractResponseCode(e);
        span.setTag(TracingUtil.ERROR, true);
        span.setTag(TracingUtil.MESSAGE, e.getLocalizedMessage());
        throw FreeIpaClientExceptionUtil.convertToRetryableIfNeeded(new FreeIpaClientException(message, e, responseCode));
    } catch (Exception e) {
        String message = String.format("Invoke FreeIPA failed: %s", e.getLocalizedMessage());
        LOGGER.warn(message);
        OptionalInt responseCode = extractResponseCode(e);
        span.setTag(TracingUtil.ERROR, true);
        span.setTag(TracingUtil.MESSAGE, e.getLocalizedMessage());
        throw FreeIpaClientExceptionUtil.convertToRetryableIfNeeded(new FreeIpaClientException(message, e, responseCode));
    } catch (Throwable throwable) {
        String message = String.format("Invoke FreeIPA failed: %s", throwable.getLocalizedMessage());
        LOGGER.warn(message);
        span.setTag(TracingUtil.ERROR, true);
        span.setTag(TracingUtil.MESSAGE, throwable.getLocalizedMessage());
        throw new FreeIpaClientException(message, throwable);
    } finally {
        span.finish();
    }
}
Also used : HashMap(java.util.HashMap) RPCResponse(com.sequenceiq.cloudbreak.client.RPCResponse) OptionalInt(java.util.OptionalInt) Span(io.opentracing.Span) TimeoutException(java.util.concurrent.TimeoutException) ClusterProxyException(com.sequenceiq.cloudbreak.clusterproxy.ClusterProxyException) ParameterizedType(java.lang.reflect.ParameterizedType) ClusterProxyException(com.sequenceiq.cloudbreak.clusterproxy.ClusterProxyException) Scope(io.opentracing.Scope)

Aggregations

RPCResponse (com.sequenceiq.cloudbreak.client.RPCResponse)43 Test (org.junit.jupiter.api.Test)31 Map (java.util.Map)17 Group (com.sequenceiq.freeipa.client.model.Group)12 User (com.sequenceiq.freeipa.client.model.User)10 FreeIpaClient (com.sequenceiq.freeipa.client.FreeIpaClient)9 FreeIpaClientException (com.sequenceiq.freeipa.client.FreeIpaClientException)9 ExtendWith (org.junit.jupiter.api.extension.ExtendWith)9 ArgumentMatchers.any (org.mockito.ArgumentMatchers.any)9 ArgumentMatchers.eq (org.mockito.ArgumentMatchers.eq)9 Mock (org.mockito.Mock)9 Mockito.verify (org.mockito.Mockito.verify)9 Mockito.when (org.mockito.Mockito.when)9 MockitoExtension (org.mockito.junit.jupiter.MockitoExtension)9 RPCMessage (com.sequenceiq.cloudbreak.client.RPCMessage)8 List (java.util.List)8 ArgumentMatchers.anyList (org.mockito.ArgumentMatchers.anyList)7 ArgumentMatchers.argThat (org.mockito.ArgumentMatchers.argThat)7 SudoRule (com.sequenceiq.freeipa.client.model.SudoRule)6 FmsUser (com.sequenceiq.freeipa.service.freeipa.user.model.FmsUser)6