Merge 1806 code of vid-common
[vid.git] / vid-app-common / src / test / java / org / onap / vid / services / VidServiceImplTest.java
1 package org.onap.vid.services;
2
3 import com.google.common.collect.ImmutableMap;
4 import org.apache.commons.lang3.reflect.FieldUtils;
5 import org.mockito.Answers;
6 import org.mockito.Mock;
7 import org.mockito.MockitoAnnotations;
8 import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException;
9 import org.onap.vid.asdc.AsdcCatalogException;
10 import org.onap.vid.asdc.AsdcClient;
11 import org.onap.vid.asdc.beans.Service;
12 import org.onap.vid.asdc.parser.ToscaParserImpl2;
13 import org.onap.vid.model.ServiceModel;
14 import org.onap.vid.properties.Features;
15 import org.testng.annotations.BeforeMethod;
16 import org.testng.annotations.Test;
17 import org.togglz.core.manager.FeatureManager;
18
19 import java.util.Map;
20 import java.util.UUID;
21
22 import static java.util.stream.Collectors.toMap;
23 import static org.hamcrest.CoreMatchers.*;
24 import static org.hamcrest.Matchers.not;
25 import static org.junit.Assert.assertThat;
26 import static org.mockito.Mockito.any;
27 import static org.mockito.Mockito.*;
28
29 public class VidServiceImplTest {
30
31     @Mock(answer = Answers.RETURNS_MOCKS)
32     AsdcClient asdcClientMock;
33
34     @Mock(answer = Answers.RETURNS_MOCKS)
35     ToscaParserImpl2 toscaParserMock;
36
37     @Mock
38     FeatureManager featureManager;
39
40     private final UUID uuid1 = UUID.randomUUID();
41     private final UUID uuid2 = UUID.randomUUID();
42     private final UUID uuid3 = UUID.randomUUID();
43     private final Map<UUID, Service> pseudoServiceByUuid = ImmutableMap.of(
44             uuid1, mock(Service.class),
45             uuid2, mock(Service.class),
46             uuid3, mock(Service.class)
47     );
48
49     private final Map<Service, ServiceModel> pseudoModelByService =
50             pseudoServiceByUuid.values().stream()
51                     .collect(toMap(service -> service, service -> mock(ServiceModel.class)));
52     private VidServiceImpl vidService;
53
54     private ServiceModel expectedServiceModelForUuid(UUID uuid) {
55         final ServiceModel serviceModel = pseudoModelByService.get(pseudoServiceByUuid.get(uuid));
56         assertThat(serviceModel, is(not(nullValue())));
57         return serviceModel;
58     }
59
60     @BeforeMethod
61     public void initMocks() throws AsdcCatalogException, SdcToscaParserException, IllegalAccessException {
62         MockitoAnnotations.initMocks(this);
63
64         vidService = new VidServiceImpl(asdcClientMock, featureManager);
65         FieldUtils.writeField(vidService, "toscaParser", toscaParserMock, true);
66
67         when(featureManager.isActive(Features.FLAG_SERVICE_MODEL_CACHE)).thenReturn(true);
68
69         when(asdcClientMock.getService(any())).thenAnswer(invocation ->  pseudoServiceByUuid.get(invocation.getArguments()[0]));
70         when(toscaParserMock.makeServiceModel(any(), any())).thenAnswer(invocation ->  pseudoModelByService.get(invocation.getArguments()[1]));
71     }
72
73     @Test
74     public void whenGetServiceMultipleTimes_asdcIsCalledOnlyOnce() throws AsdcCatalogException {
75         vidService.getService(uuid1.toString());
76         vidService.getService(uuid1.toString());
77         vidService.getService(uuid1.toString());
78
79         verify(asdcClientMock, times(1)).getService(uuid1);
80     }
81
82     @Test
83     public void whenGetServiceTwiceWithResetBetween_asdcIsCalledTwice() throws AsdcCatalogException {
84         vidService.getService(uuid1.toString());
85         vidService.invalidateServiceCache();
86         vidService.getService(uuid1.toString());
87
88         verify(asdcClientMock, times(2)).getService(uuid1);
89     }
90
91     @Test
92     public void cache_saves_service_model_correctly() throws AsdcCatalogException {
93         ServiceModel service1 = vidService.getService(uuid1.toString());
94         ServiceModel service2 = vidService.getService(uuid1.toString());
95         ServiceModel service3 = vidService.getService(uuid1.toString());
96
97         assertThat(service1, sameInstance(expectedServiceModelForUuid(uuid1)));
98         assertThat(service1, sameInstance(service2));
99         assertThat(service1, sameInstance(service3));
100     }
101
102     @Test
103     public void cache_provide_correct_serviceModel() throws AsdcCatalogException {
104         ServiceModel service2 = vidService.getService(uuid2.toString());
105         assertThat(service2, sameInstance(expectedServiceModelForUuid(uuid2)));
106
107         ServiceModel service3 = vidService.getService(uuid3.toString());
108         assertThat(service3, sameInstance(expectedServiceModelForUuid(uuid3)));
109
110         UUID nonExisting = UUID.randomUUID();
111         ServiceModel service4 = vidService.getService(nonExisting.toString());
112         assertThat(service4, is(nullValue()));
113     }
114
115     @Test(expectedExceptions = AsdcCatalogException.class, expectedExceptionsMessageRegExp = "someMessage")
116     public void whenAsdcClientThrowAsdcCatalogException_thenGetServiceAlsoThrowIt() throws AsdcCatalogException {
117         when(asdcClientMock.getServiceToscaModel(any())).thenThrow(new AsdcCatalogException("someMessage"));
118         vidService.getService(uuid1.toString());
119     }
120
121 }
122