Add collaboration feature
[sdc.git] / openecomp-be / backend / openecomp-sdc-vendor-software-product-manager / src / test / java / org / openecomp / sdc / vendorsoftwareproduct / impl / MonitoringUploadsManagerImplTest.java
1 package org.openecomp.sdc.vendorsoftwareproduct.impl;
2
3 import org.mockito.InjectMocks;
4 import org.mockito.Mock;
5 import org.mockito.MockitoAnnotations;
6 import org.openecomp.core.enrichment.types.MonitoringUploadType;
7 import org.openecomp.sdc.common.errors.CoreException;
8 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentArtifactDao;
9 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentMonitoringUploadEntity;
10 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.MonitoringUploadStatus;
11 import org.openecomp.sdc.versioning.dao.types.Version;
12 import org.testng.Assert;
13 import org.testng.annotations.BeforeMethod;
14 import org.testng.annotations.Test;
15
16 import java.io.IOException;
17 import java.io.InputStream;
18 import java.net.URL;
19 import java.util.Arrays;
20 import java.util.Optional;
21 import java.util.function.Consumer;
22
23 import static org.mockito.Matchers.any;
24 import static org.mockito.Matchers.anyObject;
25 import static org.mockito.Mockito.doReturn;
26 import static org.mockito.Mockito.never;
27 import static org.mockito.Mockito.verify;
28
29 public class MonitoringUploadsManagerImplTest {
30
31   private static final String COMPONENT_ID = "COMPONENT_ID";
32   private static final String VSP_ID = "vspId";
33   private static final Version VERSION = new Version("version_id");
34   private static final String TRAP_FILE_NAME = "MMSC.zip";
35   private static final String POLL_FILE_NAME = "MNS OAM FW.zip";
36   private static final String VES_FILE_NAME = "vesTest-yml_only.zip";
37   private static final String INVALID_VES_FILE_NAME = "invalid_ves_file.zip";
38   private static final String NOT_ZIP_FILE_NAME = "notZipFile";
39   private static final String ZIP_WITH_FOLDERS_FILE_NAME = "zipFileWithFolder.zip";
40   private static final String EMPTY_ZIP_FILE_NAME = "emptyZip.zip";
41   private static final String ZIP_DIR = "/vspmanager/zips/";
42
43   @Mock
44   private ComponentArtifactDao componentArtifactDaoMock;
45   @InjectMocks
46   private MonitoringUploadsManagerImpl monitoringUploadsManager;
47
48   @BeforeMethod
49   public void setUp() throws Exception {
50     MockitoAnnotations.initMocks(this);
51   }
52
53   @Test(expectedExceptions = CoreException.class)
54   public void testUploadEmptyZip() {
55     processFile(ZIP_DIR + EMPTY_ZIP_FILE_NAME, inputStream ->
56         monitoringUploadsManager
57             .upload(inputStream, EMPTY_ZIP_FILE_NAME, VSP_ID, VERSION, COMPONENT_ID,
58                 MonitoringUploadType.SNMP_TRAP));
59   }
60
61   @Test(expectedExceptions = CoreException.class, expectedExceptionsMessageRegExp =
62       "Monitoring file uploaded for vendor software product with Id vspId and version version_id " +
63           "is invalid: Invalid zip file")
64   public void testUploadInvalidZip() {
65     processFile("/notZipFile", inputStream ->
66         monitoringUploadsManager
67             .upload(inputStream, NOT_ZIP_FILE_NAME, VSP_ID, VERSION, COMPONENT_ID,
68                 MonitoringUploadType.VES_EVENTS));
69   }
70
71   @Test
72   public void testUploadZipWithFolders() {
73
74     try {
75       processFile(ZIP_DIR + ZIP_WITH_FOLDERS_FILE_NAME, inputStream -> monitoringUploadsManager
76           .upload(inputStream, ZIP_WITH_FOLDERS_FILE_NAME, VSP_ID, VERSION, COMPONENT_ID,
77               MonitoringUploadType.SNMP_TRAP));
78       Assert.fail();
79     } catch (Exception exception) {
80       Assert.assertEquals(exception.getMessage(), "Zip file should not contain folders");
81     }
82   }
83
84   @Test
85   public void testUploadVEsEventZipWithNonYamlFiles() {
86
87     try {
88       processFile(ZIP_DIR + INVALID_VES_FILE_NAME, inputStream -> monitoringUploadsManager
89           .upload(inputStream, INVALID_VES_FILE_NAME, VSP_ID, VERSION, COMPONENT_ID,
90               MonitoringUploadType.VES_EVENTS));
91       Assert.fail();
92     } catch (Exception exception) {
93       Assert.assertEquals(exception.getMessage(),
94           "Wrong VES EVENT Artifact was uploaded - all files contained in Artifact must be YAML " +
95               "files (using .yaml/.yml extensions)");
96     }
97   }
98
99
100   @Test
101   public void testListMonitoringFilenames() {
102     ComponentMonitoringUploadEntity artifact1 =
103         new ComponentMonitoringUploadEntity(VSP_ID, VERSION, COMPONENT_ID, "artifact1");
104     artifact1.setType(MonitoringUploadType.SNMP_TRAP);
105     artifact1.setArtifactName(TRAP_FILE_NAME);
106
107     ComponentMonitoringUploadEntity artifact2 =
108         new ComponentMonitoringUploadEntity(VSP_ID, VERSION, COMPONENT_ID, "artifact2");
109     artifact2.setType(MonitoringUploadType.SNMP_POLL);
110     artifact2.setArtifactName(POLL_FILE_NAME);
111
112     ComponentMonitoringUploadEntity artifact3 =
113         new ComponentMonitoringUploadEntity(VSP_ID, VERSION, COMPONENT_ID, "artifact3");
114     artifact3.setType(MonitoringUploadType.VES_EVENTS);
115     artifact3.setArtifactName(VES_FILE_NAME);
116
117     doReturn(Arrays.asList(artifact1, artifact2, artifact3))
118         .when(componentArtifactDaoMock).list(anyObject());
119
120     MonitoringUploadStatus monitoringUploadStatus =
121         monitoringUploadsManager.listFilenames(VSP_ID, VERSION, COMPONENT_ID);
122
123     Assert.assertEquals(monitoringUploadStatus.getSnmpTrap(), TRAP_FILE_NAME);
124     Assert.assertEquals(monitoringUploadStatus.getSnmpPoll(), POLL_FILE_NAME);
125     Assert.assertEquals(monitoringUploadStatus.getVesEvent(), VES_FILE_NAME);
126   }
127
128   @Test(expectedExceptions = CoreException.class)
129   public void testDeleteComponentMibWhenNone() {
130     doReturn(Optional.empty()).when(componentArtifactDaoMock).getByType(any());
131     monitoringUploadsManager
132         .delete(VSP_ID, VERSION, COMPONENT_ID, MonitoringUploadType.SNMP_POLL);
133
134     verify(componentArtifactDaoMock, never()).delete(anyObject());
135   }
136
137   @Test
138   public void testDeleteComponentMonitoringUpload() {
139     doReturn(Optional
140         .of(new ComponentMonitoringUploadEntity(VSP_ID, VERSION, COMPONENT_ID, "artifactId")))
141         .when
142             (componentArtifactDaoMock).getByType(anyObject());
143
144     monitoringUploadsManager
145         .delete(VSP_ID, VERSION, COMPONENT_ID, MonitoringUploadType.SNMP_POLL);
146
147     verify(componentArtifactDaoMock).delete(anyObject());
148   }
149
150
151   private void processFile(String fileName, Consumer<InputStream> processor) {
152
153     URL url = this.getClass().getResource(fileName);
154     try (InputStream inputStream = url.openStream()) {
155       processor.accept(inputStream);
156     } catch (IOException e) {
157       throw new RuntimeException("Failed to process file: " + fileName, e);
158     }
159   }
160 }