2 * Copyright © 2016-2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.openecomp.sdc.versioning.dao.impl.zusammen;
19 import static org.mockito.Matchers.eq;
20 import static org.mockito.Matchers.isNull;
21 import static org.mockito.Mockito.doReturn;
22 import static org.mockito.Mockito.verify;
23 import static org.openecomp.sdc.versioning.dao.impl.zusammen.TestUtil.createZusammenContext;
25 import com.amdocs.zusammen.datatypes.Id;
26 import com.amdocs.zusammen.datatypes.SessionContext;
27 import com.amdocs.zusammen.datatypes.item.Info;
28 import com.amdocs.zusammen.datatypes.item.ItemVersion;
29 import com.amdocs.zusammen.datatypes.item.ItemVersionData;
30 import com.amdocs.zusammen.datatypes.item.ItemVersionStatus;
31 import com.amdocs.zusammen.datatypes.item.SynchronizationStatus;
32 import com.amdocs.zusammen.datatypes.itemversion.ItemVersionRevisions;
33 import java.util.ArrayList;
34 import java.util.Date;
35 import java.util.List;
36 import java.util.Optional;
37 import java.util.stream.Collectors;
38 import java.util.stream.Stream;
39 import org.junit.Assert;
40 import org.junit.Before;
41 import org.junit.Test;
42 import org.mockito.ArgumentCaptor;
43 import org.mockito.InjectMocks;
44 import org.mockito.Mock;
45 import org.mockito.MockitoAnnotations;
46 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
47 import org.openecomp.sdc.common.session.SessionContextProviderFactory;
48 import org.openecomp.sdc.versioning.dao.types.Revision;
49 import org.openecomp.sdc.versioning.dao.types.Version;
50 import org.openecomp.sdc.versioning.dao.types.VersionStatus;
52 public class VersionZusammenDaoImplTest {
54 private static final String USER = "user1";
55 private static final String tenant = "dox";
57 private ZusammenAdaptor zusammenAdaptorMock;
59 private VersionZusammenDaoImpl versionDao;
62 public void setUp() throws Exception {
63 MockitoAnnotations.initMocks(this);
64 SessionContextProviderFactory.getInstance().createInterface().create(USER, tenant);
68 public void testListWhenNone() throws Exception {
69 String itemId = "itemId";
71 doReturn(new ArrayList<>()).when(zusammenAdaptorMock)
72 .listPublicVersions(eq(createZusammenContext(USER)), eq(new Id(itemId)));
74 List<Version> versions = versionDao.list(itemId);
76 Assert.assertTrue(versions.isEmpty());
80 public void testList() throws Exception {
81 String itemId = "itemId";
82 Id versionId1 = new Id("v1_id");
83 Id versionId2 = new Id("v2_id");
84 Id versionId3 = new Id("v3_id");
86 List<ItemVersion> zusammenVersions = Stream.of(
87 createZusammenVersion(versionId1, null, "version desc", "1.0", VersionStatus.Certified),
88 createZusammenVersion(versionId2, versionId1, "version desc", "2.0",
89 VersionStatus.Certified),
90 createZusammenVersion(versionId3, versionId2, "version desc", "3.0", VersionStatus.Draft))
91 .collect(Collectors.toList());
92 doReturn(zusammenVersions).when(zusammenAdaptorMock)
93 .listPublicVersions(eq(createZusammenContext(USER)), eq(new Id(itemId)));
95 List<Version> versions = versionDao.list(itemId);
96 Assert.assertEquals(versions.size(), 3);
98 int zusammenVersionIndex;
99 for (Version version : versions) {
100 zusammenVersionIndex = versionId1.getValue().equals(version.getId())
102 : versionId2.getValue().equals(version.getId())
105 assetVersionEquals(version, zusammenVersions.get(zusammenVersionIndex), null);
110 public void testCreate() throws Exception {
115 public void testCreateBasedOn() throws Exception {
116 testCreate("baseId");
119 private void testCreate(String baseId) {
120 String itemId = "itemId";
121 Version version = new Version(1, 0);
122 version.setBaseId(baseId);
123 version.setName("version name");
124 version.setDescription("version description");
125 version.setStatus(VersionStatus.Draft);
127 ArgumentCaptor<ItemVersionData> capturedZusammenVersion =
128 ArgumentCaptor.forClass(ItemVersionData.class);
130 String versionId = "versionId";
131 doReturn(new Id(versionId)).when(zusammenAdaptorMock)
132 .createVersion(eq(createZusammenContext(USER)), eq(new Id(itemId)),
133 baseId == null ? isNull(Id.class) : eq(new Id(baseId)),
134 capturedZusammenVersion.capture());
137 versionDao.create(itemId, version);
139 Assert.assertEquals(version.getId(), versionId);
141 Info capturedInfo = capturedZusammenVersion.getValue().getInfo();
142 Assert.assertEquals(capturedInfo.getName(), version.getName());
143 Assert.assertEquals(capturedInfo.getDescription(), version.getDescription());
144 Assert.assertEquals(VersionStatus
145 .valueOf(capturedInfo.getProperty(VersionZusammenDaoImpl.ZusammenProperty.STATUS)),
146 version.getStatus());
147 Assert.assertEquals(capturedInfo.getProperty(VersionZusammenDaoImpl.ZusammenProperty.LABEL),
152 public void testUpdate() throws Exception {
153 String itemId = "itemId";
154 Version version = new Version(1, 0);
155 version.setId("versionId");
156 version.setBaseId("baseId");
157 version.setName("version name");
158 version.setDescription("version description");
159 version.setStatus(VersionStatus.Certified);
161 ArgumentCaptor<ItemVersionData> capturedZusammenVersion =
162 ArgumentCaptor.forClass(ItemVersionData.class);
164 versionDao.update(itemId, version);
166 verify(zusammenAdaptorMock)
167 .updateVersion(eq(createZusammenContext(USER)), eq(new Id(itemId)),
168 eq(new Id(version.getId())), capturedZusammenVersion.capture());
170 Info capturedInfo = capturedZusammenVersion.getValue().getInfo();
171 Assert.assertEquals(capturedInfo.getName(), version.getName());
172 Assert.assertEquals(capturedInfo.getDescription(), version.getDescription());
173 Assert.assertEquals(VersionStatus
174 .valueOf(capturedInfo.getProperty(VersionZusammenDaoImpl.ZusammenProperty.STATUS)),
175 version.getStatus());
176 Assert.assertEquals(capturedInfo.getProperty(VersionZusammenDaoImpl.ZusammenProperty.LABEL),
181 public void testGetNonExisting() throws Exception {
182 Optional<Version> version = versionDao.get("itemId", new Version("versionId"));
184 Assert.assertEquals(version, Optional.empty());
188 public void testGetSynced() throws Exception {
189 String itemId = "itemId";
190 String versionId = "versionId";
192 SessionContext zusammenContext = createZusammenContext(USER);
193 Id itemIdObj = new Id(itemId);
194 Id versionIdObj = new Id(versionId);
196 ItemVersion zusammenPrivateVersion =
197 createZusammenVersion(versionIdObj, new Id("baseId"), "version desc updated", "2.0",
198 VersionStatus.Draft);
199 doReturn(zusammenPrivateVersion).when(zusammenAdaptorMock)
200 .getVersion(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
202 ItemVersionStatus zusammenVersionStatus =
203 new ItemVersionStatus(SynchronizationStatus.UP_TO_DATE, true);
204 doReturn(zusammenVersionStatus).when(zusammenAdaptorMock)
205 .getVersionStatus(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
207 Optional<Version> version = versionDao.get(itemId, new Version(versionId));
209 Assert.assertTrue(version.isPresent());
210 assetVersionEquals(version.get(), zusammenPrivateVersion, zusammenVersionStatus);
214 public void testGetOutOfSync() throws Exception {
215 String itemId = "itemId";
216 String versionId = "versionId";
218 SessionContext zusammenContext = createZusammenContext(USER);
219 Id itemIdObj = new Id(itemId);
220 Id versionIdObj = new Id(versionId);
222 ItemVersion zusammenPrivateVersion =
223 createZusammenVersion(versionIdObj, new Id("baseId"), "version desc updated", "2.0",
224 VersionStatus.Draft);
225 doReturn(zusammenPrivateVersion).when(zusammenAdaptorMock)
226 .getVersion(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
228 ItemVersionStatus zusammenVersionStatus =
229 new ItemVersionStatus(SynchronizationStatus.OUT_OF_SYNC, true);
230 doReturn(zusammenVersionStatus).when(zusammenAdaptorMock)
231 .getVersionStatus(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
233 VersionStatus statusOnPublic = VersionStatus.Certified;
234 ItemVersion zusammenPublicVersion =
235 createZusammenVersion(versionIdObj, new Id("baseId"), "version desc", "2.0",
237 doReturn(zusammenPublicVersion).when(zusammenAdaptorMock)
238 .getPublicVersion(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
240 Optional<Version> version = versionDao.get(itemId, new Version(versionId));
242 Assert.assertTrue(version.isPresent());
243 zusammenPrivateVersion.getData().getInfo()
244 .addProperty(VersionZusammenDaoImpl.ZusammenProperty.STATUS, statusOnPublic.name());
245 assetVersionEquals(version.get(), zusammenPrivateVersion, zusammenVersionStatus);
249 public void testGetMerging() throws Exception {
250 String itemId = "itemId";
251 String versionId = "versionId";
253 SessionContext zusammenContext = createZusammenContext(USER);
254 Id itemIdObj = new Id(itemId);
255 Id versionIdObj = new Id(versionId);
257 ItemVersion zusammenPrivateVersion =
258 createZusammenVersion(versionIdObj, new Id("baseId"), "version desc", "2.0",
259 VersionStatus.Draft);
260 doReturn(zusammenPrivateVersion).when(zusammenAdaptorMock)
261 .getVersion(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
263 ItemVersionStatus zusammenVersionStatus =
264 new ItemVersionStatus(SynchronizationStatus.MERGING, true);
265 doReturn(zusammenVersionStatus).when(zusammenAdaptorMock)
266 .getVersionStatus(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
268 ItemVersion zusammenPublicVersion =
269 createZusammenVersion(versionIdObj, new Id("baseId"), "version desc", "2.0",
270 VersionStatus.Draft);
271 doReturn(zusammenPublicVersion).when(zusammenAdaptorMock)
272 .getPublicVersion(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
274 Optional<Version> version = versionDao.get(itemId, new Version(versionId));
276 Assert.assertTrue(version.isPresent());
277 assetVersionEquals(version.get(), zusammenPrivateVersion, zusammenVersionStatus);
281 public void testPublish() throws Exception {
282 String itemId = "itemId";
283 String versionId = "versionId";
284 String message = "publish message";
286 versionDao.publish(itemId, new Version(versionId), message);
288 verify(zusammenAdaptorMock)
289 .publishVersion(eq(createZusammenContext(USER)), eq(new Id(itemId)), eq(new Id(versionId)),
294 public void testSync() throws Exception {
295 String itemId = "itemId";
296 String versionId = "versionId";
298 versionDao.sync(itemId, new Version(versionId));
300 verify(zusammenAdaptorMock)
301 .syncVersion(eq(createZusammenContext(USER)), eq(new Id(itemId)), eq(new Id(versionId)));
305 public void testForceSync() throws Exception {
306 String itemId = "itemId";
307 String versionId = "versionId";
309 versionDao.forceSync(itemId, new Version(versionId));
311 verify(zusammenAdaptorMock)
312 .forceSyncVersion(eq(createZusammenContext(USER)), eq(new Id(itemId)),
313 eq(new Id(versionId)));
317 public void testRevert() throws Exception {
318 String itemId = "itemId";
319 String versionId = "versionId";
320 String revisionId = "revisionId";
322 versionDao.revert(itemId, new Version(versionId), revisionId);
324 verify(zusammenAdaptorMock)
325 .revert(eq(createZusammenContext(USER)), eq(new Id(itemId)), eq(new Id(versionId)),
326 eq(new Id(revisionId)));
330 public void testListRevisionsWhenNone() throws Exception {
331 String itemId = "itemId";
332 String versionId = "versionId";
334 List<Revision> revisions = versionDao.listRevisions(itemId, new Version(versionId));
336 Assert.assertTrue(revisions.isEmpty());
340 public void testListRevisions() throws Exception {
341 String itemId = "itemId";
342 String versionId = "versionId";
344 long currentTime = System.currentTimeMillis();
345 Date rev4time = new Date(currentTime); // latest
346 Date rev3time = new Date(currentTime - 1);
347 Date rev2time = new Date(currentTime - 2);
348 Date rev1time = new Date(currentTime - 3); // oldest
349 List<com.amdocs.zusammen.datatypes.itemversion.Revision> zusammenRevisions = Stream.of(
350 createZusammenRevision("rev4", "forth rev", "user1", rev4time),
351 createZusammenRevision("rev1", "first rev", "user2", rev1time),
352 createZusammenRevision("rev3", "third rev", "user2", rev3time),
353 createZusammenRevision("rev2", "second rev", "user1", rev2time))
354 .collect(Collectors.toList());
355 ItemVersionRevisions toBeReturned = new ItemVersionRevisions();
356 toBeReturned.setItemVersionRevisions(zusammenRevisions);
357 doReturn(toBeReturned).when(zusammenAdaptorMock)
358 .listRevisions(eq(createZusammenContext(USER)), eq(new Id(itemId)), eq(new Id(versionId)));
360 List<Revision> revisions = versionDao.listRevisions(itemId, new Version(versionId));
362 Assert.assertEquals(revisions.size(), 4);
363 assertRevisionEquals(revisions.get(0), zusammenRevisions.get(0)); // rev4 - latest
364 assertRevisionEquals(revisions.get(1), zusammenRevisions.get(2)); // rev3
365 assertRevisionEquals(revisions.get(2), zusammenRevisions.get(3)); // rev2
366 assertRevisionEquals(revisions.get(3), zusammenRevisions.get(1)); // rev1 - oldest
369 private ItemVersion createZusammenVersion(Id id, Id baseId, String description, String label,
370 VersionStatus status) {
371 ItemVersion version = new ItemVersion();
373 version.setBaseId(baseId);
374 Info info = new Info();
375 info.setName(id + "_name");
376 info.setDescription(description);
377 info.addProperty(VersionZusammenDaoImpl.ZusammenProperty.LABEL, label);
378 info.addProperty(VersionZusammenDaoImpl.ZusammenProperty.STATUS, status.name());
379 ItemVersionData data = new ItemVersionData();
381 version.setData(data);
382 version.setCreationTime(new Date());
383 version.setModificationTime(new Date());
387 private void assetVersionEquals(Version version, ItemVersion zusammenVersion,
388 ItemVersionStatus zusammenVersionStatus) {
389 Assert.assertEquals(version.getId(), zusammenVersion.getId().getValue());
390 Assert.assertEquals(version.getBaseId(),
391 zusammenVersion.getBaseId() == null ? null : zusammenVersion.getBaseId().getValue());
392 Info info = zusammenVersion.getData().getInfo();
393 Assert.assertEquals(version.getName(), info.getName());
394 Assert.assertEquals(version.getDescription(), info.getDescription());
395 Assert.assertEquals(version.getStatus(),
396 VersionStatus.valueOf(info.getProperty(VersionZusammenDaoImpl.ZusammenProperty.STATUS)));
397 String label = info.getProperty(VersionZusammenDaoImpl.ZusammenProperty.LABEL).toString();
399 .assertEquals(version.getMajor(), Integer.parseInt(label.substring(0, label.indexOf('.'))));
400 Assert.assertEquals(version.getMinor(),
401 Integer.parseInt(label.substring(label.indexOf('.') + 1, label.length())));
402 Assert.assertEquals(version.getCreationTime(), zusammenVersion.getCreationTime());
403 Assert.assertEquals(version.getModificationTime(), zusammenVersion.getModificationTime());
405 if (zusammenVersionStatus != null) {
406 Assert.assertEquals(version.getState().isDirty(), zusammenVersionStatus.isDirty());
407 Assert.assertEquals(version.getState().getSynchronizationState().toString(),
408 zusammenVersionStatus.getSynchronizationStatus().toString());
412 private com.amdocs.zusammen.datatypes.itemversion.Revision createZusammenRevision(String id,
416 com.amdocs.zusammen.datatypes.itemversion.Revision revision = new com.amdocs.zusammen
417 .datatypes.itemversion.Revision();
418 revision.setRevisionId(new Id(id));
419 revision.setMessage(message);
420 revision.setUser(user);
421 revision.setTime(time);
425 private void assertRevisionEquals(
427 com.amdocs.zusammen.datatypes.itemversion.Revision zusammenRevision) {
428 Assert.assertEquals(revision.getId(), zusammenRevision.getRevisionId().getValue());
429 Assert.assertEquals(revision.getMessage(), zusammenRevision.getMessage());
430 Assert.assertEquals(revision.getUser(), zusammenRevision.getUser());
431 Assert.assertEquals(revision.getTime(), zusammenRevision.getTime());