/*
* Copyright (c) Bosch Software Innovations GmbH 2016.
* With modifications by Siemens AG, 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.datasource;
import org.eclipse.sw360.datahandler.common.CommonUtils;
import org.eclipse.sw360.datahandler.thrift.components.Release;
import org.eclipse.sw360.datahandler.thrift.vendors.Vendor;
import org.eclipse.sw360.cvesearch.service.CveSearchHandler;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
import java.util.Optional;
import java.util.Properties;
import static org.eclipse.sw360.cvesearch.datasource.CveSearchDataTestHelper.isEquivalent;
import static org.eclipse.sw360.cvesearch.datasource.CveSearchDataTestHelper.isUrlReachable;
public class CveSearchWrapperTest {
CveSearchApi cveSearchApi;
CveSearchWrapper cveSearchWrapper;
String VENDORNAME = "zyxel";
String PRODUCTNAME = "zywall";
String CPE = "cpe:2.3:a:zyxel:zywall:1050";
private class ReleaseBuilder {
private String releaseName, releaseVersion, cpe, vendorFullname, vendorShortname;
public ReleaseBuilder setName(String releaseName) {
this.releaseName = releaseName;
return this;
}
public ReleaseBuilder setVersion(String releaseVersion) {
this.releaseVersion = releaseVersion;
return this;
}
public ReleaseBuilder setCpe(String cpe) {
this.cpe = cpe;
return this;
}
public ReleaseBuilder setVendorFullname(String vendorFullname) {
this.vendorFullname = vendorFullname;
return this;
}
public ReleaseBuilder setVendorShortname(String vendorShortname) {
this.vendorShortname = vendorShortname;
return this;
}
public Release get() {
return new Release() {
@Override
public String getName() {
return releaseName;
}
@Override
public boolean isSetName() {
return name!=null;
}
@Override
public String getVersion() {
return releaseVersion;
}
@Override
public boolean isSetVersion() {
return releaseVersion!=null;
}
@Override
public Vendor getVendor() {
return new Vendor() {
@Override
public String getFullname() {
return vendorFullname;
}
@Override
public boolean isSetFullname() {
return vendorFullname!=null;
}
@Override
public String getShortname() {
return vendorShortname;
}
@Override
public boolean isSetShortname() {
return vendorShortname!=null;
}
};
}
@Override
public String getCpeid() {
return cpe;
}
@Override
public boolean isSetCpeid() {
return cpe!=null;
}
};
}
}
@Before
public void setUp() {
Properties props = CommonUtils.loadProperties(CveSearchWrapperTest.class, "/cvesearch.properties");
String host = props.getProperty(CveSearchHandler.CVESEARCH_HOST_PROPERTY, "https://cve.circl.lu");
Assume.assumeTrue("CVE Search host is reachable", isUrlReachable(host));
cveSearchApi = new CveSearchApiImpl(host);
cveSearchWrapper = new CveSearchWrapper(cveSearchApi);
}
@Ignore
@Test
public void testLargeData() throws IOException {
Release release = new ReleaseBuilder()
.setName("server")
.get();
Optional<List<CveSearchData>> resultWrapped = cveSearchWrapper.searchForRelease(release);
assert(resultWrapped.isPresent());
assert(resultWrapped.get() != null);
}
@Test
public void compareToSearchByCPE() throws IOException {
Release release = new ReleaseBuilder()
.setName("blindstring")
.setVendorFullname("blindstring")
.setVendorShortname("blindstring")
.setCpe(CPE)
.get();
List<CveSearchData> resultDirect = cveSearchApi.cvefor(CPE);
Optional<List<CveSearchData>> resultWrapped = cveSearchWrapper.searchForRelease(release);
assert(resultWrapped.isPresent());
assert(resultWrapped.get() != null);
assert(isEquivalent(resultDirect,resultWrapped.get()));
}
@Ignore("meanwhile cveSearchWrapper implementation changed, test maybe suitable for later use")
@Test
public void compareToWithoutWrapper() throws IOException {
Release release = new ReleaseBuilder()
.setName(PRODUCTNAME)
.setVendorFullname(VENDORNAME)
.get();
List<CveSearchData> resultDirect = cveSearchApi.search(VENDORNAME, PRODUCTNAME);
Optional<List<CveSearchData>> resultWrapped = cveSearchWrapper.searchForRelease(release);
assert(resultWrapped.isPresent());
assert(resultWrapped.get() != null);
assert(resultWrapped.get().size() > 0);
assert(isEquivalent(resultDirect,resultWrapped.get()));
}
}