1 package org.openecomp.sdc.be.components.impl.version;
4 import org.junit.Before;
6 import org.junit.runner.RunWith;
7 import org.mockito.ArgumentCaptor;
8 import org.mockito.Captor;
9 import org.mockito.InjectMocks;
10 import org.mockito.Mock;
11 import org.mockito.junit.MockitoJUnitRunner;
12 import org.openecomp.sdc.be.components.utils.ComponentInstanceBuilder;
13 import org.openecomp.sdc.be.components.utils.GroupDefinitionBuilder;
14 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
15 import org.openecomp.sdc.be.dao.api.ActionStatus;
16 import org.openecomp.sdc.be.datatypes.elements.GroupDataDefinition;
17 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
18 import org.openecomp.sdc.be.impl.ComponentsUtils;
19 import org.openecomp.sdc.be.model.ComponentInstance;
20 import org.openecomp.sdc.be.model.GroupDefinition;
21 import org.openecomp.sdc.be.model.Resource;
22 import org.openecomp.sdc.be.model.jsontitan.operations.GroupsOperation;
23 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
25 import java.util.ArrayList;
26 import java.util.List;
27 import java.util.stream.Stream;
29 import static java.util.Collections.emptyMap;
30 import static org.assertj.core.api.Assertions.assertThat;
31 import static org.mockito.ArgumentMatchers.eq;
32 import static org.mockito.Mockito.when;
34 @RunWith(MockitoJUnitRunner.class)
35 public class GroupMembersUpdateOperationTest {
37 private static final String CONTAINER_ID = "containerId";
38 private static final String INSTANCE_ID_PRE_CHANGE = "inst2";
39 private static final String INSTANCE_ID_POST_CHANGE = "newInst2";
41 private GroupMembersUpdateOperation testInstance;
43 private GroupsOperation groupsOperation;
45 private ComponentsUtils componentsUtils;
48 private ArgumentCaptor<List<GroupDataDefinition>> updatedGroupsCaptor;
49 private GroupDefinition group1, group2, group3;
50 private Resource container;
51 private ComponentInstance prevInst2Version, currInst2Version;
52 private static final ComponentInstance DONT_CARE = new ComponentInstance();
55 public void setUp() throws Exception {
56 group1 = createGroupWithMembers("group1", "inst1", INSTANCE_ID_PRE_CHANGE);
57 group2 = createGroupWithMembers("group2", "inst1", "inst2", "inst3");
58 group3 = createGroupWithMembers("group3", "inst1", "inst3");
59 container = new ResourceBuilder()
62 .setUniqueId(CONTAINER_ID)
63 .setComponentType(ComponentTypeEnum.RESOURCE)
65 prevInst2Version = new ComponentInstanceBuilder()
66 .setId(INSTANCE_ID_PRE_CHANGE)
68 currInst2Version = new ComponentInstanceBuilder()
69 .setId(INSTANCE_ID_POST_CHANGE)
74 public void whenNoGroupsOnContainer_returnOk() {
75 ActionStatus actionStatus = testInstance.onChangeVersion(new Resource(), DONT_CARE, DONT_CARE);
76 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
80 public void whenEmptyListOfGroups_returnOk() {
81 Resource resource = new Resource();
82 resource.setGroups(new ArrayList<>());
83 ActionStatus actionStatus = testInstance.onChangeVersion(resource, DONT_CARE, DONT_CARE);
84 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
88 public void whenGroupsHasNoMembers_returnOk() {
89 GroupDefinition group1 = new GroupDefinition();
90 group1.setMembers(emptyMap());
91 GroupDefinition group2 = new GroupDefinition();
92 group2.setMembers(emptyMap());
93 Resource container = new ResourceBuilder()
97 ComponentInstance prevInstance = new ComponentInstanceBuilder().setId("inst1").build();
98 ActionStatus actionStatus = testInstance.onChangeVersion(container, prevInstance, DONT_CARE);
99 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
103 public void whenPrevInstanceIsNotAMemberOfAnyGroup_returnOk() {
104 ComponentInstance prevInstance = new ComponentInstanceBuilder().setId("nonMemberInst").build();
105 ActionStatus actionStatus = testInstance.onChangeVersion(container, prevInstance, DONT_CARE);
106 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
110 public void whenGroupHasPrevInstanceAsMember_replaceWithNewInstanceId_updateReplacedGroups() {
111 verifyAllGroupsHasPrevInstancesAsMembers();
112 when(groupsOperation.updateGroups(eq(container), updatedGroupsCaptor.capture())).thenReturn(Either.left(null));
113 ActionStatus actionStatus = testInstance.onChangeVersion(container, prevInst2Version, currInst2Version);
114 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
115 verifyGroupWithPrevInstanceMemberWereReplaced();
116 assertThat(updatedGroupsCaptor.getValue())
117 .containsExactlyInAnyOrder(group1, group2);
121 public void whenFailingToUpdateGroups_propagateError() {
122 when(groupsOperation.updateGroups(eq(container), updatedGroupsCaptor.capture())).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
123 when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.NOT_FOUND, ComponentTypeEnum.RESOURCE)).thenCallRealMethod();
124 ActionStatus actionStatus = testInstance.onChangeVersion(container, prevInst2Version, currInst2Version);
125 assertThat(actionStatus).isEqualTo(ActionStatus.RESOURCE_NOT_FOUND);
128 private void verifyGroupWithPrevInstanceMemberWereReplaced() {
129 assertGroupMembersIds(group1, "inst1", INSTANCE_ID_POST_CHANGE);
130 assertGroupMembersIds(group2, "inst1", INSTANCE_ID_POST_CHANGE, "inst3");
131 assertGroupMembersIds(group3, "inst1", "inst3");
134 private void verifyAllGroupsHasPrevInstancesAsMembers() {
135 assertGroupMembersIds(group1, "inst1", INSTANCE_ID_PRE_CHANGE);
136 assertGroupMembersIds(group2, "inst1", INSTANCE_ID_PRE_CHANGE, "inst3");
137 assertGroupMembersIds(group3, "inst1", "inst3");
140 private void assertGroupMembersIds(GroupDefinition group, String ... expectedMembersIds) {
141 assertThat(group.getMembers())
142 .containsValues(expectedMembersIds);
145 private GroupDefinition createGroupWithMembers(String groupId, String ... membersIds) {
146 GroupDefinitionBuilder groupDefinitionBuilder = GroupDefinitionBuilder.create();
147 Stream.of(membersIds).forEach(memberId -> groupDefinitionBuilder.addMember(memberId + "name", memberId));
148 groupDefinitionBuilder.setUniqueId(groupId);
149 return groupDefinitionBuilder.build();