1 package org.onap.vid.services;
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;
20 import java.util.UUID;
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.*;
29 public class VidServiceImplTest {
31 @Mock(answer = Answers.RETURNS_MOCKS)
32 AsdcClient asdcClientMock;
34 @Mock(answer = Answers.RETURNS_MOCKS)
35 ToscaParserImpl2 toscaParserMock;
38 FeatureManager featureManager;
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)
49 private final Map<Service, ServiceModel> pseudoModelByService =
50 pseudoServiceByUuid.values().stream()
51 .collect(toMap(service -> service, service -> mock(ServiceModel.class)));
52 private VidServiceImpl vidService;
54 private ServiceModel expectedServiceModelForUuid(UUID uuid) {
55 final ServiceModel serviceModel = pseudoModelByService.get(pseudoServiceByUuid.get(uuid));
56 assertThat(serviceModel, is(not(nullValue())));
61 public void initMocks() throws AsdcCatalogException, SdcToscaParserException, IllegalAccessException {
62 MockitoAnnotations.initMocks(this);
64 vidService = new VidServiceImpl(asdcClientMock, featureManager);
65 FieldUtils.writeField(vidService, "toscaParser", toscaParserMock, true);
67 when(featureManager.isActive(Features.FLAG_SERVICE_MODEL_CACHE)).thenReturn(true);
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]));
74 public void whenGetServiceMultipleTimes_asdcIsCalledOnlyOnce() throws AsdcCatalogException {
75 vidService.getService(uuid1.toString());
76 vidService.getService(uuid1.toString());
77 vidService.getService(uuid1.toString());
79 verify(asdcClientMock, times(1)).getService(uuid1);
83 public void whenGetServiceTwiceWithResetBetween_asdcIsCalledTwice() throws AsdcCatalogException {
84 vidService.getService(uuid1.toString());
85 vidService.invalidateServiceCache();
86 vidService.getService(uuid1.toString());
88 verify(asdcClientMock, times(2)).getService(uuid1);
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());
97 assertThat(service1, sameInstance(expectedServiceModelForUuid(uuid1)));
98 assertThat(service1, sameInstance(service2));
99 assertThat(service1, sameInstance(service3));
103 public void cache_provide_correct_serviceModel() throws AsdcCatalogException {
104 ServiceModel service2 = vidService.getService(uuid2.toString());
105 assertThat(service2, sameInstance(expectedServiceModelForUuid(uuid2)));
107 ServiceModel service3 = vidService.getService(uuid3.toString());
108 assertThat(service3, sameInstance(expectedServiceModelForUuid(uuid3)));
110 UUID nonExisting = UUID.randomUUID();
111 ServiceModel service4 = vidService.getService(nonExisting.toString());
112 assertThat(service4, is(nullValue()));
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());