/* * Copyright (c) Bosch Software Innovations GmbH 2016. * Part of the SW360 Portal Project. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.sw360.cvesearch.datasink; import org.eclipse.sw360.datahandler.thrift.RequestStatus; import org.eclipse.sw360.datahandler.thrift.cvesearch.UpdateType; import org.eclipse.sw360.datahandler.thrift.vulnerabilities.Vulnerability; import org.eclipse.sw360.vulnerabilities.db.VulnerabilityDatabaseHandler; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import java.util.*; import static org.hamcrest.Matchers.is; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class VulnerabilityConnectorTest { Map<UpdateType, List<Vulnerability>> statusToVulnerabilityMap; @Mock VulnerabilityDatabaseHandler vulnerabilityDatabaseHandler; @InjectMocks VulnerabilityConnector vulnerabilityConnector; @Before public void setUp() throws Exception{ statusToVulnerabilityMap = new HashMap<>(); for (UpdateType updateType: UpdateType.values()){ statusToVulnerabilityMap.put(updateType, new ArrayList<>()); } } @Test public void testAddOrUpdateVulnerabilityAndSetIdOldVulnerability() throws Exception { Vulnerability v1 = new Vulnerability().setLastExternalUpdate("2000-01-01").setId("idv1").setExternalId("eid"); Vulnerability v2 = new Vulnerability().setLastExternalUpdate("2000-01-01").setId("idv2").setExternalId("eid"); when(vulnerabilityDatabaseHandler.getByExternalId(Vulnerability.class, "eid")).thenReturn(v1); Map<UpdateType, List<Vulnerability>> resultMap = vulnerabilityConnector.addOrUpdateVulnerabilityAndSetId(v2, statusToVulnerabilityMap); assertThat(resultMap.get(UpdateType.OLD).get(0).getId(), is("idv1")); assertThat(resultMap.get(UpdateType.NEW), is(Collections.EMPTY_LIST)); assertThat(resultMap.get(UpdateType.UPDATED), is(Collections.EMPTY_LIST)); assertThat(resultMap.get(UpdateType.FAILED), is(Collections.EMPTY_LIST)); } @Test public void testAddOrUpdateVulnerabilityAndSetIdNewVulnerability() throws Exception { Vulnerability v1 = new Vulnerability().setId("idv1").setExternalId("eid"); when(vulnerabilityDatabaseHandler.getByExternalId(Vulnerability.class, "eid")).thenReturn(null); when(vulnerabilityDatabaseHandler.add(v1)).thenReturn(RequestStatus.SUCCESS); Map<UpdateType, List<Vulnerability>> resultMap = vulnerabilityConnector.addOrUpdateVulnerabilityAndSetId(v1, statusToVulnerabilityMap); assertThat(resultMap.get(UpdateType.NEW).get(0).getId(), is("idv1")); assertThat(resultMap.get(UpdateType.OLD), is(Collections.EMPTY_LIST)); assertThat(resultMap.get(UpdateType.UPDATED), is(Collections.EMPTY_LIST)); assertThat(resultMap.get(UpdateType.FAILED), is(Collections.EMPTY_LIST)); } @Test public void testAddOrUpdateVulnerabilityAndSetIdUpdateVulnerability() throws Exception { Vulnerability v1 = new Vulnerability().setLastExternalUpdate("1999-12-31").setId("idv1").setExternalId("eid"); Vulnerability v2 = new Vulnerability().setLastExternalUpdate("2000-01-01").setId("idv2").setExternalId("eid"); when(vulnerabilityDatabaseHandler.getByExternalId(Vulnerability.class, "eid")).thenReturn(v1); when(vulnerabilityDatabaseHandler.update(v1)).thenReturn(RequestStatus.SUCCESS); Map<UpdateType, List<Vulnerability>> resultMap = vulnerabilityConnector.addOrUpdateVulnerabilityAndSetId(v2, statusToVulnerabilityMap); assertThat(resultMap.get(UpdateType.UPDATED).get(0).getId(), is("idv1")); assertThat(resultMap.get(UpdateType.UPDATED).get(0).getLastExternalUpdate(), is("2000-01-01")); assertThat(resultMap.get(UpdateType.NEW), is(Collections.EMPTY_LIST)); assertThat(resultMap.get(UpdateType.OLD), is(Collections.EMPTY_LIST)); assertThat(resultMap.get(UpdateType.FAILED), is(Collections.EMPTY_LIST)); } @Test public void testAddOrUpdateVulnerabilityAndSetIdFailAdd() throws Exception { Vulnerability v1 = new Vulnerability().setLastExternalUpdate("1999-12-31").setId("idv1").setExternalId("eid"); Vulnerability v2 = new Vulnerability().setLastExternalUpdate("2000-01-01").setId("idv2").setExternalId("eid"); when(vulnerabilityDatabaseHandler.getByExternalId(Vulnerability.class, "eid")).thenReturn(v1); when(vulnerabilityDatabaseHandler.update(v1)).thenReturn(RequestStatus.FAILURE); Map<UpdateType, List<Vulnerability>> resultMap = vulnerabilityConnector.addOrUpdateVulnerabilityAndSetId(v2, statusToVulnerabilityMap); assertThat(resultMap.get(UpdateType.FAILED).get(0).getId(), is("idv2")); assertThat(resultMap.get(UpdateType.NEW), is(Collections.EMPTY_LIST)); assertThat(resultMap.get(UpdateType.OLD), is(Collections.EMPTY_LIST)); assertThat(resultMap.get(UpdateType.UPDATED), is(Collections.EMPTY_LIST)); } @Test public void testAddOrUpdateVulnerabilityAndSetIdFailUpdate() throws Exception { Vulnerability v2 = new Vulnerability().setLastExternalUpdate("2000-01-01").setId("idv2").setExternalId("eid"); when(vulnerabilityDatabaseHandler.getByExternalId(Vulnerability.class, "eid")).thenReturn(null); when(vulnerabilityDatabaseHandler.add(v2)).thenReturn(RequestStatus.FAILURE); Map<UpdateType, List<Vulnerability>> resultMap = vulnerabilityConnector.addOrUpdateVulnerabilityAndSetId(v2, statusToVulnerabilityMap); assertThat(resultMap.get(UpdateType.FAILED).get(0).getId(), is("idv2")); assertThat(resultMap.get(UpdateType.NEW), is(Collections.EMPTY_LIST)); assertThat(resultMap.get(UpdateType.OLD), is(Collections.EMPTY_LIST)); assertThat(resultMap.get(UpdateType.UPDATED), is(Collections.EMPTY_LIST)); } @Test public void testaddOrUpdateVulnerabilitiesAndSetIds(){ Vulnerability v1 = new Vulnerability().setLastExternalUpdate("1999-12-31").setId("idv1").setExternalId("eid1"); Vulnerability v2 = new Vulnerability().setLastExternalUpdate("2000-01-01").setId("idv2").setExternalId("eid2"); Vulnerability v3= new Vulnerability().setLastExternalUpdate("2000-01-01").setId("idv3").setExternalId("eid1"); Vulnerability v4 = new Vulnerability().setLastExternalUpdate("2000-01-01").setId("idv4").setExternalId("eid2"); Vulnerability v5 = new Vulnerability().setLastExternalUpdate("1999-12-31").setId("idv5").setExternalId("eid5"); List<Vulnerability> vulnerabilityList = Arrays.asList(v3,v4,v5); when(vulnerabilityDatabaseHandler.getByExternalId(Vulnerability.class, "eid1")).thenReturn(v1); when(vulnerabilityDatabaseHandler.getByExternalId(Vulnerability.class, "eid2")).thenReturn(v2); when(vulnerabilityDatabaseHandler.getByExternalId(Vulnerability.class, "eid5")).thenReturn(null); when(vulnerabilityDatabaseHandler.add(v5)).thenReturn(RequestStatus.SUCCESS); when(vulnerabilityDatabaseHandler.update(v1)).thenReturn(RequestStatus.SUCCESS); Map<UpdateType, List<Vulnerability>> resultMap = vulnerabilityConnector.addOrUpdateVulnerabilitiesAndSetIds(vulnerabilityList); assertThat(resultMap.get(UpdateType.UPDATED).get(0).getId(), is("idv1")); assertThat(resultMap.get(UpdateType.NEW).get(0).getId(), is("idv5")); assertThat(resultMap.get(UpdateType.OLD).get(0).getId(), is("idv2")); assertThat(resultMap.get(UpdateType.FAILED), is(Collections.EMPTY_LIST)); } @Test public void testIsMoreRecentEmpty() throws Exception { Vulnerability v1 = new Vulnerability(); Vulnerability v2 = new Vulnerability(); assertThat(vulnerabilityConnector.isMoreRecent(v1, v2), is(true)); } @Test public void testIsMoreRecentFirstNull() throws Exception { Vulnerability v1 = new Vulnerability(); Vulnerability v2 = new Vulnerability().setLastExternalUpdate("2016"); assertThat(vulnerabilityConnector.isMoreRecent(v1, v2), is(true)); } @Test public void testIsMoreRecentSecondNull() throws Exception { Vulnerability v1 = new Vulnerability().setLastExternalUpdate("2016"); Vulnerability v2 = new Vulnerability(); assertThat(vulnerabilityConnector.isMoreRecent(v1, v2), is(true)); } @Test public void testIsMoreRecentFirstEmpty() throws Exception { Vulnerability v1 = new Vulnerability().setLastExternalUpdate(""); Vulnerability v2 = new Vulnerability().setLastExternalUpdate("2016"); assertThat(vulnerabilityConnector.isMoreRecent(v1, v2), is(true)); } @Test public void testIsMoreRecentSecondEmpty() throws Exception { Vulnerability v1 = new Vulnerability().setLastExternalUpdate("2016"); Vulnerability v2 = new Vulnerability().setLastExternalUpdate(""); assertThat(vulnerabilityConnector.isMoreRecent(v1, v2), is(true)); } @Test public void testIsMoreRecentFirstOlder() throws Exception { Vulnerability v1 = new Vulnerability().setLastExternalUpdate("2015"); Vulnerability v2 = new Vulnerability().setLastExternalUpdate("2016"); assertThat(vulnerabilityConnector.isMoreRecent(v1, v2), is(false)); } @Test public void testIsMoreRecentSecondOlder() throws Exception { Vulnerability v1 = new Vulnerability().setLastExternalUpdate("2016"); Vulnerability v2 = new Vulnerability().setLastExternalUpdate("2015"); assertThat(vulnerabilityConnector.isMoreRecent(v1, v2), is(true)); } }