VulnerabilityConnector { public Map<UpdateType, List<Vulnerability>> addOrUpdateVulnerabilityAndSetId( Vulnerability vulnerability, Map<UpdateType, List<Vulnerability>> statusToVulnerabilities){ Vulnerability dbVulnerability = vulnerabilityDatabaseHandler.getByExternalId(Vulnerability.class, vulnerability.getExternalId()); if(dbVulnerability != null){ if(! isMoreRecent(vulnerability, dbVulnerability)) { statusToVulnerabilities.get(UpdateType.OLD).add(dbVulnerability); return statusToVulnerabilities; } else { dbVulnerability = VulnerabilityMapper.updateFromVulnerability(dbVulnerability, vulnerability); RequestStatus requestStatus = vulnerabilityDatabaseHandler.update(dbVulnerability); if (RequestStatus.SUCCESS.equals(requestStatus)){ statusToVulnerabilities.get(UpdateType.UPDATED).add(dbVulnerability); return statusToVulnerabilities; } } } else { RequestStatus requestStatus = vulnerabilityDatabaseHandler.add(vulnerability); if (RequestStatus.SUCCESS.equals(requestStatus)){ statusToVulnerabilities.get(UpdateType.NEW).add(vulnerability); return statusToVulnerabilities; } } statusToVulnerabilities.get(UpdateType.FAILED).add(vulnerability); return statusToVulnerabilities; } VulnerabilityConnector(); Optional<Release> getRelease(String releaseId); Optional<Component> getComponent(String componentId); Optional<Project> getProject(String projectId); List<Release> getAllReleases(); boolean isMoreRecent(Vulnerability vulnerability, Vulnerability other); RequestStatus addOrUpdate(ReleaseVulnerabilityRelation partiallyFilledRelation); UpdateType addOrUpdate(Vulnerability vulnerability, ReleaseVulnerabilityRelation partiallyFilledRelation); VulnerabilityUpdateStatus addOrUpdate(Vulnerability vulnerability,
                                                 ReleaseVulnerabilityRelation partiallyFilledRelation,
                                                 VulnerabilityUpdateStatus currentVulnerabilityUpdateStatus); Map<UpdateType, List<Vulnerability>> addOrUpdateVulnerabilityAndSetId(
            Vulnerability vulnerability,
            Map<UpdateType, List<Vulnerability>> statusToVulnerabilities); Map<UpdateType, List<Vulnerability>> addOrUpdateVulnerabilitiesAndSetIds(List<Vulnerability> vulnerabilities); RequestStatus addReleaseVulnerabilityRelationsIfNecessary(String releaseId, List<String> vulnerabilityIds); RequestStatus addReleaseVulnerabilityRelationsIfNecessary(String releaseId, Map<String,List<String>> needleToVulnerabilityIds);  }
@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)); }