c44b9073448b302f4684c32a36d314d501f1072f
[sdc.git] /
1 package org.openecomp.sdc.be.components.property.propertytopolicydeclarators;
2
3 import static org.mockito.ArgumentMatchers.any;
4 import static org.mockito.ArgumentMatchers.eq;
5 import static org.mockito.Mockito.doNothing;
6 import static org.mockito.Mockito.never;
7 import static org.mockito.Mockito.verify;
8 import static org.mockito.Mockito.when;
9
10 import fj.data.Either;
11 import java.util.Arrays;
12 import java.util.Collections;
13 import java.util.List;
14 import java.util.Map;
15 import java.util.Optional;
16 import org.junit.Assert;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.mockito.ArgumentCaptor;
20 import org.mockito.Captor;
21 import org.mockito.InjectMocks;
22 import org.mockito.Mock;
23 import org.mockito.MockitoAnnotations;
24 import org.mockito.Spy;
25 import org.openecomp.sdc.be.components.impl.ComponentInstanceBusinessLogic;
26 import org.openecomp.sdc.be.components.impl.PropertyBusinessLogic;
27 import org.openecomp.sdc.be.datatypes.elements.PolicyDataDefinition;
28 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
29 import org.openecomp.sdc.be.model.ComponentInstance;
30 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
31 import org.openecomp.sdc.be.model.PolicyDefinition;
32 import org.openecomp.sdc.be.model.Service;
33 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
34 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
35
36 public class ComponentInstancePropertyToPolicyDeclaratorTest {
37
38     @Mock
39     private ToscaOperationFacade toscaOperationFacade;
40     @Mock
41     private PropertyBusinessLogic propertyBl;
42     @Mock
43     private ComponentInstanceBusinessLogic componentInstanceBl;
44     @InjectMocks
45     private ComponentInstancePropertyToPolicyDeclarator declarator;
46     @Captor
47     private ArgumentCaptor<ComponentInstanceProperty> captor;
48
49     private static Service service;
50     private static ComponentInstance componentInstance;
51     private static PropertyDataDefinition prop1;
52     private static final String PROP_1_NAME = "prop1";
53     private static final String NON_EXIST_PROP_NAME = "prop1";
54     private static final String COMPONENT_INSTANCE_ID = "ciId";
55     private static final String NON_EXIST_ID = "nonExistId";
56
57
58     @Before
59     public void setUp() {
60         MockitoAnnotations.initMocks(this);
61
62         service = new Service();
63         componentInstance = new ComponentInstance();
64         componentInstance.setUniqueId(COMPONENT_INSTANCE_ID);
65         service.setComponentInstances(Collections.singletonList(componentInstance));
66
67         prop1 = new PolicyDataDefinition();
68         prop1.setName(PROP_1_NAME);
69     }
70
71     @Test
72     public void testCreateDeclaredProperty_success() {
73         ComponentInstanceProperty declaredProperty = declarator.createDeclaredProperty(prop1);
74         Assert.assertEquals(prop1.getName(), declaredProperty.getName());
75     }
76
77     @Test
78     public void testUpdatePropertiesValues_success() {
79         List<ComponentInstanceProperty> properties = Arrays.asList(new ComponentInstanceProperty(prop1));
80         Map<String, List<ComponentInstanceProperty>> expectedInstanceProperties =
81                 Collections.singletonMap(COMPONENT_INSTANCE_ID, properties);
82
83         when(toscaOperationFacade
84                      .addComponentInstancePropertiesToComponent(eq(service), eq(expectedInstanceProperties)))
85                 .thenReturn(Either.left(expectedInstanceProperties));
86
87
88         Either<Map<String, List<ComponentInstanceProperty>>, StorageOperationStatus> updateEither =
89                 (Either<Map<String, List<ComponentInstanceProperty>>, StorageOperationStatus>) declarator
90                                                                                                        .updatePropertiesValues(
91                                                                                                                service,
92                                                                                                                COMPONENT_INSTANCE_ID,
93                                                                                                                properties);
94
95         Assert.assertTrue(updateEither.isLeft());
96         Map<String, List<ComponentInstanceProperty>> actualInstanceProperties = updateEither.left().value();
97         validateUpdateResult(properties, expectedInstanceProperties, actualInstanceProperties);
98     }
99
100     @Test
101     public void testResolvePropertiesOwner_success() {
102         Optional<ComponentInstance> componentInstanceCandidate =
103                 declarator.resolvePropertiesOwner(service, COMPONENT_INSTANCE_ID);
104
105         Assert.assertTrue(componentInstanceCandidate.isPresent());
106         Assert.assertEquals(componentInstanceCandidate.get(), componentInstance);
107     }
108
109     @Test
110     public void testResolvePropertiesOwner_failure() {
111         Optional<ComponentInstance> componentInstanceCandidate =
112                 declarator.resolvePropertiesOwner(service, NON_EXIST_ID);
113
114         Assert.assertFalse(componentInstanceCandidate.isPresent());
115     }
116
117     @Test
118     public void testUnDeclarePropertiesAsPolicies_success() {
119         PolicyDefinition policyDefinition = new PolicyDefinition();
120         policyDefinition.setName(PROP_1_NAME);
121
122         when(componentInstanceBl.getComponentInstancePropertyByPolicyId(eq(service), eq(policyDefinition)))
123                 .thenReturn(Optional.of(new ComponentInstanceProperty(prop1)));
124         when(toscaOperationFacade
125                      .updateComponentInstanceProperty(any(), any(), captor.capture()))
126                 .thenReturn(StorageOperationStatus.OK);
127
128         StorageOperationStatus status =
129                 declarator.unDeclarePropertiesAsPolicies(service, policyDefinition);
130
131         Assert.assertEquals(status, StorageOperationStatus.OK);
132
133         ComponentInstanceProperty actualProperty = captor.getValue();
134         Assert.assertEquals(prop1.getName(), actualProperty.getName());
135     }
136
137     private void validateUpdateResult(List<ComponentInstanceProperty> properties,
138             Map<String, List<ComponentInstanceProperty>> expectedInstanceProperties,
139             Map<String, List<ComponentInstanceProperty>> actualInstanceProperties) {
140         Assert.assertEquals(expectedInstanceProperties.size(), actualInstanceProperties.size());
141         Assert.assertEquals(1, actualInstanceProperties.size());
142         Assert.assertEquals(expectedInstanceProperties.keySet(), actualInstanceProperties.keySet());
143
144         List<ComponentInstanceProperty> actualComponentInstanceProperties =
145                 actualInstanceProperties.get(COMPONENT_INSTANCE_ID);
146
147         Assert.assertEquals(properties, actualComponentInstanceProperties);
148     }
149 }