Package com.denimgroup.threadfix.importer.check

Source Code of com.denimgroup.threadfix.importer.check.FormatCheckTests

package com.denimgroup.threadfix.importer.check;

import com.denimgroup.threadfix.data.entities.ScannerType;
import com.denimgroup.threadfix.importer.config.SpringConfiguration;
import com.denimgroup.threadfix.importer.exception.ScanFileUnavailableException;
import com.denimgroup.threadfix.data.ScanCheckResultBean;
import com.denimgroup.threadfix.data.ScanImportStatus;
import com.denimgroup.threadfix.importer.parser.ThreadFixBridge;
import com.denimgroup.threadfix.importer.utils.FolderMappings;
import org.junit.Test;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
import java.util.Map;

import static junit.framework.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

@Component
public class FormatCheckTests {

    StringBuilder builder;

    Calendar minusOneYear = Calendar.getInstance();
    { // subtract a year
        minusOneYear.set(Calendar.YEAR, minusOneYear.get(Calendar.YEAR) - 1);
    }

    @Test
    public void testFalseNegatives() {
        ThreadFixBridge threadFixBridge = getThreadFixBridge();

        builder = new StringBuilder();

        for (Map.Entry<ScannerType, Collection<String>> entry : FolderMappings.getEntries()) {
            Calendar mostRecent = null;
            for (String file : entry.getValue()) {
                try {
                    ScanCheckResultBean returnBean =
                            threadFixBridge.testScan(entry.getKey(), new File(file));

                    assertTrue("Got null return bean while testing " + file, returnBean != null);
                    assertTrue("Response status wasn't success for file " + file + ", it was " +
                            returnBean.getScanCheckResult(),
                            returnBean.getScanCheckResult() == ScanImportStatus.SUCCESSFUL_SCAN);

                    if (mostRecent == null || mostRecent.before(returnBean.getTestDate())) {
                        mostRecent = returnBean.getTestDate();
                    }
                } catch (ScanFileUnavailableException e) {
                    e.printStackTrace();
                    assertTrue("Response status wasn't success for file " + file +
                            ". Encountered ScanFileUnavailableException.", false);
                }
            }

            addToBuilder(entry.getKey(), mostRecent);
        }

        System.out.println(builder);
    }

    @Test
    public void testFalsePositives() {
        ThreadFixBridge threadFixBridge = getThreadFixBridge();

        builder = new StringBuilder();

        for (Map.Entry<ScannerType, Collection<String>> outerEntry : FolderMappings.getEntries()) {
            for (Map.Entry<ScannerType, Collection<String>> innerEntry : FolderMappings.getEntries()) {

                if (innerEntry.getKey() != outerEntry.getKey()) {

                    for (String file : innerEntry.getValue()) {
                        try {
                            ScanCheckResultBean returnBean =
                                    threadFixBridge.testScan(outerEntry.getKey(), new File(file));

                            assertTrue("Got null return bean while testing " + file, returnBean != null);
                            assertTrue("Response status was success for scanner " + outerEntry.getKey() +
                                            " and file " + file + ".",
                                    returnBean.getScanCheckResult() != ScanImportStatus.SUCCESSFUL_SCAN);

                        } catch (ScanFileUnavailableException | IllegalStateException e) {
                            // This happens sometimes if zip files can't be read properly
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    }

    private ThreadFixBridge getThreadFixBridge() {
        ThreadFixBridge threadFixBridge = SpringConfiguration.getContext().getBean(ThreadFixBridge.class);
        assertNotNull("Fix your autowiring, ThreadFixBridge instance was null.", threadFixBridge);
        return threadFixBridge;
    }

    private void addToBuilder(ScannerType type, Calendar recentDate) {
        if (recentDate == null) {
            builder.append("No date was found for scanner ")
                    .append(type)
                    .append("\n");
        } else if (recentDate.before(minusOneYear)) {
            builder.append("We only have outdated scans for ")
                    .append(type)
                    .append(". The most recent was ")
                    .append(format(recentDate))
                    .append("\n");
        } else {
            builder.append("Most recent scan for ")
                    .append(type)
                    .append(" was ")
                    .append(format(recentDate))
                    .append("\n");
        }
    }

    public String format(Calendar calendar) {
        return new SimpleDateFormat("MM/dd/yyyy").format(calendar.getTime());
    }

    /**
     * Skipfish parsing used to work but only about half the time. This should ensure that if the problem
     * exists in the code then it will fail at least one test.
     */
    @Test
    @Transactional
    public void runSkipFishLotsOfTimesToMakeSureItWorks() {

        ThreadFixBridge threadFixBridge = getThreadFixBridge();

        for (int i = 0; i < 20; i++) {
            System.out.print('.');
            for (String file : FolderMappings.getValue(ScannerType.SKIPFISH)) {
                System.out.print('-');
                ScanCheckResultBean returnBean =
                        threadFixBridge.testScan(ScannerType.SKIPFISH, new File(file));

                assertTrue("Got null return bean while testing " + file, returnBean != null);
                assertTrue("Response status wasn't success for file " + file + ", it was " +
                        returnBean.getScanCheckResult(),
                        returnBean.getScanCheckResult() == ScanImportStatus.SUCCESSFUL_SCAN);

                threadFixBridge.getScan(ScannerType.SKIPFISH, new File(file));
            }
        }
    }

}
TOP

Related Classes of com.denimgroup.threadfix.importer.check.FormatCheckTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.